【问题标题】:Best way to connect to database for this application此应用程序连接到数据库的最佳方式
【发布时间】:2009-04-03 19:07:34
【问题描述】:

我有一个 Delphi 应用程序,它通过 TTimer 每 60 秒访问一个数据库(通常是 MySql)。该应用程序或多或少是一个无人值守的公告板。如果网络中断,应用程序需要继续运行并在连接恢复时连接回数据库。通常它可能是通过宽带传输的,因此连接可能并不总是最好的。

我正在使用 TAdoConnection 组件。它在应用程序启动时打开并保持打开状态。每当我需要进行新查询时,我都会将 Connection 设置为打开的 TAdoConnection。但是我发现如果网络中断,这不是很可靠。

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

或者如何在 TTimer.OnTimer 事件中这样做:

创建 TAdoConnection

执行所有查询

免费的 TAdoConnection

谢谢。

【问题讨论】:

    标签: mysql database delphi


    【解决方案1】:

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

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

    您还可以在MyAdoConnection.Open 周围放置另一个try/except 块,以捕捉网络不可用的情况。

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

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

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

    【讨论】:

    • 谢谢 - 我会试试这个。似乎很有道理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-08
    • 2020-05-05
    • 2022-06-28
    • 2016-04-01
    • 2023-03-12
    相关资源
    最近更新 更多