这个问题目前只有通过SQL方法来完成,没有别的更好办法,而且很多数据库并不支持多表关联更新,就是SQL2000在很多情况下都有问题 更新时有很多处理方法,例如: 你可以将某些不需要更新的字段设置为只读 但是在很多情况下会出现无法找到更新列的情况,而且这种错误在不同版本的MDAC中错误提示又不一样,有的根本就没有提示就直接全部给你更新了! 至于删除时只有用SQL方法,否则你会死的很惨!而且想你举的入库操作的例子,在实际操作中必须使用事务处理,因为她牵扯到很多表的更新,我怀疑你是不是第一次写进销存模式的软件! 象你的例子:var ADOQ: TADOQuery; begin ADOQ:=TADOQuery.Create(Self); try ADOQ.Connection:=ADOConnetion1; with ADOQ.SQL do begin Clear; Add('DELETE 入库表 WHERE 条件'); Add('UPDATE 库存表 WHERE 条件'); //....其它需要修改的东西 end; if not ADOConnection1.InTrans then ADOConnection1.BeginTrans; ADOQ.ExecSQL; ADOConnection1.CommitTrans; finally end; end;
try
with adoquery do
begin
close;
sql.clear;
sql.text:=yoursql//你的sql
execsql;
end;
committrans
except
rollbacktrans
end;
不过例子太笼统了
没有针对我提到的情况
我需要GRID的数据是多表联接的情况,而且想在表中直接操作。我想一个入库单多项明细一次保存,不必每一项来保存!而最主要的还是多表联接问题没解决
更新时有很多处理方法,例如:
你可以将某些不需要更新的字段设置为只读
但是在很多情况下会出现无法找到更新列的情况,而且这种错误在不同版本的MDAC中错误提示又不一样,有的根本就没有提示就直接全部给你更新了!
至于删除时只有用SQL方法,否则你会死的很惨!而且想你举的入库操作的例子,在实际操作中必须使用事务处理,因为她牵扯到很多表的更新,我怀疑你是不是第一次写进销存模式的软件!
象你的例子:var
ADOQ: TADOQuery;
begin
ADOQ:=TADOQuery.Create(Self);
try
ADOQ.Connection:=ADOConnetion1;
with ADOQ.SQL do
begin
Clear;
Add('DELETE 入库表 WHERE 条件');
Add('UPDATE 库存表 WHERE 条件');
//....其它需要修改的东西
end;
if not ADOConnection1.InTrans then ADOConnection1.BeginTrans;
ADOQ.ExecSQL;
ADOConnection1.CommitTrans;
finally
end;
end;
finally
ADOQ.Close;
ADOQ.Free;
end;呵呵,忘了填释放就回复了!