关于pb从sqlserver中取字符串的问题

zhangma520 2009-06-10 04:10:59
各位,我遇到了这样一个问题,需要从sqlserver数据库中的某个表的某些字段组合得到一个字符串
首先是用
方式一、
SQLCA.DBMS = "MSS Microsoft SQL Server"
SQLCA.Database = "aa"
SQLCA.LogPass = "sa"
SQLCA.ServerName = "aa"
SQLCA.LogId = "sa"
SQLCA.AutoCommit = False
SQLCA.DBParm = ""
这种方式连接数据库,这种方式连接数据库的一个问题就是从sqlserver里面取出来的字符串长度不能超过255位

而后又改成Oledb的连接数据库,方式二
SQLCA.DBMS = "OLE DB"
SQLCA.AutoCommit = False
SQLCA.DBParm = "DATALINK='SQLServer.udl'"
这种方式就没有字符串长度的限制,但是比如我想得到下面这个结果不知道该怎么实现

string sql
select 'a'+','''+'b' into :sql from table1;
按道理,在sql中可以得到 a,'b这样的结果,可在方式一和方式二下系统都提示:缺少对象或列名,或者对象或列名为空。。。

string sql
select "a"+",'"+"b" into :sql from table1;
这种写法在方式二时编译时不会报错,但是运行时取不到数据,sqlerrtext为:列名 'a' 无效。而在方式一时能得到我想要的结果a,'b 但是就是字符串长度不能超过255位。

不知道各位有什么解决办法没有?



...全文
412 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
风_雨_晴 2009-06-13
  • 打赏
  • 举报
回复
string sql
select "a"+",'"+"b" into :sql from table1;
或者
select col1 + ",'" + col2 into :sql from table1;
都可以正确运行的
zhangma520 2009-06-11
  • 打赏
  • 举报
回复
而且我原来是用oracle的,pb连接ORACLE的环境下,上面这个语句是没有问题的,就是在sqlserver里面会有问题
zhangma520 2009-06-11
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 jimwoo 的回复:]
为什么要用SQL做字符串相加呢
[/Quote]

这里我只是举例,其实a和b在我的程序里都是一个字段,其实是
select col1 + ',''' + col2 into :sql from table1之类的语句
xiaoyehua 2009-06-11
  • 打赏
  • 举报
回复
每天一回复,多多可用分
Fantazindy_yang 2009-06-11
  • 打赏
  • 举报
回复
PB里对STRING的注释:Any ASCII character with variable length (0 to 2,147,483,647).
基本上够你取的,不行的话
用selectblob从SQL里取试试
zhangma520 2009-06-11
  • 打赏
  • 举报
回复
其实办法还是有,用方式二
sql语句写成:

string sql
select 'a'+',“'+'b' into :sql from table1;
得到的结果是a,"b ,在通过Pb的replace还是去把"替换成',这里又有两个问题了,一个是Pb的replace函数很不智能,要找到"的位置一个一个去替换,得写一个循环,如果字符串很长,而且我这种情况用得很多,就会影响效率,第二个问题是如果本身a或者b中有双引号,那就出问题了,各位还有什么好办法没有啊?
风_雨_晴 2009-06-11
  • 打赏
  • 举报
回复
为什么要用SQL做字符串相加呢
zhangma520 2009-06-10
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 Fantazindy_yang 的回复:]
你用的应该是数据窗口取的字符窜吧?
数据窗口sting列最多只能取到255,编辑框不在此限制,
如果想在数据窗口取大于255的字符,只有换数据库连接方式,
一般这种方法不会用,所以只有在数据窗口上做一个编辑框控件,单独从数据库取出字符窜
用SELECTBLOB 取
updateblob保存
[/Quote]

我不是用的数据窗口,就是普通button的script里面啊
Fantazindy_yang 2009-06-10
  • 打赏
  • 举报
回复
你用的应该是数据窗口取的字符窜吧?
数据窗口sting列最多只能取到255,编辑框不在此限制,
如果想在数据窗口取大于255的字符,只有换数据库连接方式,
一般这种方法不会用,所以只有在数据窗口上做一个编辑框控件,单独从数据库取出字符窜
用SELECTBLOB 取
updateblob保存
永生天地 2009-06-10
  • 打赏
  • 举报
回复
Pb的限制,恶心了
[Quote=引用 6 楼 zhangma520 的回复:]
引用 5 楼 xys_777 的回复:
超过255了 sql查询分析里也不行啊
这个sqlserver的限制,没办法

想想其他方法吧



应该不是sqlserver的限制吧,sqlserver里面可以取到超过255的长度,应该是Pb的限制吧
[/Quote]
zhangma520 2009-06-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xys_777 的回复:]
超过255了 sql查询分析里也不行啊
这个sqlserver的限制,没办法

想想其他方法吧
[/Quote]

应该不是sqlserver的限制吧,sqlserver里面可以取到超过255的长度,应该是Pb的限制吧
永生天地 2009-06-10
  • 打赏
  • 举报
回复
超过255了 sql查询分析里也不行啊
这个sqlserver的限制,没办法

想想其他方法吧
zhangma520 2009-06-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jlwei888 的回复:]
把列的引号去了试试!
[/Quote]

我上面说得a和b都不是字段,就是普通的字符串常量应该也可以吧
zhangma520 2009-06-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xys_777 的回复:]
SQLCA.DBParm = "DBTextLimit='32000'"
[/Quote]

这张方法只对text字段类型有用,对varchar没有用,试过了啊
jlwei888 2009-06-10
  • 打赏
  • 举报
回复
把列的引号去了试试!
永生天地 2009-06-10
  • 打赏
  • 举报
回复
SQLCA.DBParm = "DBTextLimit='32000'"

754

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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