公用一个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.

解决方案 »

  1.   

    一旦网络断开,adoconnection1.Connected就会变成 false,监控它就行了啊
      

  2.   

    关键是怎么时时检测adoconnection1.Connected
    还有再打开adoconnection的时候该怎么做
    只是open好像不行的,别的引用的窗体还是出错
      

  3.   

    发表一点愚见:
    1.在你的线程中,并没有看到每隔一段时间检查的代码呀
    2.在你的线程中的OpenData过程中,调用了Form的Memo可视控件
      按照多线程的用法,对于在线程中操作VCL组件要用:
      Synchronize方法包含起来,否则有可能会出问题
      

  4.   

    to duanhai(段海) 
    1.我愿来想的是timer控件定时执行线程,用try except 捕捉连接错误信息然后作出判断,却没做好
    2。memo可取去掉不用,这里只是测试。。、、、、、、、、、、、、、、、、
    现在有点思路,却不知道怎么实现他。给点意见吧