如何合并两个ACCESS数据库?即两个.MDB数据库,将其中一个的数据合并到另一个数据库。(200分)

  • 主题发起人 主题发起人 yangjj
  • 开始时间 开始时间
Y

yangjj

Unregistered / Unconfirmed
GUEST, unregistred user!
如何合并两个ACCESS数据库?即两个.MDB数据库,将其中一个的数据合并到另一个数据库中。
在一个数据库中有两个数据表D1,D2,它们是一对多的关系。以编号ID为关键字段,如果
在合并时数据库A中的D1,D2的ID和数据库B中的D1,D2的ID相同,则只合并ID不相同的记录。
如何才能实现,我用的是ADO。需要哪些控件?请知道的大侠帮帮我!急用!
 
有这样的规则,要写程序了,用一个循环就可以了;
while () do
begin
if () then
begin
B.D1.Append;
B.D1.FieldByName('ID').AsString := A.D1.FieldByName('ID').AsString;
B.D1.Post;
end;
next;
end;
 
to slong:不需要其它组件,只用以上的程序就可以吗?
 
用一TABLE打开一MDB的表,用一query打开另一MDB的同一表,其SQL语句如下
select * from sometable where id = :id
然后循环table表记录,并用其ID做为参数打开query,如果query没找到记录,则query.insert
如果有记录则做table的下一记录。
 
你们说的我不明白,能不能说的详细些?
 
有下面这个SQL语句就应该没问题了。
我倒没有实验过,不过理论上来说应该没问题的。
它支持这种方式连接,两个都这么写在SQL里面,然后就是InSert Into Select的问题了。

SELECT *
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'f:/pic.mdb';'Admin';''; ///这里输入光盘的路径
pic) where id=yuangong.id
 
有没有人做过这种功能,能不能给一个详纲的说明呀!急!!!!
我在这里谢谢了!
 
根据上面的回答应该可以的。
试验一下。
Insert into A Select * from b

OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'f:/pic.mdb';'Admin';''; ///这里输入光盘的路径
pic)
 
to YZHSHI,我想你误解我的意思了,我是说将D1.MDB中的A表中的数据合并到D2.MDB数据库
的A表中!只合并ID不同的记录。
 
Insert into OPENROWSET ('Microsoft.Jet.OLEDB.4.0','DB1.mdb';'Admin') a
Select * from ('Microsoft.Jet.OLEDB.4.0','DB2.mdb';'Admin') b where A.ID<>B.ID
实验一下,我其实也没有做过这个,不过按道理应该成功的。
如果不行,尝试将我上面给的单个Select语句调试通过,然后再实验这个,
同时注意,如果还不行,将A、B直接使用('Microsoft.Jet.OLEDB.4.0','DB2.mdb';'Admin')来代替。

祝你成功!
 
好,试一下!
 
老大,这样不行,不能调试通过!
[Error] Unit1.pas(28): '(' expected but identifier 'into' found
[Error] Unit1.pas(28): Incompatible types
[Error] Unit1.pas(29): Missing operator or semicolon
[Error] Unit1.pas(29): Statement expected, but expression of type 'Integer' found
[Error] Unit1.pas(33): '.' expected but ';' found
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
 
一个个考
 
能不能说的详细些,BATCHMOVE好象不能用于ACCESS!
 
关关注,我刚好碰到这个问题
 
很巧我正在做一个类似的程序,将来个ACCESS数据库合并,表是一对一的,内容相加,基本成功了.想要
源程序,给我发EMAIL BJSW0001@163.COM
 
用两个ADO不就解决问题了吗。
 
我做一个比较费时的方法让你试试吧.
建立以下连接:

Ac_source(AdoConnection组件)挂接A数据库,
Ac_den(AdoConnection组件)挂接B数据库

At_sTable(AdoTable组件)挂接A数据库的D1表
Aq_sQuery(AdoQuery组件)挂接A数据库的D1表
At_sTables(AdoTable组件)挂接A数据库的D2表

At_dTable(AdoTable组件)挂接B数据库的D1表
Aq_dQuery(AdoQuery组件)挂接B数据库的D2表

以上连接请自己完成,:)

//开始汇总过程
Procedure CollectData;
Var TempID:string(或者是Integer);
//注意:你的ID号一定不能是ACCESS的自动编号类型
i:integer;
begin
With At_dTable do
begin
If Not Active then active:=true;
first;
//将当前记录的ID值赋给变量TempId;
tempId:=fieldbyname('id').asstring;
while not eof do
begin
//检查当前记录在A库的D1表中是否存在
with Aq_sQuery do
begin
active:=false;
sql.clear;
sql.add('select * from d1 where id='+#39+TempId+#39);
active:=true;
//记录数为零则表示不存在
if recordcount=0 then
begin
{将此记录插入A库的D1表}
active:=false;//这句话非常重要
//因为At_sTable和aq_sQuery同时挂接A库的D1表
//接下来的操作要写D1表,所以要关闭aq_sQuery
with at_sTable do
begin
active:=true;
append;
//使用以下循环必须保证A的D1和B的D1表结构完全一致。
for i:=0 to Fields.Count-1 do
Fields.Value:=At_dTable.Fields.value;
post;
active:=false;//这句话非常重要
end;


{将B库D2表的所有ID等于TEMPID的记录插入A库的D2表}
with Aq_dQuery do
begin
active:=false;
sql.clear;
sql.add('selct * from d2 where id='+#39+TempId+#39);
active:=true;
first;
while not eof do
begin
with At_sTable do
begin
if not active then
active:=true;
append;
for i:=0 to fields.count-1 do
Fields.Value:=Aq_dQuery.Fields.value;
post;
end;
next;
end;
end;
end;
end;
next;
end;
end;
end;
 
谢谢大家的帮助,我的问题已经解决了,wserfer的方法太复杂了,我只用了不到十行代码就
搞定了,这得感谢WHF的帮忙!给你们发分了!
 
后退
顶部