PB对数据库字段varchar类型255的限制问题

本文探讨了PowerBuilder因继承Sybase数据库对VARCHAR类型的255字符限制,在面对SQL Server支持高达8000字符的VARCHAR时的挑战。提出了多种解决方法,包括使用ODBC连接、替换为TEXT类型及通过特定技巧处理超过255字符的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于PB是Sybase公司的产品,沿袭了sybase数据库对varchar类型255的限制。然而现在sql   server的varchar已经达到8000,而pb的dbm依然只能处理255。个人认为对这个问题有以下解决方法。欢迎大家讨论。  
   
  1.不用数据库直连,改用ODBC连接方式。  
   
  2.如果还是用直连方式,可以选用text类型替代varchar(500)  
   
  3.如果还是用直连,还是varchar(500),可以通过以下方法处理:  
  数据表(n_id         integer         not   null       PK,     c_content       varchar(500)   null):  
   
  如果要写数据库,可以做个dw,数据源为该表的n_id和c_content  
  这时候你会发现c_content的limit为255.你可以将该数据窗口export,然后edit该srd文件,将c_content的limit改为500,然后import回来,就可以输入500的字符并成功update了。  
  注意,如果直接修改其limit为500,输入大于255的字符时就会报错。  
   
  如果要读数据库,以取varchar(1000)为例:  
  定义4个计算列,分别是:      
  select     column1,     column2,     ......,     substring(     rem,     1,     len(     rem)     /     4     )     C1,     substring(     rem,     len(rem)/4     +     1,     len(rem)/4)     c2,     substring(     rem,     len(rem)/4*2     +     1,     len(rem)/4)     c3,     substring(     rem,     len(rem)/4*3     +     1,     len(rem)/4)     c4,          
     
  另外计算列     c5     =     c1+c2+c3+c4  

 

 

更好的一个办法,以测试通过:

// Profile
SQLCA.DBMS = "MSS Microsoft SQL Server 6.x"
SQLCA.Database = "master"
SQLCA.LogPass = 'sa'
SQLCA.ServerName = "data"
SQLCA.LogId = "sa"
SQLCA.AutoCommit = False
SQLCA.DBParm = ""
connect;

string ls_c
select cast(unit as text) into :ls_c from tb;
messagebox(string(len(ls_c)),ls_c)
select unit  into :ls_c from tb;
messagebox(string(len(ls_c)),ls_c)

 

结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值