我有一个Delphi应用程序,它通过TTimer每隔60秒访问一个数据库(通常是MySql)。该应用程序或多或少是一个无人值守的公告栏。如果网络中断,应用程序需要继续运行,并在连接恢复时连接回数据库。通常它可能是通过宽带连接的,所以连接并不总是最好的。
我使用的是TAdoConnection组件。它在应用程序启动时打开,并保持打开状态。每当我需要进行新的查询时,我都会设置到打开的TAdoConnection的连接。但我发现如果有网络中断,这是不太可靠的。
在这种情况下,连接到数据库的最佳方式是什么?我见过将连接字符串直接构建到TAdoQuery中的方法。这是正确的方式吗?或者这是过度的资源密集型?有时我需要打开5-10个查询来获取所有信息。
或者在TTimer.OnTimer事件中执行此操作:
创建TAdoConnection
是否执行所有查询
免费TAdoConnection
谢谢。
发布于 2009-04-03 19:18:02
您应该使用单个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;https://stackoverflow.com/questions/715246
复制相似问题