关于一条sql语句。我实在不明白了。我自己已经通过很多方法。没改好。请教(我只有10分了。)

兔子-顾问 2004-08-21 09:41:08
这里,我先用游标读取的表名和列名,分别放再 ls_column ls_tabname 里的

select :ls_column from :ls_tabname;


提示: ' ' 附近有语法错误

我逐个替换:
select 供货商名称 from 供货商信息;
显示正常

select :ls_column from 供货商信息;
语法正确,可是结果,输出了n个选择的列名,n=当前记录数

select 供货商名称 from :ls_tabname;
提示:' ' 附近语法错误。


我的这些sql语句肯定没有表达我想表达的意思。那么,他们到底是表达的意思是什么?
...全文
217 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
兔子-顾问 2004-09-08
  • 打赏
  • 举报
回复
没时间尝试。不过感谢你们的指教,动态游标没用过。学习已下,工作有时间再看,这个功能我已经从软件里去掉呢。暂时不用。还是谢谢大家,tinyghost(鬼精灵) 学的很扎实啊。佩服。谢谢。
兔子-顾问 2004-08-23
  • 打赏
  • 举报
回复
debye(德拜)

那条语句不是单独使用的。是声明游标的条件。
declare c_cur cursor for
select :ls_column from :ls_tabname;
zjyoo 2004-08-23
  • 打赏
  • 举报
回复
select 列名 into 变量 from 表
兔子-顾问 2004-08-23
  • 打赏
  • 举报
回复
mittee(最后一条大白鲨)
通过用户选择,点击列表时,记录到变量,然后通过这些变量保存的表名,列名,显示对应的 表。列内的数据,
兔子-顾问 2004-08-23
  • 打赏
  • 举报
回复
10975037(猩猩)
你的意思,要建立一个临时用的表么? 这个程序测试用,不过我想知道为什么会有这种提示?是PB的BUG?还是我理解上的问题?说不通啊。PB的SQL语法中,允许使用用户变量的啊。为什么表名和列名不可以用变量呢?如果建立临时表,读取的时候不一样要保存再变量里么?
兔子-顾问 2004-08-23
  • 打赏
  • 举报
回复
wang131425(小狗狗-子鱼)
从语句上很容易理解的没错吧。我的意思我在一楼说的很明白了啊。3个list,第一个用游标存放了表名,第一个点击,触发事件,第二个显示对应的列名,第三个显示 选中表,选中列的内容,同样用游标实现,大家都看看问题好不好。别老让我看帮助。要是可以看懂我就不问了啊。问题再复述一下。

看看我调试的过程好吗?

sting ls_column,ls_tabname
ls_column = 已经获得了表名,这里是一个确定的值。
ls_tabname = 已经获得的列名,也是一个确定的值。使用MESSAGEBOX显示过。变量内容没错。

主要问题是这个。为什么会有这个提示?我不是不思考就问,拜托也看看我自己判断问题的过程,别那么主观的让我看帮助!

select :ls_column from :ls_tabname;


提示: ' ' 附近有语法错误

我逐个替换:
select 供货商名称 from 供货商信息;
显示正常

select :ls_column from 供货商信息;
语法正确,可是结果,输出了n个选择的列名,n=当前记录数

select 供货商名称 from :ls_tabname;
提示:' ' 附近语法错误。


debye 2004-08-23
  • 打赏
  • 举报
回复
*****************************************************
debye(德拜)

那条语句不是单独使用的。是声明游标的条件。
declare c_cur cursor for
select :ls_column from :ls_tabname;
********************************************************
我没有用过动态游标,但是我觉得在游标里表名还是不能用变量
除非象楼上的一样,连起来还是可以的
tinyghost 2004-08-23
  • 打赏
  • 举报
回复
楼主:游标里面使用动态sql?你看看下面的语句可以用么? string str

sql="select "+ls_column+" from" +ls_tabname
prepare sqlsa from :sql;

describe sqlsa into sqlda;

declare c1 dynamic cursor for sqlsa;

open dynamic c1 using descriptor sqlda;
...
if sqlca.sqlcode<0 then

messagebox("提示信息","动态游标无法执行!"+sqlca.sqlerrtext)

return sqlca.sqlcode

end if
..fetch c1 using descriptor sqlda;
....
if sqlca.sqlcode=0 then

choose case sqlda.outparmtype[1]

case typestring!

typename="string"

str=getdynamicstring(sqlda,1)

case typedate!

typename="date"

str=string(getdynamicdate(sqlda,1),"yyyy-mm-dd")

case else

typename="number"

str=string(getdynamicnumber(sqlda,1))

end choose

ddlb_2.additem(str)



end if
......
close c1;

为了支持动态SQL,PowerBuilder提供了两种数据类型:DynamicStagingArea 和DynamicDescriptionArea。Powerbuilder使用DynamicStagingArea类
型的变量为后续语句保存信息,用作语句的运行和事物对象之间的连接。DynamicStagingArea类型的变量是PowerBuilder内部使用的,用户无法访问
DynamicStagingArea中的信息。PowerBuilder提供了一个全局的DynamicStagingArea变量,变量名为SQLSA,当需要一个DynamicStagingArea变量时可
以使用它。用户也可以根据需要定义并创建另外的DynamicStagingArea类型的变量。
10975037 2004-08-22
  • 打赏
  • 举报
回复
select 字段名,表名是变量恐怕不行,你把游标取出的字段写到一个表中,在从那个表中读取,(where 表名)
debye 2004-08-21
  • 打赏
  • 举报
回复
在SELECT 中表名和字段名是不能这样用参数的
select :ls_column from :ls_tabname;

可以这样:
string ls_sql
ls_sql = "select" + ls_column + "from" + ls_tabname
EXECUTE IMMEDIATE :ls_sql;
ZHAOKEDE 2004-08-21
  • 打赏
  • 举报
回复
select 供货商名称 into :ls_column from 供货商信息
wang131425 2004-08-21
  • 打赏
  • 举报
回复
楼主语句有问题;
select :ls_column from :ls_tabname;
这是什么意思。
建议看帮助或参考手册
mittee 2004-08-21
  • 打赏
  • 举报
回复
select :ls_column from :ls_tabname;
//请告诉我你用这个句子想得到什么结果,
//还是把它作为数据窗口的数据源
风中骑行 2004-08-21
  • 打赏
  • 举报
回复
看PB帮助的 Dynamic SQL 3

1,109

社区成员

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

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