用delphi编写数据迁移程序 请大侠帮忙下。

cqy520cly1110 2009-02-16 03:34:30
数据迁移程序,将一个数据库中data1某张表数据迁移到另一个数据库data2相应的表中
两个库可以在不同的计算机上。
要有相应的数据表格显示迁移进度到哪一行

会的话请帮忙写详细些。谢谢大侠了。呵呵。
...全文
108 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
starluck 2009-02-19
  • 打赏
  • 举报
回复



unit Unit2;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, ComCtrls, StdCtrls;

type
TForm2 = class(TForm)
ADOQuery1: TADOQuery;
ADOQuery2: TADOQuery;
Button1: TButton;
ProgressBar1: TProgressBar;
ADOConnection1: TADOConnection;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
var
stepIt : integer;
begin
adoQuery1.close;
adoquery1.SQL.Text := 'select * from a';
AdoQuery1.Open ;
adoQuery2.Close;
adoquery2.SQL.Text := 'select * from b';
adoquery2.Open;
ProgressBar1.Max := ADOQuery1.RecordCount;
stepIt := 1;
ProgressBar1.StepBy(1);
with adoquery1 do while not eof do
begin
adoquery2.Append;
ProgressBar1.Position := stepIt;
Application.ProcessMessages;
ADOQuery2.FieldByName('a').Value := FieldByName('a').Value;
inc(stepIt);
Next;
end;
end;

end.


zdlou 2009-02-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bdmh 的回复:]
ADOQuery1.Close;
ADOQuery2.Close;
ADOQuery1.SQL.Text := 'select * from data1';
ADOQuery1.Open;
ADOQuery2.SQL.Text := 'select * from data2';
ADOQuery2.Open;
P.Max := ADOQuery1.RecordCount;
while not ADOQuery1.Eof do
begin
ADOQuery2.Append;
//赋值过程
ADOQuery2.Post;
ADOQuery1.Next;
P.Position := ADOQuery1.RecNo;
end;

ADOQuery1和ADOQuery2分别连接到两个数据…
[/Quote]
如上,不过如果数据多的话,是件痛苦的事.......
simon0809 2009-02-16
  • 打赏
  • 举报
回复
1.如果数据量很大, 在迁移时要逐笔显示进度是很没效率的事.
2.如果是Sql Server, 用分布式查询语句为上策.
如:
SELECT a.*
into ttt
FROM OPENROWSET('MSDASQL','DRIVER={SQL Server};SERVER=server1;UID=sa;PWD=MyPass',data1.dbo.ttt) AS a
bigfoot001 2009-02-16
  • 打赏
  • 举报
回复
ADOQuery1和ADOQuery2 要用两个不同连线(ADOConnection)
天鸽 2009-02-16
  • 打赏
  • 举报
回复
code=Delphi(Pascal)]
cs:= 'SELECT * INTO data1 FROM data2';
ADOConnection1.Execute(cs,cmdText,[eoExecuteNoRecords]);
[/code]
火龙岛主 2009-02-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bdmh 的回复:]
ADOQuery1.Close;
ADOQuery2.Close;
ADOQuery1.SQL.Text := 'select * from data1';
ADOQuery1.Open;
ADOQuery2.SQL.Text := 'select * from data2';
ADOQuery2.Open;
P.Max := ADOQuery1.RecordCount;
while not ADOQuery1.Eof do
begin
ADOQuery2.Append;
//赋值过程
ADOQuery2.Post;
ADOQuery1.Next;
P.Position := ADOQuery1.RecNo;
end;

ADOQuery1和ADOQuery2分别连接到两个数据库中的表
[/Quote]
方法你实验了吗?
天鸽 2009-02-16
  • 打赏
  • 举报
回复
是什么数据库?

用两个adoconnection,连不同的数据库,进行拷贝。
zhaozhen2004 2009-02-16
  • 打赏
  • 举报
回复
拖两个adoconnection
两个adoquery
一个adoconnection连源数据库(connSource)
一个adoconnection连目标数据库connTarget
一个adoquery连connSource一个连connTarget
拖个progressbar,按照bdmh的写法就可以了.
cqy520cly1110 2009-02-16
  • 打赏
  • 举报
回复
再up。
cqy520cly1110 2009-02-16
  • 打赏
  • 举报
回复
自己up下。
cqy520cly1110 2009-02-16
  • 打赏
  • 举报
回复
我用的是SQL SERVER 7的版本。请大侠可以说明白点么 我是初学者 呵呵。 谢谢啦。
UndefinedCoder 2009-02-16
  • 打赏
  • 举报
回复
如果是SQL Server的话,使用OPENROWSET或OPENDATASOURCE。
bdmh 2009-02-16
  • 打赏
  • 举报
回复
ADOQuery1.Close;
ADOQuery2.Close;
ADOQuery1.SQL.Text := 'select * from data1';
ADOQuery1.Open;
ADOQuery2.SQL.Text := 'select * from data2';
ADOQuery2.Open;
P.Max := ADOQuery1.RecordCount;
while not ADOQuery1.Eof do
begin
ADOQuery2.Append;
//赋值过程
ADOQuery2.Post;
ADOQuery1.Next;
P.Position := ADOQuery1.RecNo;
end;

ADOQuery1和ADOQuery2分别连接到两个数据库中的表
lyhoo163 2009-02-16
  • 打赏
  • 举报
回复
有意思!!!
bdmh 2009-02-16
  • 打赏
  • 举报
回复
两个数据集分别连接两个数据表,然后依次添加,用一个进度条显示进度就可以了
zshsuming 2009-02-16
  • 打赏
  • 举报
回复
等高手``

2,497

社区成员

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

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