hur.cn - 华软网

 热门搜索

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

  作者:未知    来源:网络    更新时间:2019/1/25
表中运用了自增字段作关头字,datawindow保存后,如果立即修改,由于没有关头字(null),保存时犯错,如果每次保存后都查数据库,再将UID(关头字)用SetItem,不是很麻烦?

有更好的方法没?
------华软网友回答------
保存后Retrieve()一下
------华软网友回复------
同樓上
------华软网友回复------

  每次只有一条记录,保存后Retrieve()不也要过滤条件吗?
好一点点而已,照旧需要获得关头字啊!
------华软网友回复------
既然是自增字段,那你保存的时候,就不用管他了
------华软网友回复------
从更新列内外面把它去掉.
------华软网友回复------
//*******既然是自增字段,那你保存的时候,就不用管他了********

不论不行啊:

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已经从更新列中去掉了,照旧不行!!!!!!!!!



------华软网友回复------
//*******既然是自增字段,那你保存的时候,就不用管他了********

我用的是Access,难道其它数据库里不同吗?
------华软网友回复------
都用饭去了?
------华软网友回复------
怀疑你的数据窗口
更新属性
那里出了问题
把那几个选项,换换试试
------华软网友回复------
你保存代码怎么写的?
------华软网友回复------
前面略去

If dw_primary.Update() = 1 Then
commit;
MessageBox("毛病", "数据保存成功! ") 
Else 
rollback; 
MessageBox("毛病", "毛病原因:数据可能不完整。~r~n~r~n数据保存失利! ") 
End If
------华软网友回复------
适才试了datawindow的设计窗口中也是这样的
------华软网友回复------
UP一下
------华软网友回复------
这个问题基本上没有好的解决方法。除非你更改你的表设计。原因以下:
1、如果你的数据窗口上包括了UID,当你保存后,内外的UID自动产生,但不会传分给你的数据窗口,所以这时你的数据窗口中的 UID 是空的,当你修改数据后,数据窗口中的记录的状态为 modified,再保存时产生的Where子句会有 UID = null, 自然会引起Row changed between retrieve and update毛病。
2、如果你的数据窗口上没包括UID,保存时没有问题,如果你的 Update Properties 选的不是 Key Columns, 接着修改保存应该没问题,但你更新的记录有可能不是你所要更新的记录。由于没有 Where 里没有 UID = ?, 没法确定唯一记录。

综上所述,更改你的表设计可能是唯一的前途。如果一定要一自增的列作主键的话,建议再加一唯一索引列作备用主键。这样你能够在数据窗口中不用包括这个 UID。

------华软网友回复------
谢谢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      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。