我想实现本地的两台机器的两个数据库之间导数据表。如数据库A->数据库B,前提是A和B的数据库类型可能不同,也可能相同,但B的数据库始终是SQL 2000。A的数据库可能是orcal、sql、sybase中的一种,并且我准备导的两个表的结构的字段也不同。请问用什么方法实现好。我不用第三方工具,因为我想在程序中实现,将来要实现自动定期导库,听说有BatchMove方法和DTS方法。但我都不是很熟悉。请高手在方向上指点一二。非常感谢。
调试欢乐多
然后写作业调用该数据包就可以实现定时、定期导入数据
to CEdward:
我正是要自己写程序,只是不知道用什么方法好。希望在方向上指点一二。
to 47522341:
dts,是个很好的建议。不过我没有用过,也是近期查资料说有这个方法,不过好象都是工具,好象没有这方面的应用代码。能否写些代码。
1、一个ADOConnection连上A
2、一个ADOConnection连上B
3、然后象正常的数据库操作一样添加了,只是要批量而已,或者最苯的办法
for I:=1 to A.表.RecordCount do
begin
B.表.Append;
B.表.FieldByName('字段一').AsString:=A.表.FieldByName('字段一').AsString
......
B.表.Post;
end;
当然要有很多判断,因为你的数据字段类型不一致,这个时候要考虑字符转数字的空值类型DTS也行,估计操作起来很恐怖,写这个DTS包很恐怖,因为你的A和B的数据库都不同,如果A也是SQL那么DTS是最好的选择BatchMove办法不可行,原因还是数据库和库结构都不同。
我之前就考虑过你的第一个方法,自己也认为这是一个没有办法时的办法,“简单很笨”,呵呵,不过方法简单也不是不行,最担心的是它的批量导数据的速度,和程序在多种异构数据库之间的可移植性。 我最近还是在查有关DTS的方法。不过目前只能实现ACCESS->ACCESS,目前正在改,如果可能实现access->sql的话,估计其他的问题就不大了。就很有可能实现sql->sql,orcal->sql....,只要改变连接引擎,我想如果实现了速度上应该比那个“简单的方法”快,移植性上也要好吧。在修改中。期待其他人的更好的建议和方法。
1、采用D2007
2、采用DBExpress方式
3、编写数据管道程序,代码形如:
var
I: integer;
begin
ibqSelectA.Open; I := 1;
ibqSelectA.First;
while not ibqSelectA.EOF do begin
ibqInsertB.ParamByName('REC_KEY').AsInteger :=
ibqSelectA.FieldByName('REC_KEY').AsInteger; ibqInsertB.ParamByName('FIELD_1').AsString :=
ibqSelectA.FieldByName('FIELD_1').AsString;
ibqInsertB.ParamByName('FIELD_2').AsString :=
ibqSelectA.FieldByName('FIELD_2').AsString;
ibqInsertB.ParamByName('FIELD_3').AsString :=
ibqSelectA.FieldByName('FIELD_3').AsString;
ibqInsertB.ParamByName('FIELD_4').AsString :=
ibqSelectA.FieldByName('FIELD_4').AsString;
ibqInsertB.ParamByName('FIELD_5').AsString :=
ibqSelectA.FieldByName('FIELD_5').AsString;
ibqInsertB.ParamByName('FIELD_6').AsString :=
ibqSelectA.FieldByName('FIELD_6').AsString;
ibqInsertB.ExecSQL;
Inc(I);
if i mod 100 = 0 then begin
IBTransaction1.CommitRetaining;
end;
ibqSelectA.Next;
end;
IBTransaction1.CommitRetaining;
end;