Mysql连接在Delphi中。TDBX(dbExpress)中的错误处理

Mysql连接在Delphi中。TDBX(dbExpress)中的错误处理,mysql,delphi,dbexpress,Mysql,Delphi,Dbexpress,下面是我如何检查数据库mysql中数据的一些代码 创建 CheckThread := TCheckThread.Create(True); CheckThread.Start; {TCheckThread} procedure TCheckThread.Execute; function AddLine(ALine: string): String; begin CsMemo.Enter; Form1.Memo1.Lines.Add('[' + TimeToStr(Now)

下面是我如何检查数据库mysql中数据的一些代码 创建

  CheckThread := TCheckThread.Create(True);
  CheckThread.Start;
{TCheckThread}

procedure TCheckThread.Execute;

function AddLine(ALine: string): String;
begin
  CsMemo.Enter;

  Form1.Memo1.Lines.Add('[' + TimeToStr(Now) + ']SQL Checker ' + ALine);

  CsMemo.Leave;
end;

var
  DateCheckCount: integer;
begin
  GDateCounter := 0;
  FQry := TSQLQuery.Create(nil);
  FSQLConnection := TSQLConnection.Create(nil);
  try
    FSQLConnection.DriverName := 'MySQL';
    FSQLConnection.GetDriverFunc := 'getSQLDriverMYSQL';
    FSQLConnection.LibraryName := 'dbxmys.dll';
    FSQLConnection.VendorLib := 'libmysql.dll';
    FSQLConnection.LoginPrompt := FAlse;

    FSQLConnection.Params.Values['CharacterSet'] := 'utf8';
    FSQLConnection.Params.Values['Names'] := 'utf8';
    FSQLConnection.Params.Values['ServerCharSet'] := 'utf8';
    FSQLConnection.Params.Values['Database'] := dbName;
    FSQLConnection.Params.Values['User_Name'] := dbUser;
    FSQLConnection.Params.Values['Password'] := dbPass;
    FSQLConnection.Params.Values['HostName'] := dbHost;
    FQry.SQLConnection := FSQLConnection;
    while not self.Terminated do
    begin

      try
        inc(DateCheckCount);
        Foundmini := FAlse;

        FQry.SQL.Text := 'SELECT * FROM `' + GlobTableVar + '` WHERE `state`=''Free''';;
        FQry.Prepared := True;
        FQry.Open();
        while not FQry.Eof do
        begin
          GDateFound := True;
          Foundmini := True;
          AddLine('YE');
          Break;
        end;
        FQry.Close;

        if not Foundmini then
        begin
          GDateFound := FAlse;
          AddLine('Check..')
        end;
        try
          if random(6) = 1 then
            Form1.LabelCheckDate.Caption := 'Check #' + inttostr(DateCheckCount);
        except
        end;
        sleep(100);
      except
        on e: Exception do
        begin
          AddLine('[<< REQUEST THREAD DEBUG >>] ' + e.ClassName + ' EwM ' + e.Message);
          FSQLConnection.Close;
          FSQLConnection.Open;
        end;
      end;

    end;
  finally
    FSQLConnection.Free;
    FQry.Free;
  end;
end;
这是调用堆栈

thread $57b0 (TCheckThread):
00967d8d +051 VladSoft.exe Data.DBXCommon   10946  +8 TDBXContext.Error
00a14aa2 +10a VladSoft.exe Data.DBXDynalink   824 +21 TDBXMethodTable.RaiseError
00a150fb +013 VladSoft.exe Data.DBXDynalink   974  +1 TDBXDynalinkConnection.CheckResult
00a152ec +050 VladSoft.exe Data.DBXDynalink  1062  +4 TDBXDynalinkConnection.DerivedOpen
009638b7 +00b VladSoft.exe Data.DBXCommon    8510  +5 TDBXConnection.Open
0095ed36 +0fe VladSoft.exe Data.DBXCommon    6671 +14 TDBXConnectionFactory.GetConnection
0095ec31 +005 VladSoft.exe Data.DBXCommon    6648  +0 TDBXConnectionFactory.GetConnection
009f85fb +293 VladSoft.exe Data.SqlExpr      2487 +53 TSQLConnection.DoConnect
008f01ed +039 VladSoft.exe Data.DB           3483  +8 TCustomConnection.SetConnected
009f9630 +130 VladSoft.exe Data.SqlExpr      2870 +32 TSQLConnection.CloneConnection
00a041eb +07b VladSoft.exe Data.SqlExpr      6030  +7 TCustomSQLDataSet.CheckStatement
00a086ca +0a6 VladSoft.exe Data.SqlExpr      7550 +10 TSQLQuery.PrepareStatement
00a04082 +0fe VladSoft.exe Data.SqlExpr      5992 +45 TCustomSQLDataSet.SetPrepared
00a45b08 +1b8 VladSoft.exe Unit1             1385 +28 TCheckThread.Execute
004a9c43 +02b VladSoft.exe madExcept                  HookedTThreadExecute
0053d282 +042 VladSoft.exe System.Classes   14548 +12 ThreadProc
0040aad0 +028 VladSoft.exe System           22016 +45 ThreadWrapper
004a9b29 +00d VladSoft.exe madExcept                  CallThreadProcSafe
004a9b8e +032 VladSoft.exe madExcept                  ThreadExceptFrame
77443368 +010 kernel32.dll                             BaseThreadInitThunk
>> created by main thread ($51d4) at:
00a45036 +582 VladSoft.exe Unit1             1193 +48 TForm1.ButtonStartClick

thread $57b0 (TCheckThread), inner exception level 1:
>> TDBXError, Can't connect to MySQL server on '82.146.40.149' (10061)
00967d8d +051 VladSoft.exe Data.DBXCommon   10946  +8 TDBXContext.Error
00a14aa2 +10a VladSoft.exe Data.DBXDynalink   824 +21 TDBXMethodTable.RaiseError
00a150fb +013 VladSoft.exe Data.DBXDynalink   974  +1 TDBXDynalinkConnection.CheckResult
00a152ec +050 VladSoft.exe Data.DBXDynalink  1062  +4 TDBXDynalinkConnection.DerivedOpen
009638b7 +00b VladSoft.exe Data.DBXCommon    8510  +5 TDBXConnection.Open
0095ed36 +0fe VladSoft.exe Data.DBXCommon    6671 +14 TDBXConnectionFactory.GetConnection
0095ec31 +005 VladSoft.exe Data.DBXCommon    6648  +0 TDBXConnectionFactory.GetConnection
009f85fb +293 VladSoft.exe Data.SqlExpr      2487 +53 TSQLConnection.DoConnect
008f01ed +039 VladSoft.exe Data.DB           3483  +8 TCustomConnection.SetConnected
009f9630 +130 VladSoft.exe Data.SqlExpr      2870 +32 TSQLConnection.CloneConnection
00a041eb +07b VladSoft.exe Data.SqlExpr      6030  +7 TCustomSQLDataSet.CheckStatement
00a086ca +0a6 VladSoft.exe Data.SqlExpr      7550 +10 TSQLQuery.PrepareStatement
00a04082 +0fe VladSoft.exe Data.SqlExpr      5992 +45 TCustomSQLDataSet.SetPrepared
00a45b08 +1b8 VladSoft.exe Unit1             1385 +28 TCheckThread.Execute
0053d282 +042 VladSoft.exe System.Classes   14548 +12 ThreadProc
0040aad0 +028 VladSoft.exe System           22016 +45 ThreadWrapper
004a9b29 +00d VladSoft.exe madExcept                  CallThreadProcSafe
004a9b8e +032 VladSoft.exe madExcept                  ThreadExceptFrame
77443368 +010 kernel32.dll                             BaseThreadInitThunk
00a45036 +582 VladSoft.exe Unit1             1193 +48 TForm1.ButtonStartClick

有人能帮我吗?我可以寄一些网络资金来激励

问题到底出在哪里还不清楚。异常表示它无法连接到数据库,您的描述表示数据库正在重新启动。您无法连接到未联机的数据库。可以,但超出了主应用程序线程。但是,我需要处理检查线程中的异常。异常是如何在主线程中出现的??您正在尝试在异常块中重新连接,这将导致未处理的异常,让它冒泡到主线程。请不要尝试在except块中重新连接,而是设置一个标志,指示您需要连接到数据库才能执行工作。第二个问题是,您正在从另一个线程Form1.LabelCheckDate.Caption、AddLine函数…访问VCL,VCL不支持多线程,您必须同步对它的所有访问。是的,VCL不是线程安全的!如果继续这样编写代码,您将遇到麻烦。。。使用同步方法访问UI/VCL对象。
thread $57b0 (TCheckThread):
00967d8d +051 VladSoft.exe Data.DBXCommon   10946  +8 TDBXContext.Error
00a14aa2 +10a VladSoft.exe Data.DBXDynalink   824 +21 TDBXMethodTable.RaiseError
00a150fb +013 VladSoft.exe Data.DBXDynalink   974  +1 TDBXDynalinkConnection.CheckResult
00a152ec +050 VladSoft.exe Data.DBXDynalink  1062  +4 TDBXDynalinkConnection.DerivedOpen
009638b7 +00b VladSoft.exe Data.DBXCommon    8510  +5 TDBXConnection.Open
0095ed36 +0fe VladSoft.exe Data.DBXCommon    6671 +14 TDBXConnectionFactory.GetConnection
0095ec31 +005 VladSoft.exe Data.DBXCommon    6648  +0 TDBXConnectionFactory.GetConnection
009f85fb +293 VladSoft.exe Data.SqlExpr      2487 +53 TSQLConnection.DoConnect
008f01ed +039 VladSoft.exe Data.DB           3483  +8 TCustomConnection.SetConnected
009f9630 +130 VladSoft.exe Data.SqlExpr      2870 +32 TSQLConnection.CloneConnection
00a041eb +07b VladSoft.exe Data.SqlExpr      6030  +7 TCustomSQLDataSet.CheckStatement
00a086ca +0a6 VladSoft.exe Data.SqlExpr      7550 +10 TSQLQuery.PrepareStatement
00a04082 +0fe VladSoft.exe Data.SqlExpr      5992 +45 TCustomSQLDataSet.SetPrepared
00a45b08 +1b8 VladSoft.exe Unit1             1385 +28 TCheckThread.Execute
004a9c43 +02b VladSoft.exe madExcept                  HookedTThreadExecute
0053d282 +042 VladSoft.exe System.Classes   14548 +12 ThreadProc
0040aad0 +028 VladSoft.exe System           22016 +45 ThreadWrapper
004a9b29 +00d VladSoft.exe madExcept                  CallThreadProcSafe
004a9b8e +032 VladSoft.exe madExcept                  ThreadExceptFrame
77443368 +010 kernel32.dll                             BaseThreadInitThunk
>> created by main thread ($51d4) at:
00a45036 +582 VladSoft.exe Unit1             1193 +48 TForm1.ButtonStartClick

thread $57b0 (TCheckThread), inner exception level 1:
>> TDBXError, Can't connect to MySQL server on '82.146.40.149' (10061)
00967d8d +051 VladSoft.exe Data.DBXCommon   10946  +8 TDBXContext.Error
00a14aa2 +10a VladSoft.exe Data.DBXDynalink   824 +21 TDBXMethodTable.RaiseError
00a150fb +013 VladSoft.exe Data.DBXDynalink   974  +1 TDBXDynalinkConnection.CheckResult
00a152ec +050 VladSoft.exe Data.DBXDynalink  1062  +4 TDBXDynalinkConnection.DerivedOpen
009638b7 +00b VladSoft.exe Data.DBXCommon    8510  +5 TDBXConnection.Open
0095ed36 +0fe VladSoft.exe Data.DBXCommon    6671 +14 TDBXConnectionFactory.GetConnection
0095ec31 +005 VladSoft.exe Data.DBXCommon    6648  +0 TDBXConnectionFactory.GetConnection
009f85fb +293 VladSoft.exe Data.SqlExpr      2487 +53 TSQLConnection.DoConnect
008f01ed +039 VladSoft.exe Data.DB           3483  +8 TCustomConnection.SetConnected
009f9630 +130 VladSoft.exe Data.SqlExpr      2870 +32 TSQLConnection.CloneConnection
00a041eb +07b VladSoft.exe Data.SqlExpr      6030  +7 TCustomSQLDataSet.CheckStatement
00a086ca +0a6 VladSoft.exe Data.SqlExpr      7550 +10 TSQLQuery.PrepareStatement
00a04082 +0fe VladSoft.exe Data.SqlExpr      5992 +45 TCustomSQLDataSet.SetPrepared
00a45b08 +1b8 VladSoft.exe Unit1             1385 +28 TCheckThread.Execute
0053d282 +042 VladSoft.exe System.Classes   14548 +12 ThreadProc
0040aad0 +028 VladSoft.exe System           22016 +45 ThreadWrapper
004a9b29 +00d VladSoft.exe madExcept                  CallThreadProcSafe
004a9b8e +032 VladSoft.exe madExcept                  ThreadExceptFrame
77443368 +010 kernel32.dll                             BaseThreadInitThunk
00a45036 +582 VladSoft.exe Unit1             1193 +48 TForm1.ButtonStartClick