代码之家  ›  专栏  ›  技术社区  ›  M Schenkel

连接到此应用程序的数据库的最佳方法

  •  1
  • M Schenkel  · 技术社区  · 16 年前

    我有一个Delphi应用程序,它每隔60秒通过TTimer访问一个数据库(通常是MySQL)。应用程序或多或少是一个无人值守的公告板。如果网络断开,应用程序需要继续运行,并在连接恢复时重新连接到数据库。通常情况下,它可能是通过宽带连接的,所以连接并不总是最好的。

    我正在使用tadoconnection组件。它在应用程序启动时打开,并保持打开状态。每当我需要创建一个新的查询时,我都将连接设置为打开的tadoConnection。但我发现,如果网络中断的话,这是不太可靠的。

    在此实例中,连接到数据库的最佳方法是什么? 我已经看到了将连接字符串直接构建到tadoquery中的方法。这是正确的方法吗?或者这是过度的资源密集型?有时我需要打开5-10个查询来获取所有信息。

    或者在ttimer.ontimer事件中执行此操作:

    创建tadoConnection

    做所有查询

    自由连接

    谢谢。

    1 回复  |  直到 16 年前
        1
  •  5
  •   zendar    16 年前

    您应该使用单个tadoConnection对象来避免为每个组件设置连接字符串。保持连接对象关闭,并在需要访问数据时打开它。像这样:

    procedure OnTimer;
    begin
      MyAdoConnection.Open;
      try
        // Data access code here
        ...
      finally
         MyAdoConnection.Close;
      end; 
    end;
    

    你可以另外加一个 try/except 绕过 MyAdoConnection.Open 捕捉网络不可用的情况。

    关于问题的第二部分,最好是将所有数据访问组件放在数据模块中,在需要运行数据访问过程时创建这些模块。然后,您可以将所有数据访问代码放在该数据模块中,并将其与其他代码分开。

    您可以尝试在DataModule的onCreate事件中打开连接,但在打开连接时要小心处理可能的异常。OnDestroy事件中关闭连接。然后您可以像这样使用数据模块:

    procedure OnTimer;
    var myDataModule : TMyDataModule;
    begin
      myDataModule  := TMyDataModule.Create;
      try
        // Data access code here
        myDataModule.DoSomeDatabaseWork;
      finally
         myDataModule.Free;
      end; 
    end;