PowerBuilder DataWindow

sirtener 2009-04-09 10:17:33
动态更改数据窗口中的数据, 在程序中控制数据窗口的查询语句,一般是生成一个固定的数据窗口,调用时dw_1.settransobject(sqlca);dw_1.retrieve().我想根据不同的需要对同一个数据窗口进行数据的查询,生成一个特定的SQL查询语句,怎样将这条语句放进dw_1数据窗口中执行?
...全文
120 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
softvery 2009-04-10
  • 打赏
  • 举报
回复
使用
dw.setsqlselect(ls_sql)
或者
dw.Modify("DataWindow.Table.Select='"+ls_sql+"'")
注意SQL字段要一致

如果要更改其update则使用
dw_server.Object.DataWindow.Table.UpdateTable = ls_server
dw_server.Modify("#"+String(li_i)+".update='yes'")
dw_server.Modify("#"+String(li_i)+".key='yes'")
WorldMobile 2009-04-10
  • 打赏
  • 举报
回复
动态数据窗创建原理及实现

在实际应用中,经常需要根据用户需求来动态创建数据窗,一般方法是这样的。

在一个window中加入一个数据窗控件,如dw_new,但是该数据窗没有data object,(空白的)
就可以用以下语法来创建:
dw_new.create(ls_syntax,ls_error) // 创建语法,错误信息
ls_syntax可以用以下三种方法来形成:

一、动态由sql语法创建:

// 连接到pb的example数据库
string ls_sql,ls_syntax,ls_error
ls_syntax = 'select * from department'
ls_syntax = sqlca.SyntaxFromSQL(ls_sql,'style(type=grid)',ls_error)
if len(ls_error) >0 then
messagebox('Error','SyntaxFromSQL Error:~r'+ls_error)
else
dw_new.create(ls_syntax,ls_error)
if len(ls_error) >0 then
MessageBox("Error", "Create have these errors: ~r" + ls_error)
else
dw_new.settransobject(sqlca)
dw_new.retrieve()
end if
end if

二、由另一个数据窗的syntax来创建

string ls_syntax,ls_error
ls_syntax = dw_test.describe('datawindow.syntax')
dw_new.create(ls_syntax,ls_error)
if ls_error <> '' then
messagebox('Create Error',ls_error)
else
dw_new.settransobject(sqlca)
dw_new.retrieve()
end if

三、读取psr文件来创建

样例
string ls_syntax,ls_error,ls_ret
ls_ret = char(13)+char(10) //回车键
int li_fileNum
long li_length
li_FileNum = FileOpen("efef.psr",Streammode!, read!, shared!, Replace!)

// 以下是pb5的代码
if li_filenum >0 then
FileSeek(li_FileNum, 158, FromBeginning!)
li_length = fileRead(li_filenum,ls_syntax)
end if
fileclose(li_filenum)
if li_length = 0 then return
ls_syntax = "release 5;"+ls_ret+ls_syntax

//截掉ls_syntax中的数据部分,5.0以"sparse(names="dept_name?) "作为参考位置
//6.0以html(作为参考位置

long pos1,pos2
pos1 = pos(ls_syntax,'sparse(names="',1)
pos2 = pos(ls_syntax,'"',pos1 +16)
ls_syntax = left(ls_syntax,pos1) + mid(ls_syntax,pos1 +1,pos2 - pos1 +1)

dw_New.create(ls_syntax,ls_error)

if ls_error <> '' then
messagebox('Create Error',ls_error)
else
dw_new.settransobject(sqlca)
dw_new.retrieve()
end if
builderwfy 2009-04-10
  • 打赏
  • 举报
回复
取得DW_1的SQL語句為:dw_1.getsqlselect()
ls_sql為SQL語句
設置DW的SQL語句:dw_1.setsqlselect(ls_sql)
dw_1.retrieve()
builderwfy 2009-04-10
  • 打赏
  • 举报
回复
用這個dw_1.setsqlselect(ls_sql)
sirtener 2009-04-10
  • 打赏
  • 举报
回复
谢谢大家的帮助和建议, 现在就去结贴了......
newease 2009-04-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 softvery 的回复:]
使用
dw.setsqlselect(ls_sql)
或者
dw.Modify("DataWindow.Table.Select='"+ls_sql+"'")
注意SQL字段要一致

如果要更改其update则使用
dw_server.Object.DataWindow.Table.UpdateTable = ls_server
dw_server.Modify("#"+String(li_i)+".update='yes'")
dw_server.Modify("#"+String(li_i)+".key='yes'")
[/Quote]

这种方法最简单,方便一点
WorldMobile 2009-04-09
  • 打赏
  • 举报
回复
string ls_sql

ls_sql = 'select 1 from table'

dw_1.setsqlselect(ls_sql)
dw_1.settransobject(sqlca)
dw_1.retrieve()

或者用create来动态创建
yyoinge 2009-04-09
  • 打赏
  • 举报
回复
string ls_sql
ls_sql = '你的sql语句'
if dw_1.setsqlselect(ls_sql) = 1 then
dw_1.settransobject(sqlca)
//如果后面还要调用 dw_1.update(),还需要加一句
//dw_1.Modify( "DataWindow.Table.UpdateTable = ~"t_你的数据表~"")
dw_1.retrieve()
end if

1,079

社区成员

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

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