datawindow保存后立即修改的问题...

laogao 2006-11-03 11:33:17
表中使用了自增字段作关键字,datawindow保存后,如果立即修改,因为没有关键字(null),保存时出错,如果每次保存后都查数据库,再将UID(关键字)用SetItem,不是很麻烦?

有更好的方法没?
...全文
219 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
laogao 2006-11-09
  • 打赏
  • 举报
回复
谢谢iamx(阿麦):
//保存数据
If dw_primary.Update(true,true) = 1 Then
commit;
MessageBox("提示", "数据保存成功! ")

int li_uid
    li_uid = dw_primary.getitemnumber( 1, "uid")
if isnull(li_uid) then //新增和修改都在这个窗口,如果为空,则是新增

select max(uid) into :li_uid from news;
dw_primary.retrieve(li_uid)
end if
Else
rollback;
MessageBox("错误", "错误原因:数据可能不完整。~r~n~r~n保存失败! ")
End If
laogao 2006-11-03
  • 打赏
  • 举报
回复
都吃饭去了?
laogao 2006-11-03
  • 打赏
  • 举报
回复
//*******既然是自增字段,那你保存的时候,就不用管他了********

我用的是Access,难道其它数据库里不同吗?
laogao 2006-11-03
  • 打赏
  • 举报
回复
//*******既然是自增字段,那你保存的时候,就不用管他了********

不管不行啊:

Row changed between retrieve and update.

No changes made to database.

UPDATE news SET newstype = 'B', newscontent = 'aaaaaaaaaaaaaaaaaaaa', onlyorg = 2 WHERE uid IS NULL AND newstype = 'B' AND newscontent = 'aaaaaaaaaaa' AND tvplay IS NULL AND channel_news IS NULL AND channel_jhf IS NULL AND channel_lsx IS NULL AND channel_ymz IS NULL AND dailyplay = '●' AND eveningplay IS NULL AND stationplay IS NULL AND jh_play IS NULL AND contentdetail IS NULL AND tvdate IS NULL AND dailydate = '2006-11-02' AND eveningdate IS NULL AND stationdate IS NULL AND jh_date IS NULL AND onlyorg = 2

uid已经从更新列中去掉了,还是不行!!!!!!!!!


青锋-SS 2006-11-03
  • 打赏
  • 举报
回复
从更新列表里面把它去掉.
xyqiqi 2006-11-03
  • 打赏
  • 举报
回复
既然是自增字段,那你保存的时候,就不用管他了
laogao 2006-11-03
  • 打赏
  • 举报
回复

  每次只有一条记录,保存后Retrieve()不也要过滤条件吗?
好一点点而已,还是需要得到关键字啊!
qty_ccy 2006-11-03
  • 打赏
  • 举报
回复
同樓上
JustNoOtherWay 2006-11-03
  • 打赏
  • 举报
回复
保存后Retrieve()一下
iamx 2006-11-03
  • 打赏
  • 举报
回复
这个问题基本上没有好的解决方法。除非你更改你的表设计。原因如下:
1、如果你的数据窗口上包括了UID,当你保存后,表里的UID自动产生,但不会传分给你的数据窗口,所以这时你的数据窗口中的 UID 是空的,当你修改数据后,数据窗口中的记录的状态为 modified,再保存时产生的Where子句会有 UID = null, 自然会引起Row changed between retrieve and update错误。
2、如果你的数据窗口上没包括UID,保存时没有问题,如果你的 Update Properties 选的不是 Key Columns, 接着修改保存应该没问题,但你更新的记录有可能不是你所要更新的记录。因为没有 Where 里没有 UID = ?, 没法确定唯一记录。

综上所述,更改你的表设计可能是唯一的出路。如果一定要一自增的列作主键的话,建议再加一唯一索引列作备用主键。这样你可以在数据窗口中不用包含这个 UID。
laogao 2006-11-03
  • 打赏
  • 举报
回复
UP一下
laogao 2006-11-03
  • 打赏
  • 举报
回复
刚才试了datawindow的设计窗口中也是这样的
laogao 2006-11-03
  • 打赏
  • 举报
回复
前面略去

If dw_primary.Update() = 1 Then
commit;
MessageBox("错误", "数据保存成功! ")
Else
rollback;
MessageBox("错误", "错误原因:数据可能不完整。~r~n~r~n数据保存失败! ")
End If
xyqiqi 2006-11-03
  • 打赏
  • 举报
回复
你保存代码怎么写的?
youqiong 2006-11-03
  • 打赏
  • 举报
回复
怀疑你的数据窗口
更新属性
那里出了问题
把那几个选项,换换试试

609

社区成员

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

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