关于VARCHAR(2000)的处理

handycyw 2006-05-26 03:41:50
1、PB结合Oracle的时候,VARCHAR(2000)的处理很正常,没有什么问题。

2、PB结合MS SQL SERVER 2000的时候,构造Datawindow的时候,字段就变成char(255),此时,使用Edit source 强制修改成 char(2000)后,虽然保存成功,但是,程序运行后,Update和Select的数据依然最多是255长。
使用 游标 进行 Select,返回的最长也是255;
使用 直接的SQL语句,返回的最长也是255;

奇怪的是,使用INSERT,居然可以超过255。我将1000多的字符串INSERT进去了,现在SELECT出不来了。

3、本想将DBMS修改成OLE DB,但是由于程序中存在 TEXT 类型的字段, OLE DB中,对SELECTBLOB和UPDATEBLOB限制很严格,再加上有没有其他的特殊的地方,暂时不敢修改。
...全文
461 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
lzheng2001 2006-05-29
  • 打赏
  • 举报
回复
我在客户现场使用时的感觉的。直连基本没有延迟,OLE DB 则大概要2秒左右的时间。
=====================================
是吗?会不会是程序的问题? oledb我也用过,速度差别应该不会这么明显
wanglv 2006-05-29
  • 打赏
  • 举报
回复
用ODBC连接方式即可
zylt 2006-05-29
  • 打赏
  • 举报
回复
使用SELECTBLOB和UPDATEBLOB的表是不是必须要有主健。
handycyw 2006-05-27
  • 打赏
  • 举报
回复
OLE DB 连接速度比直连要慢一些。 这是我在客户现场使用时的感觉的。直连基本没有延迟,OLE DB 则大概要2秒左右的时间。
SELECTBLOB和UPDATEBLOB限制很严格的意思是:
我的数据库中还有其他多个地方使用的是TEXT类型的字段,原来就是使用SELECTBLOB和PDATEBLOB的;
修改成使用OLEDB的时候SELECTBLOB和UPDATEBLOB提示错误!
先谢谢各位,周一上班后,测试一下(家里没有源代码),后再结贴....
shidizhima 2006-05-27
  • 打赏
  • 举报
回复
学习ing
lzheng2001 2006-05-27
  • 打赏
  • 举报
回复
楼主还是说说oledb有什么严格限制吧,我以后都打算用oledb来连接了,你却说有问题 ...
hygougou 2006-05-27
  • 打赏
  • 举报
回复
改连接方式或者用lzheng2001的方法了

oledb连接方式肯定比直连更具优势了

速度上就比直连快等,否则sybase也不会

抛弃直连,也不会成为微软主攻方向了
lzheng2001 2006-05-26
  • 打赏
  • 举报
回复
上面的"欺骗"PB的方法,是我以前突然想到的,已经测试过,楼主可以试试.
当然楼主的字段长度为2000,就没必要改DBTextLimit=8000了.我只是多说几句,让以后的人知道.

lzheng2001 2006-05-26
  • 打赏
  • 举报
回复
忘记说有一种比较好的解决方法:
假设col2是varchar(8000)列.

用这样的SQL语句作为dw的数据源,你就可以用直连方式更新长度大于255的varchar字段!
select col1, convert(text,col2) as col2 from 表

这种方法是"欺骗"PB,要求它把varchar当成text来更新数据!

另外
可以通过设置SQLCA.DBParm = "OptSelectBlob=1,DBTextLimit='8000'"的办法使得DW能对TEXT字段支持8000字节(PB的DW对MSS默认只支持4099字节)
这样能够满足大部分较长文本保存的需求
而且能够充分利用DW的优势

不改变连接方式及字段类型的情况下, 我相信这个是最好的解决方法了. 楼主结贴吧:)

还是希望楼主说一下oledb有什么严格限制,怎么我没遇到过呢,谢谢了.
yangyafei 2006-05-26
  • 打赏
  • 举报
回复
我也遇见过,后来用ODBC连接方式可行。
lzheng2001 2006-05-26
  • 打赏
  • 举报
回复
1. OLE DB中,对SELECTBLOB和UPDATEBLOB限制很严格,再加上有没有其他的特殊的地方,暂时不敢修改。
==========================================
怎么严格? 楼主能说说吗?

2.用直连方式的话,varchar最多只能是255,这点你没法改!
提供解决问题的办法:a.改连接方式ODBC或者oledb都可以(就是不明白为什么楼主说oledb限制很严格)
b.修改varchar字段为text类型.





lmby 2006-05-26
  • 打赏
  • 举报
回复
呵呵,我老早发过关于这个的帖了.找出来给你.

由于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
weifai88 2006-05-26
  • 打赏
  • 举报
回复
这个问题我也遇过,最好的办法也只能改数据类型,改成text
hangzhou6274 2006-05-26
  • 打赏
  • 举报
回复
用ms sqlserver专用连接varchar只支持255,你可以改成text连接
如果不想改数据库结构的话那你只有该用odbc连接。
  • 打赏
  • 举报
回复
连接方式改为 OLE DB 或 ODBC 就OK了,MSS连接只能读255
handycyw 2006-05-26
  • 打赏
  • 举报
回复
把varchar 类型修改并不现实。
软件已经在多家单位使用,原来使用的是200长。
现在遇到的问题是,新的1家,存在超过255长的数据,因此,要把该字段加长。

我现在怀疑是DBMS的配置。因为ORACLE和OLE DB 支持的很好,
那么应该是DBMS的配置或者DLL问题。
MS SQL SERVER 2000中的varchar字段也支持8000长的。
圣殿骑士18 2006-05-26
  • 打赏
  • 举报
回复
不要用varchar用text试试?
orcd 2006-05-26
  • 打赏
  • 举报
回复
关注...

1,075

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧