您的位置:程序门 -> powerbuilder -> 基础类



pb中如何处理查询中的引号问题?


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


pb中如何处理查询中的引号问题?
发表于:2007-05-22 14:11:07 楼主
如果在查询条件中用英文输入法输入一个单引号或双引号,pb都会报错。应该怎么处理?
发表于:2007-05-22 14:53:001楼 得分:0
最好把条件贴出来
发表于:2007-05-22 15:02:012楼 得分:0
比如,sle_1用来让用户输入查询条件。然后根据查询条件构造sql语句。例如:
str   =   "(name   like   '% "   +   sle_1.text   +   "% ') "
dw_1.setfilter(str)
dw_1.filter()
如果在sle-1中输入了一个单引号,str   里头就多了一个单引号,构造的sql语句也就不合法。
发表于:2007-05-22 16:09:103楼 得分:0
sle_1中的单引号前要加转义字符   如sle_1.text   =   "你好~ '吗~ ' "
发表于:2007-05-22 16:11:274楼 得分:0
先用替换把sle_1.text中的 '替换成~ '

str   =   "(name   like   ~ '% "   +   sle_1.text   +   "%~ ') "
dw_1.setfilter(str)
dw_1.filter()

就不会有问题了
发表于:2007-05-23 09:44:145楼 得分:0
但如何区别是哪个引号呢,比如(name   like   '% '% ')在查询时就会报错
发表于:2007-05-23 11:03:396楼 得分:0
(name   like   '%~ '% ')//不加转义字符系统会默认把中间的单引号当作字符串的结束   当然会报错   你把 '%% '这个字符串里面的引号都加上转义字符不就行了
发表于:2007-05-23 13:37:157楼 得分:0
好象还不行,我就在查询条件中写上(name   like   '%~ '% '),查询依然出错。
发表于:2007-05-23 13:46:368楼 得分:0
晕,上面理解错了
发表于:2007-05-23 13:50:569楼 得分:0
if   bargain_number   =   " "   then
messagebox( " ", "请填写合同号 ")
return
end   if
long   postn
postn   =   pos(bargain_number, " ' ")
bargain_number   =   replace(bargain_number,postn,postn+len( " ' "), "~ ' ")
string   slct_str
slct_str   =   “数据窗口sql语句”
slct_str   +=   "   and   "   +   "(name   like   ~ '% "   +   bargain_number   +   "%~ ') "
dw_1.modify( 'datawindow.table.select   =   " '   +   slct_str   +   ' " ')
dw_1.retrieve()

把代码帖出来了,麻烦帮我看看吧
发表于:2007-05-23 14:03:3110楼 得分:0
我试过了   没问题的
想测试语句有没有问题   可以打开这个dw,菜单rows-> filter   把这个条件输进去   点击verify校验一下   我这儿filter   is   ok
肯定是别的地方
我已经尽力了   自己找原因吧
发表于:2007-05-23 14:14:3011楼 得分:0
//替换要用循环   你那样做只替换了一个
if   bargain_number   =   " "   then
messagebox( " ", "请填写合同号 ")
return
end   if

int   i=0

do   while   1=1
  i   =   pos(bargain_number, " ' ")  
  if   i   >   0   then  
bargain_number   =   replace(bargain_number,i,len( " ' "), "~ ' ")
  else  
exit
  end   if  
loop

string   slct_str
slct_str   =   “数据窗口sql语句”
slct_str   +=   "   and   "   +   "(name   like   ~ '% "   +   bargain_number   +   "%~ ') "
dw_1.modify( 'datawindow.table.select   =   " '   +   slct_str   +   ' " ')
dw_1.retrieve()
//再试一下
发表于:2007-05-23 14:15:3612楼 得分:0
thanks   all   the   same
发表于:2007-05-23 20:16:2913楼 得分:0
用setfilter的话用pos函数,,

str   =   "pos(name, ' "   +   sle_1.text   +   " ')> 0 "
dw_1.setfilter(str)
dw_1.filter()
发表于:2007-05-24 09:58:4314楼 得分:0
楼上
str   =   "pos(name,sle_1.text)   >   0 "         ????????????????
这是何意?


快速检索

最新资讯
热门点击