我现在又一个程序:
program Project1;uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas';{$R *.res}begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, ADODB;type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation
uses unit2;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var mythread:Tmythread;
var Str:String;
begin
Edit1.Text:=TimetoStr(Time);
Button1.Enabled:=false;
try
mythread:=Tmythread.create(False);
except
ShowMessage('线程创建失败!');
end;
end;end.unit Unit2;interfaceuses
Classes,Unit1,
Windows, SysUtils, Variants, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, ADODB,ActiveX;type
Tmythread = class(TThread)
private
ADOConnection1:TADOConnection;
Adoquery1:TadoQuery;
destructor Destroy; protected
procedure Execute; override;
procedure run;
end;implementation{ Important: Methods and properties of objects in visual components can only be
used in a method called using Synchronize, for example, Synchronize(UpdateCaption); and UpdateCaption could look like, procedure mythread.UpdateCaption;
begin
Form1.Caption := 'Updated in a thread';
end; }{ mythread }
procedure Tmythread.Execute;
begin
self.run;
end;
procedure Tmythread.run;
var str:String;
begin
CoInitialize( nil );//使用com对象必须要初始化
inherited create(false);
FreeOnTerminate:=true;
ADOConnection1:=TADOConnection.Create(nil);
Adoquery1:=TADOQuery.Create(nil);
ADOConnection1.LoginPrompt:=false;
ADOConnection1.KeepConnection:=true;
ADOConnection1.CommandTimeout:=10000;
ADOquery1.CommandTimeout:=10000;
ADOConnection1.ConnectionString:='Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=test;Data Source=LENOVO-64ACFF60';
try
ADOConnection1.Open;
Adoquery1.Connection:=ADOConnection1;
Form1.Label1.Caption:='创建新线程在运行!';
ADOConnection1.Connected:=true;
Adoquery1.Close;
Adoquery1.SQL.Clear;
str:='insert into aaa'
+'(收费编码,项目名称,项目单价,收费数量,收费金额,计费单位,计费规格,收费日期,收费对象,住院号,收费科室)'
+' SELECT 收费编码,项目名称,项目单价,收费数量,收费金额,计费单位,计费规格,收费日期,收费对象,住院号,收费科室 FROM OpenDataSource( ''Microsoft.Jet.OLEDB.4.0'',''Data Source="F:\access_test.mdb";User ID=Admin;Password='')...住院服务明细';
Adoquery1.Parameters.Clear;
Adoquery1.ParamCheck := false;
Adoquery1.SQL.Text := str;
Adoquery1.Execsql; Form1.Edit2.Text:=TimetoStr(Time);
Form1.Label1.Caption:='';
Form1.Button1.Enabled:=true; Application.MessageBox('执行成功!','提示');
except
Self.Terminate;
end;
end;
destructor Tmythread.Destroy;
begin
if ADOConnection1.Connected then ADOConnection1.Close;
if Adoquery1.Active then Adoquery1.Close;
FreeAndNil(Adoquery1);
FreeAndNil(ADOConnection1);
CoUnInitialize;//必须使用
inherited destroy;
end;
end.//上面实现的功能是从ACCESS中导入数据到SQL SERVER中,我现在又在窗口上加上一个进度条或者能够提示执行过程的现实,比如现在已经导入了多少条记录,还有多少条记录没有导入
我应当怎么实现
program Project1;uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas';{$R *.res}begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, ADODB;type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation
uses unit2;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var mythread:Tmythread;
var Str:String;
begin
Edit1.Text:=TimetoStr(Time);
Button1.Enabled:=false;
try
mythread:=Tmythread.create(False);
except
ShowMessage('线程创建失败!');
end;
end;end.unit Unit2;interfaceuses
Classes,Unit1,
Windows, SysUtils, Variants, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, ADODB,ActiveX;type
Tmythread = class(TThread)
private
ADOConnection1:TADOConnection;
Adoquery1:TadoQuery;
destructor Destroy; protected
procedure Execute; override;
procedure run;
end;implementation{ Important: Methods and properties of objects in visual components can only be
used in a method called using Synchronize, for example, Synchronize(UpdateCaption); and UpdateCaption could look like, procedure mythread.UpdateCaption;
begin
Form1.Caption := 'Updated in a thread';
end; }{ mythread }
procedure Tmythread.Execute;
begin
self.run;
end;
procedure Tmythread.run;
var str:String;
begin
CoInitialize( nil );//使用com对象必须要初始化
inherited create(false);
FreeOnTerminate:=true;
ADOConnection1:=TADOConnection.Create(nil);
Adoquery1:=TADOQuery.Create(nil);
ADOConnection1.LoginPrompt:=false;
ADOConnection1.KeepConnection:=true;
ADOConnection1.CommandTimeout:=10000;
ADOquery1.CommandTimeout:=10000;
ADOConnection1.ConnectionString:='Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=test;Data Source=LENOVO-64ACFF60';
try
ADOConnection1.Open;
Adoquery1.Connection:=ADOConnection1;
Form1.Label1.Caption:='创建新线程在运行!';
ADOConnection1.Connected:=true;
Adoquery1.Close;
Adoquery1.SQL.Clear;
str:='insert into aaa'
+'(收费编码,项目名称,项目单价,收费数量,收费金额,计费单位,计费规格,收费日期,收费对象,住院号,收费科室)'
+' SELECT 收费编码,项目名称,项目单价,收费数量,收费金额,计费单位,计费规格,收费日期,收费对象,住院号,收费科室 FROM OpenDataSource( ''Microsoft.Jet.OLEDB.4.0'',''Data Source="F:\access_test.mdb";User ID=Admin;Password='')...住院服务明细';
Adoquery1.Parameters.Clear;
Adoquery1.ParamCheck := false;
Adoquery1.SQL.Text := str;
Adoquery1.Execsql; Form1.Edit2.Text:=TimetoStr(Time);
Form1.Label1.Caption:='';
Form1.Button1.Enabled:=true; Application.MessageBox('执行成功!','提示');
except
Self.Terminate;
end;
end;
destructor Tmythread.Destroy;
begin
if ADOConnection1.Connected then ADOConnection1.Close;
if Adoquery1.Active then Adoquery1.Close;
FreeAndNil(Adoquery1);
FreeAndNil(ADOConnection1);
CoUnInitialize;//必须使用
inherited destroy;
end;
end.//上面实现的功能是从ACCESS中导入数据到SQL SERVER中,我现在又在窗口上加上一个进度条或者能够提示执行过程的现实,比如现在已经导入了多少条记录,还有多少条记录没有导入
我应当怎么实现
要不你估算一下记录的size,和文件的size比较一下?