我找到了更好的方法
建立两个database:别名 dm1,dm2 分别指向A和B
建立一个query控件qry,databasename 为空
sql 语句这样写
with qry do
begin
close;
sql.clear;
sql.add('insert into ":dm1:table1" select * from ":dm2:table2" ');
execsql;
end;
看我的代码:
(成功调试过)
function insertTable2:boolean;
begin
with q1 do//q1=adoquery1
begin
close;
sql.clear;
sql.add('select * from table1');
open;
end;
adoquery2.DataSource:=dm.DQ1;
adoconnection1.BeginTrans;//连接a.dbo.
adoconnection2.BeginTrans;//连接b.sbo.table2
try
adoquery2.Close;
adoquery2.SQL.Clear;
adoquery2.SQL.Add('insert into table2 values(:ID,:Yh_ID,:Yh_Name,:Amonth,:Amm_Prior,:Amm_Cur,:ele,:Tran_Lose,:Cop_Lose,:Wire_Lose,:Sum_ele,:Price,:ele_Fee,:Benefit_Fee,:Latefee_Start,:Amm_Date,:Amm_Man,:Acroom_ID,:Lock,:Lock_Reason,:UpLoad_Is,:Remark)');
q1.First;
while not q1.Eof do
begin
adoquery2.ExecSQL;
q1.Edit;
q1.FieldByName('UpLoad_Is').AsBoolean:=true;
q1.Post;
q1.Next;
end;//while not q1.eof
q1.Close;
q1.Open;
adoconnection1.committrans;
adoconnection2.committrans;
result:=true;
except
adoconnection1.robacktrans;
adoconnection2.robacktrans;
result:=false;
showmessage('insert faulse');
exit;
end;//try
end;