急!!!sql问题,如何实现下面第二种情况?

byfq 2002-04-19 02:02:29
第一种情况是正确的,第二种情况总是不正确,
什么原因呀?应该怎么做?请高手赐教!
string ls_datasour
long ll_count

ls_datasour = 'elxb' //1

//ls_datasour = "'elxb'"+ ',' + "'fsyl'" //2

select count(*) into :ll_count FROM pbcatcol where pbcatcol.pbc_tnam in ( :ls_datasour);

messagebox(string(sqlca.sqlcode) +string(ll_count) +sqlca.sqlerrtext,ls_datasour)
...全文
40 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
byfq 2002-04-19
  • 打赏
  • 举报
回复
to far_ranging(大路) :
游标怎么用啊?都加分号了,
DECLARE lcur_1 CURSOR FOR :ls_sql; 编译不过去呀,
提示无效的sql语句,期待delete,insert,select ,update
far_ranging 2002-04-19
  • 打赏
  • 举报
回复
byfq(不愿放弃) :
你的方法也很好,是利用数据窗口来取出数据。
不过游标的方法对于区很少的数据的时候,例如:count(*)就很方便。
恭喜你,看来你真的是不愿放弃哦
far_ranging 2002-04-19
  • 打赏
  • 举报
回复
DECLARE lcur_1 CURSOR FOR :ls_sql;
OPEN lcur_1;
FETCH lcur_1 INTO :ll_count;
CLOSE lcur_1;

这几句最后都要加分号。
byfq 2002-04-19
  • 打赏
  • 举报
回复
我很是很奇怪,上述问题真的不能直接解决,
我找到另外一种办法,呵呵~~,大家看看,
////
ll_rtncode = gf_parsetoarray(as_tabname,",",lsa_tab)
for ll_i = 1 to ll_rtncode
ls_datasour = ls_datasour + "'" + trim(lsa_tab[ll_i]) + "',"
next
ls_datasour = left(ls_datasour,len(ls_datasour) -1)

//从系统表pbcatcol中取列名
ls_sql = "select trim(pbcatcol.pbc_cnam) FROM pbcatcol where &
trim(pbcatcol.pbc_hdr) = '" + as_str + "' and " + &
"trim(pbcatcol.pbc_tnam) in ("+ls_datasour + ")"

if ll_rtncode > 1 then
ls_sql = "select trim(pbcatcol.pbc_tnam) + '.' + trim(pbcatcol.pbc_cnam) &
FROM pbcatcol,pbcattbl where pbcatcol.pbc_tnam = pbcattbl.pbt_tnam and &
pbcattbl.pbt_cmnt + '.' + trim(pbcatcol.pbc_hdr) = '" + as_str + "' and " + &
"pbcatcol.pbc_tnam in in ("+ls_datasour + ")"
end if
ls_syntax = SyntaxFromSQL(sqlca, ls_sql , "style(type=grid)", ls_err)
If ls_err <> '' Then
MessageBox("提示", ls_err)
Return false
End If
lds_colname = create datastore
lds_colname.Create(ls_syntax)
lds_colname.settransobject(sqlca)
ll_count = lds_colname.retrieve()
if ll_count = 0 then return false
as_str = lds_colname.getitemstring(1,1)
destroy lds_colname
return true
byfq 2002-04-19
  • 打赏
  • 举报
回复
to far_ranging(大路) :
用数组怎么做?
还有,DECLARE lcur_1 CURSOR FOR :ls_sql; 编译不过去呀,
提示无效的sql语句,期待delete,insert,select ,update

topson_fj 2002-04-19
  • 打赏
  • 举报
回复
in后面要接一下数组,可惜的是PB中不支持,奈何,正在寻求别的解决方法。
far_ranging 2002-04-19
  • 打赏
  • 举报
回复

关键是逗号在内嵌的SQL语句里不能发在变量里
要不然就是定义一个数组,然后判断数组个数,得到正确的那个SQL语句
byfq 2002-04-19
  • 打赏
  • 举报
回复
不用游标可以吗?
far_ranging 2002-04-19
  • 打赏
  • 举报
回复
刚才又错误

ls_sql = "select count(*) FROM pbcatcol where pbcatcol.pbc_tnam in ('" + ls_datasour1 +"','" + ls_datasour2 + "')"

far_ranging 2002-04-19
  • 打赏
  • 举报
回复
ls_sql = 'select count(*) FROM pbcatcol where pbcatcol.pbc_tnam in (' + ls_datasour1 +',' + ls_datasour2 + ')'

DECLARE lcur_1 CURSOR FOR :ls_sql;
FTECH lcur_1 INTO :ll_count;
andyzq 2002-04-19
  • 打赏
  • 举报
回复
ls_datasour = '"' + "elxb"+ '"' + ',' + '"' + "elxb" + '"' + ',' + &
'"' + "xxx1"+ '"' + ',' + '"' + "xxx2" + '"' ......

这样做显示出来的就是: "elxb","elxb","xxx1","xxx2"
byfq 2002-04-19
  • 打赏
  • 举报
回复
帮忙啊!!!
byfq 2002-04-19
  • 打赏
  • 举报
回复
大路说的可以,不过,那样意义就不大了,因为ls_datasour 内的值的个数是不定的,我怎么办?
byfq 2002-04-19
  • 打赏
  • 举报
回复
你们说的都不行啊,我刚又试了一边,结果都是,
ll_count = 0 ,sqlca.sqlcode =0
而,
select count(*) into :ll_count FROM pbcatcol where pbcatcol.pbc_tnam in ( 'elxb','fsyl');

可得到ll_count = 115,为什么啊?我用的是pb6.5+access 2000,
请赐教!
zhangbat 2002-04-19
  • 打赏
  • 举报
回复
同意 kaikaihe(开开) 的做法 :)
far_ranging 2002-04-19
  • 打赏
  • 举报
回复
试试这个

string ls_datasour
long ll_count

ls_datasour1 = 'elxb' //1

ls_datasour2 = 'fsyl' //2

select count(*) into :ll_count FROM pbcatcol where pbcatcol.pbc_tnam in ( :ls_datasour1, :ls_datasour2);

messagebox(string(sqlca.sqlcode) +string(ll_count) +sqlca.sqlerrtext,ls_datasour1 + ls_datasour2)
愉快的登山者 2002-04-19
  • 打赏
  • 举报
回复
用 ls_datasour = 'elxb'+ ',' + 'fsyl' 试一试。
kaikaihe 2002-04-19
  • 打赏
  • 举报
回复
ls_datasour = "'elxb','fsyl'"
thlong 2002-04-19
  • 打赏
  • 举报
回复
//ls_datasour = "'elxb'"+ "," + "'fsyl'" //2

1,077

社区成员

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

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