delpi 批量数据修改

zhaozheng821018 2009-02-07 02:27:39
我使用的是adoquery和dbgrideh查询数据,同时想在grideh中实现批量数据修改,该如何写??
...全文
85 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
bdmh 2009-02-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 starluck 的回复:]


Delphi(Pascal) code

将adoquery1的locktype 设为 :ltBatchOptimistic

这样保存的时候这样写就可以避免直接保存的问题了。

try
adoquery1.State in [dsinsert,dsedit] then adoquery1.Post;
adoquery1.UpdateBatch();
except
raise;
end;
[/Quote]
正确
UpdateBatch把内存中修改的记录一并提交到数据库
starluck 2009-02-07
  • 打赏
  • 举报
回复



将adoquery1的locktype 设为 :ltBatchOptimistic

这样保存的时候这样写就可以避免直接保存的问题了。

try
adoquery1.State in [dsinsert,dsedit] then adoquery1.Post;
adoquery1.UpdateBatch();
except
raise;
end;
bdmh 2009-02-07
  • 打赏
  • 举报
回复
那就要设置数据集属性为批量更新了,那样知识保存到内存
zhaozheng821018 2009-02-07
  • 打赏
  • 举报
回复
还有一个问题,就是当查询出数据以后,我点击dbgrideh中的某一个单元格,然后修改其内容,修改的时候还没有什么问题,只要焦点转移掉,他就会把修改的数据存入数据库里面了,怎么样才能把这个自动存储去掉?
coderee 2009-02-07
  • 打赏
  • 举报
回复
procedure Terp.th(component:string;form:string);
var clpbrd:TClipBoard;
begin
clpbrd:=TClipBoard.Create;
with application.FindComponent(form) as tform do
begin
with tdbgrideh(FindComponent(component)) do
begin
with DataSource.DataSet do
begin
Bookmark:=Selection.rect.TopRow;
while True do begin
Edit;
fieldbyname(SelectedField.FieldName).value:=clpbrd.AsText;
Post;
if CompareBookmarks(Pointer(Selection.Rect.BottomRow),Pointer(Bookmark)) = 0 then Break;
Next;
if Eof then Break;
end;
end;
end;
end;
end;


erp.th(ActiveControl.Name,'sspbm');

2,497

社区成员

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

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