在sql数据库系统中,采用 Adoset.Edit;然后ADOSet.Post的方法来修改数据方便快捷,但是确不能修改两个以上表组成的视图或组合式查询。然而采用直接执行SQL指令的话,在进行了修改、添加、删除后并不能直接反映在DBGrid或其他数据库感知组件上。必须重新select才行,而重新select的话DBGrid中的游标会返回到第一行(而不是刚才修改的那一行,或新增加的那一行,或删除后的那一行),这样的话,用户操作起来很不方便。大家来探讨一下,如何才能解决这个问题。
调试欢乐多
记录下来再重新locate吗,好像这样效率不是很好吧,另外如果是insert新增的咋办呢。我的主键是自增的,插入完成前是得不到ID的。
如果你想看见你刚刚添加或者修改的那条记录,就在select 语句中作标识,即在select 中通过where 来赛选出你添加过的或者修改过的纪录显示在dbgrid上,
这样就一目了然知道你上一次操作添加了那些纪录,修改了那些纪录了。
另外To:must0001(飞鸟):UpdateBatch是解决批量更新,那如果更新了某条数据,DBGrid中不还是要刷新才能得到吗,而且不也是游标不是也回到第一条了吗
一般要求多表查询的select语句中至少要包含每个表的主键。
先做好标记再定位
var
SavePlace: TBook ;
...
保存当前位置
SavePlace:=DBGrid1.dataset.GetBook;
修改刷新数据
.....
恢复位置
if DBGrid1.dataset.BookValid(SavePlace) then
DBGrid1.dataset.GotoBook(SavePlace);
DBGrid1.Dataset.FreeBook(SavePlace);
var
SavePlace: TBook ;
...
保存当前位置
SavePlace:=DBGrid1.dataset.GetBook;post;DBGrid1.dataset.GotoBook(SavePlace);