pb的几个基础而且至今还迷糊的问题

zhaodonglei 2010-02-09 03:20:55
一。事务
1)数据窗口在保存和SQL语句一起执行做为一个事务
功能:学生表中添加学生的姓名,同时向班级表也插入一条记录,两个数据库操作做为一个事务
sqlca.autocommit = false
dw_1.object.name[i] = ‘王三’
String ls_sql
ls_sql = "insert into student_no_one(name) values('" + "王三" +"'"
if dw_1.update() = 1 then
Execute Immediate :ls_sql Using sqlca;
if sqlca.sqlcode() <> - 1 then
commit;
end if
else
rollback;
end if
结果是如果sqlca.sqlcode() <> - 1 ,dw_1.update同样成功,数据已经写到了数据库
二。Filter缓冲区的问题
功能:在一个数据窗口中利用多选选取数据,然后把这些数据移到另一个数据窗口中,进行存储
s_xz是多选框,选是为1,不选中是0
dw_1.settrans(sqlca)
dw_1.retrieve()
ls_syntax = dw_1.Object.datawindow.Syntax
dw_temp.create(ls_syntax)
dw_temp.settrans(sqlca)
dw_temp.reset()
dw_1.setfilter("s_xz = 0")
dw_1.filter()
dw_1.rowsmove(1, 1.FilteredCount(), Filter!, dw_temp, 1, primary!)
错误结果就是有的时候dw_temp内数据是选中的,有的时候dw_1中没有选中的也进入了dw_temp中。这把我晕的。
这个帖子88分,祝大家新年发发
...全文
251 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
weiweipxb 2010-02-22
  • 打赏
  • 举报
回复
技术上的多试试,业务上要实现什么才是学习的重点了
qiyousyc 2010-02-22
  • 打赏
  • 举报
回复
第1个问题,肯定是你写错误了,就像上边的兄弟回答的
if sqlca.sqlcode() <> - 1 then
commit;
else
rollback ; //多加这一句就ok了
end if


第2个问题,从代码上看,没有什么问题。
你再研究一下看看。是不是眼睛花了?
永生天地 2010-02-15
  • 打赏
  • 举报
回复
pb 一切皆有可能 !
shadowle 2010-02-15
  • 打赏
  • 举报
回复
呵呵,学习了!!我也在用pb,碰到的问题也不少啊
wag_enu 2010-02-10
  • 打赏
  • 举报
回复
两个问题都貌似代码不完善引起的。
sunfor 2010-02-10
  • 打赏
  • 举报
回复
jf..jf..jf...........
pb8 2010-02-10
  • 打赏
  • 举报
回复
一、第一个问题#2楼正解;
二、第二个问题取一个dw_1.setfilter("s_xz = 0")的返回值,看是否成功,s_xz是数值类型的吗?
xyqiqi 2010-02-10
  • 打赏
  • 举报
回复
filter之前加个dw_1.accepttext()试试
dataminer_2007 2010-02-09
  • 打赏
  • 举报
回复
建議多看看幫助文檔,Pb的幫助文件貌似是我見過做的最好的
The scripts shown in the SQL examples above do not include error handling, but it is good practice to test the success and failure codes (the SQLCode attribute) in the transaction object after every statement. The codes are:

Value Meaning
0 Success.
100 Fetched row not found.
-1 Error; the statement failed. Use SQLErrText or SQLDBCode to obtain the detail.
sewinten 2010-02-09
  • 打赏
  • 举报
回复
问题二:
问题的原因可能是你没把上次的过滤条件给清掉。
最好在dw_1.setfilter("s_xz = 0") 之前加上一句
dw_1.setfilter("")
jlwei888 2010-02-09
  • 打赏
  • 举报
回复
ls_syntax = dw_1.Object.datawindow.Syntax
dw_temp.create(ls_syntax)


直接用啊!也没有修改,不用创建!
dw_temp.dataobject = 'd_xxxx' or dw_temp.dataobject = dw_1.dataobject

那就看setfilter,filter返回值,看是否成功!
sewinten 2010-02-09
  • 打赏
  • 举报
回复
问题一:
sqlca.autocommit = false
dw_1.object.name[i] = ‘王三’
String ls_sql
ls_sql = "insert into student_no_one(name) values('" + "王三" +"'"
if dw_1.update() = 1 then
Execute Immediate :ls_sql Using sqlca;
if sqlca.sqlcode() <> - 1 then
commit;
else
rollback ; //多加这一句就ok了
end if
else
rollback;
end if
jlwei888 2010-02-09
  • 打赏
  • 举报
回复
sqlca.autocommit = false
dw_1.object.name[i] = ‘王三’
String ls_sql
ls_sql = "insert into student_no_one(name) values('" + "王三" +"'"
if dw_1.update() = 1 then
Execute Immediate :ls_sql Using sqlca;
if sqlca.sqlcode() =0 then
commit;
else
rollback;
end if
else
rollback;
end if
archlwh 2010-02-09
  • 打赏
  • 举报
回复
接个分,,楼主第一个是不是说错了。是不是想说=-1的时候,update同样成功。以前看到过一个,说是由一个参数commitondisconnect的设置问题

609

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder DataWindow
社区管理员
  • DataWindow社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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