你在使用ApplyUpdates之前有没有做以下操作:
CatchedUpdates:= true;
RequestLive:=False;datamodule1.database1.StartTransaction;
是不是应在
try
applyupdates;//..前面
//
CatchedUpdates:= true;
RequestLive:=False;datamodule1.database1.StartTransaction;
是不是应在
try
applyupdates;//..前面
//
解决方案 »
- turbo delphi中的BDE问题.
- 有人可以成功在Delphi上装上BusinessSkinForm吗>>???
- 已知坐标和高程,欲绘制三维等高图,请问使用什么插件比较好呢?
- 高分请教:如何才能用socket接收一个XML串,然后作一下处理,再发将这个XML串发出去?
- winexec()运行一段DOS程序,怎样将其强行终止?(来顶有分)
- Delphi里建备注字段怎么老出错?
- 我出300分来解决这个问题如果提供思路也有150分
- 推见基本DELPHI高级教程!!!
- 结构体的问题。
- 怎么写日制文件??
- ClientDataSet有没有 SendParams方法?要传递参数我怎么做,请各位指点
- 如何在程序中往Access数据库中加入一个表?
按照你的情况,可以有两种解决办法:
1、不使用CacheUpdate,则可以这样:
datamodule1.database1.StartTransaction;
with datamodule1.query1 do
begin
try
sql.clear;
sql.add(mysql1);
execsql;
sql.clear;
sql.add(mysql2);
execsql;
sql.clear;
sql.add(mysql3);
execsql;
sql.clear;
sql.add(mysql4);
execsql; except
datamodule1.database1.rollback;
raise;
exit;
end;
datamodule1.database1.commit ;end;
end;
2、使用CacheUpdate,那就比较复杂。
i.用四个Query分别对应四个表(sql=select * from e_basic ...,select * from e_pact ,...),设四个Query分别为query1,query2,query3,query4,将他们的CachedUpdates属性设置为true,RequestLive设置为false.用一个database控件(例如database1)和数据库相连,并且四个query都通过database1和数据库相连。
ii.用四个UpdateSQL控件分别与上面的四个Query相连(将Query的UpdateObject属性设置为对应的UpdateSQL控件);分别在UpdateSQL控件上点右键,打开UpdateSQL editor,然后用Generate SQL按钮生成相应的SQL语句。
iii.程序运行,Query.open连接数据库;修改Query中的数据,这可以用和Query相连的DB控件实现,也可以用Query.FieldByName('...').As...:=的方式实现,我比较倾向前一种方式。
iv.需要保存的时候,调用:
try
database1.ApplyUpdates([Query1,query2,query3,query4]);
except
do something...
end;
就会把数据保存到数据库。database.ApplyUpdates当中已经包含了事务处理,不需要另外的事务处理,ApplyUpdates的详细情况可以看Delphi的帮助。
另外,在C:\Program Files\Borland\Delphi5\Help\Examples\Update下面有一个CacheUpdate的例子。
如果有问题继续联系,Good luck.