不是说datawindow和datastore相似吗?为是么这样不可以?

sjlion 2007-06-15 02:29:43
代码段A:
string ls_syntax,ls_sql,ls_error
datawindow xxx
xxx = create datawindow

ls_sql = 'SELECT "OP_BUTTON_TBL"."WINDOW" FROM "OP_BUTTON_TBL"'
ls_syntax = sqlca.syntaxfromsql(ls_sql,'',ls_error)

if len(ls_error) > 0 then messagebox('??',ls_error)
xxx.create(ls_syntax,ls_error)

if len(ls_error) > 0 then messagebox('??',ls_error)
xxx.settransobject(sqlca)

if xxx.retrieve()<0 then return


代码段B:
除了把datawindow xxx 的定义改成datastore xxx外无任何区别。即

string ls_syntax,ls_sql,ls_error
datastore xxx
xxx = create datastore
.....
if xxx.retrieve()< 0 then return

代码段A执行一直到retrieve前无错误信息,但是xxx.retrieve()返回-1,检索失败。代码段B则没有任何问题,请问高人,这是怎么回事?给出答案马上结帖
...全文
361 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sjlion 2007-11-23
  • 打赏
  • 举报
回复
几乎忘了这个帖子,不好意思。
sjlion 2007-06-15
  • 打赏
  • 举报
回复
回芭蕉:
你说的没错,‘动态创建datawindow 必须是已经有该数据窗口控件’,这个我知道,只是早先以为它也能用create创建。因为是在写一个函数,所以不可能在 painter里创建,现在问题算解决了吧,如下,加了一个window参数ar_window,不再creat datawindow
而是改成
datawindow xxx
ar_window = openuserobject(xxx)
.....

多谢两位的回复
doodle 2007-06-15
  • 打赏
  • 举报
回复
就是说
用动态sql语句创建了dataobject对象,然后赋值给已有的datawindow或者datastore

而datastore本身就需要动态创建
doodle 2007-06-15
  • 打赏
  • 举报
回复
动态创建datawindow 必须是已经有该数据窗口控件
比如窗口上放dw_1,dataobject不指定,然后用这种方式动态创建

即:下面两句不需要
datawindow xxx
xxx = create datawindow

而datastore本身是不可视的 所以需要
datastore xxx
xxx = create datastore

其实后面syntaxfromsql、create(ls_syntax,ls_error)就相当于动态创建了dataobject对象
sjlion 2007-06-15
  • 打赏
  • 举报
回复
多谢嘘嘘兔,可惜你还是没回答我的问题。也许下边的是正解吧,来自sybase新闻组。结帖

1。You can not create Datawindows (or any visual object for that matter)
using CREATE. Use OpenUserObject/OpenUserObjectWithParm instead.

2。When you're in PowerBuilder and you open up the dw painter, you are
building a "data object". To use this "data object" on a window (or any
visual environment), you assign it to a "data window". To use the "data
object" in a nonvisual environment, you would assign it to a "data store".

You start with a SQL statement stored in a string variable. From that,
you call the transaction object's SyntaxFromSQL() method to get the
syntax for a "data object". Now, if you want to use this "data object"
visually, you need to call OpenUserObject() to create a "data window",
then call that "data window"'s CREATE() method to create the "data
object". But if you want to use the "data object" nonvisually, you need
to CREATE a "data store", then use the "data store"'s CREATE() method to
actually create the "data object".
嘘嘘兔 2007-06-15
  • 打赏
  • 举报
回复
这样看行不行,首先在窗口上放置一个数据窗口控件dw_1, 然后
string ls_syntax,ls_sql,ls_error



ls_sql = 'SELECT "OP_BUTTON_TBL"."WINDOW" FROM "OP_BUTTON_TBL"'
ls_syntax = sqlca.syntaxfromsql(ls_sql,'',ls_error)

if len(ls_error) > 0 then messagebox('??',ls_error)
dw_1.create(ls_syntax,ls_error)

if len(ls_error) > 0 then messagebox('??',ls_error)
dw_1.settransobject(sqlca)

if dw_1.retrieve()< 0 then return
sjlion 2007-06-15
  • 打赏
  • 举报
回复
我想知道的是‘为什么’会这样,如果您告诉我可以用datastore代替,我可不给分哦。^-^而且现在的环境是只能用datawindow,否则我要改一堆函数,见谅

1,079

社区成员

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

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