我有一个Delphi应用程序,它通过TTimer每隔60秒就会访问一个数据库(通常是MySql)。该应用程序或多或少是一个无人看管的公告板。如果网络中断,则应用程序需要继续运行并在连接恢复时连接回数据库。通常它可能是通过宽带,所以连接并不总是最好的。
我正在使用TAdoConnection组件。这在应用程序启动时打开并保持打开状态。每当我需要创建一个新查询时,我将Connection设置为打开的TAdoConnection。但我发现如果网络丢失,这不是很可靠。
在此实例中连接数据库的最佳方法是什么? 我已经看到了可以直接在TAdoQuery中构建连接字符串的方法。这是正确的方法吗?或者这是否过度耗费资源?有时我需要打开5-10个查询来获取所有信息。
或者如何在TTimer.OnTimer事件中执行此操作:
创建TAdoConnection
执行所有查询
免费TAdoConnection
感谢。
答案 0 :(得分:5)
您应该使用单个TAdoConnection对象来避免为每个组件设置连接字符串。保持连接对象关闭,并在需要访问数据时将其打开。像这样:
procedure OnTimer;
begin
MyAdoConnection.Open;
try
// Data access code here
...
finally
MyAdoConnection.Close;
end;
end;
您还可以在try/except
附近放置另一个MyAdoConnection.Open
块,以捕捉网络不可用的情况。
关于问题的第二部分,最好将所有数据访问组件放在您需要运行数据访问过程时创建的数据模块中。然后,您可以将所有数据访问代码放在该数据模块中,并将其与其余代码分开。
您可以尝试在数据模块的OnCreate事件中打开连接,但在打开连接时要小心处理可能的异常。在OnDestroy事件中关闭连接。然后你可以使用这样的数据模块:
procedure OnTimer;
var myDataModule : TMyDataModule;
begin
myDataModule := TMyDataModule.Create;
try
// Data access code here
myDataModule.DoSomeDatabaseWork;
finally
myDataModule.Free;
end;
end;