公用一个adoconnection连接,动态连接串
由于网络可能不太好,有时会断掉
想在主界面中作一线程,检测sql连接,如果不通的时候,每隔段时间调用adoconnection连接
type
TOpenADO=class(TThread)
private
FADSet:TADODataSet;
FConn:TADOConnection;
procedure OpenData();
protected
procedure Execute; override;
Public
constructor Create(Conn:TADOConnection);//构造函数;
destructor Destroy; override;
end;
var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
beginend;{ TOpenADO }constructor TOpenADO.Create(Conn: TADOConnection);
begin
inherited Create(false);
FreeOnTerminate:=true;FConn:=TADOConnection.Create(nil);
FConn.ConnectionString:=Conn.ConnectionString;
FConn.LoginPrompt:=False;
FConn.Open();FADSet:=TADODataSet.Create(nil);
FADSet.Connection:=FConn;end;destructor TOpenADO.Destroy;
begin
FADSet.Free;
FConn.Free;
end;procedure TOpenADO.Execute;
begin
OpenData;
end;procedure TOpenADO.OpenData;
begin
with FADset do
begin
Close;
CommandText:='select * from users';
prepared;
Open;
Form1.ADODataSet1.Clone(FADset);
Form1.Memo1.Clear;
Form1.Memo1.Lines.Add(inttostr(RecordCount));
end;
end;procedure TForm1.Button1Click(Sender: TObject);
var
Test:TOpenADO;s_InitFile: TIniFile;
begin
try
ADODataSet1.Close;
Test:=TOpenADO.Create(self.ADOConnection1);
Test.Resume;
end; except
//showmessage('网络连接失败!')
data1.adoconnection1.Close;
s_InitFile := TINIFile.Create(ExtractFilePath(Application.ExeName) + 'sqlstr.ini');
data1.adoconnection1.ConnectionString := s_InitFile.ReadString('Options', 'FMSDB1', ''); // 读取数据库连接字符串
s_InitFile.Free;
data1.adoconnection1.Connected:=true;
end;
end.
由于网络可能不太好,有时会断掉
想在主界面中作一线程,检测sql连接,如果不通的时候,每隔段时间调用adoconnection连接
type
TOpenADO=class(TThread)
private
FADSet:TADODataSet;
FConn:TADOConnection;
procedure OpenData();
protected
procedure Execute; override;
Public
constructor Create(Conn:TADOConnection);//构造函数;
destructor Destroy; override;
end;
var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
beginend;{ TOpenADO }constructor TOpenADO.Create(Conn: TADOConnection);
begin
inherited Create(false);
FreeOnTerminate:=true;FConn:=TADOConnection.Create(nil);
FConn.ConnectionString:=Conn.ConnectionString;
FConn.LoginPrompt:=False;
FConn.Open();FADSet:=TADODataSet.Create(nil);
FADSet.Connection:=FConn;end;destructor TOpenADO.Destroy;
begin
FADSet.Free;
FConn.Free;
end;procedure TOpenADO.Execute;
begin
OpenData;
end;procedure TOpenADO.OpenData;
begin
with FADset do
begin
Close;
CommandText:='select * from users';
prepared;
Open;
Form1.ADODataSet1.Clone(FADset);
Form1.Memo1.Clear;
Form1.Memo1.Lines.Add(inttostr(RecordCount));
end;
end;procedure TForm1.Button1Click(Sender: TObject);
var
Test:TOpenADO;s_InitFile: TIniFile;
begin
try
ADODataSet1.Close;
Test:=TOpenADO.Create(self.ADOConnection1);
Test.Resume;
end; except
//showmessage('网络连接失败!')
data1.adoconnection1.Close;
s_InitFile := TINIFile.Create(ExtractFilePath(Application.ExeName) + 'sqlstr.ini');
data1.adoconnection1.ConnectionString := s_InitFile.ReadString('Options', 'FMSDB1', ''); // 读取数据库连接字符串
s_InitFile.Free;
data1.adoconnection1.Connected:=true;
end;
end.
解决方案 »
- 我用嵌套循环可以实现如下功能,但速度慢的要死,有何好的方法?请大家帮忙!
- 面向对像的一个问题,大家帮我看看.
- 几年目睹多线程中TIdTCPClient控件的读取,以及中止线程之怪现状
- 在2000下编译的程序在xp下出问题,求救.
- 这个SQL语句到底错在哪里?一片茫然
- 如果对A、C、B、5、8、H、5、U进行全排列,数字和字母不能重复,并打印出来,算法如何写[事成后给200分]
- 很简单的问题,请教!!!UP有分!
- chechy的散分贴,祝大家身体健康!
- 怎样实现类似Object Inspector的停靠功能?
- 哪有 Delphi 5.X ADO_MTS_COM+高级程序设计篇 的光盘源码下啊
- 今天遇到的两天头痛问题请大家赐教。
- 文件存贮的问题,请指教
还有再打开adoconnection的时候该怎么做
只是open好像不行的,别的引用的窗体还是出错
1.在你的线程中,并没有看到每隔一段时间检查的代码呀
2.在你的线程中的OpenData过程中,调用了Form的Memo可视控件
按照多线程的用法,对于在线程中操作VCL组件要用:
Synchronize方法包含起来,否则有可能会出问题
1.我愿来想的是timer控件定时执行线程,用try except 捕捉连接错误信息然后作出判断,却没做好
2。memo可取去掉不用,这里只是测试。。、、、、、、、、、、、、、、、、
现在有点思路,却不知道怎么实现他。给点意见吧