在DBGRID中修改一行记录时,当焦点移动到别的行,会自动POST,如何使它不POST,等改完多行后用程序一起POST?(60分)

  • 主题发起人 主题发起人 xuyuanchao
  • 开始时间 开始时间
X

xuyuanchao

Unregistered / Unconfirmed
GUEST, unregistred user!
缓存更新
 
将DBGRID所连接的TTABLE或TQUERY中的CACHEEDUPDATE设为TRUE.
然后在你想POST的地方,添加POST语句.
 
将DBGRID所连接的TTABLE或TQUERY中的CACHEEDUPDATE设为TRUE.
作post 后
with CustomerQuery do
begin
Database1.StartTransaction;
try
ApplyUpdates; {try to write the updates to the database};
Database1.Commit; {on success, commit the changes};
except
Database1.Rollback; {on failure, undo the changes};
raise; {raise the exception to prevent a call to CommitUpdates!}
end;
CommitUpdates; {on success, clear the cache}
end;

 
利用缓存更新
 
各位大虾,以上办法我都试过了,都不管用,但是在一种情况下,DBGrid是可以一次修改多条
记录的,就是在master/detail模式下,Detail用DBGrid可以一次修改多条记录.不知各位大
虾对此有何看法?
 
dbgrid是一个很烂的东西,我从来不用DB控件,自己写sql(或存储过程)来处理,性能要
好得多。
 
誰說DBGrid很爛﹐我就經常用它﹐很好用嘛。若你覺得它不適用的時候就不見三﹐但它也並
不爛三。
 
   DELPHI 的TDBGrid 控 件 主 要 用 来 处 理 数 据 表,它 的 属 性
中 有 一 个dgMultiSelect, 若 此 属 性 设 定 为TRUE, 则 可 以 选 中
多 个 记 录( 可 用CTRL + 鼠 标 左 键 选 择 多 个 记 录)。 对 选
中 的 多 个 记 录 可 以 有 以 下 几 种 处 理 方 式, 比 较 简 单 的
两 种 是: 清 除 所 有 的 选 择 记 录 可 用DBGrid1.SelectedRows.Clear
语 句; 删 除 所 有 的 选 择 记 录 可 用DBGrid1.SelectedRows.Delete
 
看了上面几个帖子,觉得自己落后了许多(好长时间没来了)
原来用缓存更新后,数据滚动后要自己Post...
Post后数据就真的到物理库中了...

老兄可能写了BeforePost或AfterPost事件,不想每次调用吧.
如果是这样,用缓存没用的.
 
昨天琢磨了一天,终于把这个问题解决了。问题的解决方法如下(假设连接方式为
DBGrid->DataSource->Query):把Query的CachedUpdated属性设为True,把DataSource的
AutoEdit属性设为True,DBGrid的Options中的dgEditing设为False,这样做使得Query始终
处于编辑状态,但是由于DBGrid不可编辑,在界面上仍然是无法增加或修改的,要增加或修
改的时候,再把DBGrid的Options中的dgEditing设为True即可;这样子做就可以达到
xuyuanchao的要求了
 
除了用缓存,没有别的办法
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部