使用ADOQUERY,如何从一个ACCESS数据库表中的记录插入到别一个数据库的表中。

vconan 2009-04-16 03:47:29
如何从一个数据库表中的记录插入到别一个数据库的表中。

数据库一:c:\money.mdb 其中表data1 adoconnection1连接到数据库1 adoquery1的connection属性为:adoconnection1

数据库二:d:\money.mdb 其中表data1 adoconnection2连接到数据库2 adoquery2的connection属性为:adoconnection2


表结构一模一样,如何写语句把数据库二的表中的记录插入到数据库一的表中去?带条件语句


...全文
209 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
vconan 2009-04-17
  • 打赏
  • 举报
回复
最后还是采用的starluck的方法,谢谢了
bdmh的方法虽然简单,但是调试了好久都没调试好。都谢谢两位了
vconan 2009-04-16
  • 打赏
  • 举报
回复
'insert into alldata(na,ma) as A select na,ma from [;database='+openname+';pwd=''psw''].alldata as B where A.intime not in (select B.intime from B)';
不行呀,说是inset into语法错误,那路径加引号跟没加引号都试过,帮忙看看
bdmh 2009-04-16
  • 打赏
  • 举报
回复
带密码查询,如有错误,自己修改一下吧

ADOQuery.SQL.Text := 'insert into MyTable(na,ma) as A select na,ma from [;database=d:\money.mdb;pwd=你的密码].MyTable as B where A.A not in (select B.A from B);
vconan 2009-04-16
  • 打赏
  • 举报
回复
对了,数据库都是有密码的,不通过adoconnection连接的话会不会出错?
vconan 2009-04-16
  • 打赏
  • 举报
回复
嗯,先试下bdmh掌柜的方法
bdmh 2009-04-16
  • 打赏
  • 举报
回复

ADOQuery.SQL.Text := 'insert into MyTable(na,ma) as A select na,ma from MyTable in '+QuotedStr('d:\money.mdb')+ ' as B where A.A not in (select B.A from B);
vconan 2009-04-16
  • 打赏
  • 举报
回复
bdmh 掌柜,你的那个很简单,如果是只取其中两个字段na,ma怎么写
寻梦928 2009-04-16
  • 打赏
  • 举报
回复
你最好用两个连接数据库的Adoquery,在Query1查询到所有要插入的数据 再以Query1表中字段A为条件查询另一库的Query2,如果未查询到就做插入操作。否则不做插入操作。


这只是个操作的方法。
vconan 2009-04-16
  • 打赏
  • 举报
回复
有是有个想法:
一个query1连表1,一个query2连表2,顺序取表2的字段a,然后在搜索表1中搜索,如果找到一样的则query2.next,没找到则插入表1
这样感觉比较麻烦,有没有更简单的方法。
starluck 2009-04-16
  • 打赏
  • 举报
回复



var
i : integer;

adoquery1.close;
AdoQuery1.sql.text := 'select * from Data1';
AdoQuery1.open;

adoquery2.close;
AdoQuery2.sql.text := 'select * from Data1 where 1=2';
AdoQuery2.open;


if not AdoQuery1.isEmpty then begin
with AdoQuery1 do while not eof do begin

adoquery2.close;
AdoQuery2.sql.text := 'select * from Data1 where 主鍵 = '+Fields[ 主建].Value;
AdoQuery2.open;
if AdoQuery2.isEmpty then begin
AdoQuery2.Append;
for I := 0 to AdoQuery1.fieldCount -1 do
begin
AdoQuery2.fields[i].value := Fields[i].value;
end;
end;
Next;
end;
end;




bdmh 2009-04-16
  • 打赏
  • 举报
回复

ADOQuery.SQL.Text := 'insert into MyTable as A select * from MyTable in '+QuotedStr('d:\money.mdb')+ ' as B where A.A not in (select B.A from B);

vconan 2009-04-16
  • 打赏
  • 举报
回复
条件语句不好写
vconan 2009-04-16
  • 打赏
  • 举报
回复
不是这种条件,插入条件是数据库2表中的A字段要 在数据库1表中的A字段没有,如果有的话就不插入了
bdmh 2009-04-16
  • 打赏
  • 举报
回复

假定ADOQuery连接c:\money.mdb,表名为MyTable
ADOQuery.SQL.Text := 'insert into MyTable select * from MyTable in '+QuotedStr('d:\money.mdb');
意思是将'd:\money.mdb'中MyTbale表中的数据插入到'c:\money.mdb'中的MyTable中

bdmh 2009-04-16
  • 打赏
  • 举报
回复

SQL.Text := 'insert into A select * from B in '+QuotedStr('d:\money.mdb');
starluck 2009-04-16
  • 打赏
  • 举报
回复




var
i : integer;

adoquery1.close;
AdoQuery1.sql.text := 'select * from Data1';
AdoQuery1.open;

adoquery2.close;
AdoQuery2.sql.text := 'select * from Data1 where 1=2';
AdoQuery2.open;


if not AdoQuery1.isEmpty then begin
with AdoQuery1 do while not eof do begin
AdoQuery2.Append;
for I := 0 to AdoQuery1.fieldCount -1 do
begin
AdoQuery2.fields[i].value := Fields[i].value;
end;
Next;
end;
end;






直接手寫,可能有筆誤

2,498

社区成员

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

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