delphi中怎样把A数据库中对某张表的查询的结果插入到B数据库中的某个表里呢?

时间:2021-10-03 00:41:10
delphi中怎样把A数据库中对某张表的查询的结果插入(insert into)到B数据库中的某个表里呢?数据库的连接用adoconnection,查询/插入用adoquery来做.
怎么写sql语句阿?
比如是两个access的数据库.

8 个解决方案

#1


用两个数据集,分别联结数据库A(qryA),数据库B.(qryB)
然后

qryB.close;
qryB.sql.text:='insert into A_tableName (A1,A2) VALUES (:ID1,:ID2)'
qryB.Parameters.ParamByName('ID1').value:= qryA.fieldbyName('aa').asstring;
qryB.Parameters.ParamByName('ID2').value:= qryA.fieldbyName('ab').asstring;
qryB.ExecSQL;

#2



qryB.close;
qryB.sql.text:='insert into b SELECT * 
FROM OpenDataSource(SELECT *
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 
   'c:\MSOffice\Access\Samples\northwind.mdb';'admin';'mypwd', a) 
   AS a
qryB.ExecSQL;

#3


qryB.close;
qryB.sql.text:='insert into b SELECT * FROM '
  +'OpenDataSource(SELECT * FROM OPENROWSET(''Microsoft.Jet.OLEDB.4.0'',''c:\MSOffice\Access\Samples\northwind.mdb'';''admin'';''mypwd'', a) a';
qryB.ExecSQL;

#4


引用 1 楼 eqapple 的回复:
用两个数据集,分别联结数据库A(qryA),数据库B.(qryB) 
然后
Delphi(Pascal) code
qryB.close;
qryB.sql.text:='insert into A_tableName (A1,A2) VALUES (:ID1,:ID2)'
qryB.Parameters.ParamByName('ID1').value:= qryA.fieldbyName('aa').asstring;
qryB.Parameters.ParamByName('ID2').value:= qryA.fieldbyName('ab').asstring;
qryB.ExecSQL;



用这个方法,简单明了.但是似乎只能插入一个查询的记录阿...如果用循环插入,会很慢阿 
比如两个access的数据库.
如果对于A.mdb数据库有a1,a2两张表,要查询:  select a1.xm from a1,a2 where a1.id=a2.id 该查询结果比如有1万条记录.
对于B.mdb数据库,要把所A.mdb所查询到的1万条记录插入到B.mdb数据库中的b1表中去.insert into b1 怎么做?

#5


引用 3 楼 beifangke 的回复:
qryB.close; 
qryB.sql.text:='insert into b SELECT * FROM ' 
  +'OpenDataSource(SELECT * FROM OPENROWSET(''Microsoft.Jet.OLEDB.4.0'',''c:\MSOffice\Access\Samples\northwind.mdb'';''admin'';''mypwd'', a) a'; 
qryB.ExecSQL; 


用这个方法,access支持opendatasource吗?
比如两个access的数据库.
如果对于A.mdb数据库有a1,a2两张表,要查询:  select a1.xm from a1,a2 where a1.id=a2.id 该查询结果比如有1万条记录.
对于B.mdb数据库,要把所A.mdb所查询到的1万条记录插入到B.mdb数据库中的b1表中去.insert into b1 怎么做?
可否具体点?

#6


多谢!!!

#7


三楼方法应该不错.

#8



insert into #Ta select * from #Tb

#1


用两个数据集,分别联结数据库A(qryA),数据库B.(qryB)
然后

qryB.close;
qryB.sql.text:='insert into A_tableName (A1,A2) VALUES (:ID1,:ID2)'
qryB.Parameters.ParamByName('ID1').value:= qryA.fieldbyName('aa').asstring;
qryB.Parameters.ParamByName('ID2').value:= qryA.fieldbyName('ab').asstring;
qryB.ExecSQL;

#2



qryB.close;
qryB.sql.text:='insert into b SELECT * 
FROM OpenDataSource(SELECT *
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 
   'c:\MSOffice\Access\Samples\northwind.mdb';'admin';'mypwd', a) 
   AS a
qryB.ExecSQL;

#3


qryB.close;
qryB.sql.text:='insert into b SELECT * FROM '
  +'OpenDataSource(SELECT * FROM OPENROWSET(''Microsoft.Jet.OLEDB.4.0'',''c:\MSOffice\Access\Samples\northwind.mdb'';''admin'';''mypwd'', a) a';
qryB.ExecSQL;

#4


引用 1 楼 eqapple 的回复:
用两个数据集,分别联结数据库A(qryA),数据库B.(qryB) 
然后
Delphi(Pascal) code
qryB.close;
qryB.sql.text:='insert into A_tableName (A1,A2) VALUES (:ID1,:ID2)'
qryB.Parameters.ParamByName('ID1').value:= qryA.fieldbyName('aa').asstring;
qryB.Parameters.ParamByName('ID2').value:= qryA.fieldbyName('ab').asstring;
qryB.ExecSQL;



用这个方法,简单明了.但是似乎只能插入一个查询的记录阿...如果用循环插入,会很慢阿 
比如两个access的数据库.
如果对于A.mdb数据库有a1,a2两张表,要查询:  select a1.xm from a1,a2 where a1.id=a2.id 该查询结果比如有1万条记录.
对于B.mdb数据库,要把所A.mdb所查询到的1万条记录插入到B.mdb数据库中的b1表中去.insert into b1 怎么做?

#5


引用 3 楼 beifangke 的回复:
qryB.close; 
qryB.sql.text:='insert into b SELECT * FROM ' 
  +'OpenDataSource(SELECT * FROM OPENROWSET(''Microsoft.Jet.OLEDB.4.0'',''c:\MSOffice\Access\Samples\northwind.mdb'';''admin'';''mypwd'', a) a'; 
qryB.ExecSQL; 


用这个方法,access支持opendatasource吗?
比如两个access的数据库.
如果对于A.mdb数据库有a1,a2两张表,要查询:  select a1.xm from a1,a2 where a1.id=a2.id 该查询结果比如有1万条记录.
对于B.mdb数据库,要把所A.mdb所查询到的1万条记录插入到B.mdb数据库中的b1表中去.insert into b1 怎么做?
可否具体点?

#6


多谢!!!

#7


三楼方法应该不错.

#8



insert into #Ta select * from #Tb