code=Delphi(Pascal)] cs:= 'SELECT * INTO data1 FROM data2'; ADOConnection1.Execute(cs,cmdText,[eoExecuteNoRecords]); [/code]
ADOQuery1和ADOQuery2 要用两个不同连线(ADOConnection)
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
unit Unit2;interfaceuses 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.
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分别连接到两个数据库中的表
两个adoquery
一个adoconnection连源数据库(connSource)
一个adoconnection连目标数据库connTarget
一个adoquery连connSource一个连connTarget
拖个progressbar,按照bdmh的写法就可以了.
cs:= 'SELECT * INTO data1 FROM data2';
ADOConnection1.Execute(cs,cmdText,[eoExecuteNoRecords]);
[/code]
2.如果是Sql Server, 用分布式查询语句为上策.
如:
SELECT a.*
into ttt
FROM OPENROWSET('MSDASQL','DRIVER={SQL Server};SERVER=server1;UID=sa;PWD=MyPass',data1.dbo.ttt) AS a
unit Unit2;interfaceuses
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.