📄 main.pas
字号:
unit main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
ADOConnection2: TADOConnection;
ADOQuery2: TADOQuery;
Timer1: TTimer;
Timer2: TTimer;
procedure Button1Click(Sender: TObject);
//procedure Timer1Timer(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
function GetInfo : Boolean;
function ConnectDB1: Boolean;
function ConnectDB2: Boolean;
end;
TThreadDBConnect = class(TThread)
public
//线程创建过程,参数CreateSuspended表示创建时线程是否挂起,
constructor Create(CreateSuspended: Boolean);
//线程销毁时,发送线程终结命令,取消线程挂起状态,等待线程执行完毕后,销毁
destructor Destroy; override;
protected
//线程执行过程,循环检测数据库连接状态,如果断开,则进行重连,然后自己挂起
procedure Execute; override;
private
end;
TUpdateThread = class(TThread)
public
//线程创建过程,参数CreateSuspended表示创建时线程是否挂起,
constructor Create(CreateSuspended: Boolean);
//线程销毁时,发送线程终结命令,取消线程挂起状态,等待线程执行完毕后,销毁
destructor Destroy; override;
protected
//线程执行过程,循环检测数据库连接状态,如果断开,则进行重连,然后自己挂起
procedure Execute; override;
end;
var
Form1: TForm1;
DBConnectThread: TThreadDBConnect;
UpdateThread :TUpdateThread;
implementation
{$R *.dfm}
constructor TThreadDBConnect.Create(CreateSuspended: Boolean);
begin
inherited;
Priority := tpHigher;
end;
destructor TThreadDBConnect.Destroy;
begin
Priority := tpHigher;
Terminate;
Resume;
waitfor;
inherited;
end;
procedure TThreadDBConnect.Execute; //
begin
inherited;
while not Terminated do
begin
try
begin
if Form1.ConnectDB1 and Form1.ConnectDB2 then
begin
Priority := tpLower;
end;
end;
except
end;
if Terminated then Exit;
Suspend;
end;
end;
constructor TUpdateThread.Create(CreateSuspended: Boolean);
begin
inherited;
Priority := tpNormal;
end;
destructor TUpdateThread.Destroy;
begin
Priority := tpHigher;
Terminate;
Resume;
waitfor;
inherited;
end;
procedure TUpdateThread.Execute;
begin
inherited;
while(not Terminated) do
begin
Form1.GetInfo;
self.Suspend;
if Terminated then Exit;
Suspend;
end;
end;
function TForm1.ConnectDB1 :Boolean;
begin
Result:=false;
ADOConnection1.Connected := FALSE;
try
ADOConnection1.Connected := TRUE;
Result:=true;
except
Result:=false;
end;
end;
function TForm1.ConnectDB2:Boolean;
begin
Result:=false;
ADOConnection2.Connected := FALSE;
try
ADOConnection2.Connected := TRUE;
Result:=true;
except
Result:=false;
end;
end;
function TForm1.GetInfo : Boolean;
var
DDL,DDL1:string;
CRecordSet: _RecordSet;
//CRecordSet: _RecordSet;
begin
DDL := 'select * from info';
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(DDL);
ADOQuery1.Open;
CRecordSet :=ADoquery1.Recordset;
while not CRecordSet.EOF do
begin
DDL1 := 'insert into info1(Id,Name,Address,Sex) values('''
+trim(ADoquery1.Recordset.Fields[0].value)+''','''
+trim(ADoquery1.Recordset.Fields[1].value)+''','''
+trim(ADoquery1.Recordset.Fields[2].value)+''','''
+trim(ADoquery1.Recordset.Fields[3].value)+''')';
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add(DDL1);
ADOQuery2.ExecSQL;
CRecordSet.MoveNext;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
DBConnectThread:= TThreadDBConnect.Create(True);
UpdateThread:= TUpdateThread.Create(True);
DBConnectThread.Resume;
//UpdateThread.Resume;
end;
procedure TForm1.Timer2Timer(Sender: TObject);
begin
if (FormatDatetime('hhnnss', now) = '2009-5-18 9:37:00') then
UpdateThread.Resume;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -