从程序的LOG看出数据库可以连接成功,但同步不成功,经查,不成功是因为查询表中的记录时长时间无结果,从而导致报“超时已过期”,执行程序EXE会报N个弹出框,最后导致EXE退出。现在我想做成查询时如果长时间无结果的话就放弃此次查询,不要影响其他正常数据库的连接和同步,请问该怎么做,是否要用到try ...finally/except,如果是又该怎么用。
procedure TMainForm.RecvDBTimerTimer(Sender: TObject);(通过定时器定时执行)
var
SourceConn: TADOConnection;
i: Integer;
ServerName, ServerIP, UserName, Password: String;
begin
SourceConn := TADOConnection.Create(nil);
SourceConn.CommandTimeout:=0;
SourceConn.ConnectionTimeout:=0; for i:=0 to FDBServerName.Count - 1 do
begin
ServerName := FDBServerName[i];
ServerIP := FDBServerIP[i];
UserName := FDBUserName[i];
Password := FDBPassword[i]; if InitADO(SourceConn, ServerIP, ServerName, UserName, Password) then
begin
AddLog('连接数据库(' + ServerIP + ')成功');
try
RecvDB(FDBLocalConnection, SourceConn);(此过程中存在查询长时间无结果的问题,暂未贴出详细代码)
AddLog('从数据库(' + ServerIP + ')同步数据成功');
finally
SourceConn.Free;
AddLog('从数据库(' + ServerIP + ')同步数据失败');
end;
SourceConn.Connected := False;
end else
begin
AddLog('连接数据库(' + ServerIP + ')失败');
end;
end; SourceConn.Free;
procedure TMainForm.RecvDBTimerTimer(Sender: TObject);(通过定时器定时执行)
var
SourceConn: TADOConnection;
i: Integer;
ServerName, ServerIP, UserName, Password: String;
begin
SourceConn := TADOConnection.Create(nil);
SourceConn.CommandTimeout:=0;
SourceConn.ConnectionTimeout:=0; for i:=0 to FDBServerName.Count - 1 do
begin
ServerName := FDBServerName[i];
ServerIP := FDBServerIP[i];
UserName := FDBUserName[i];
Password := FDBPassword[i]; if InitADO(SourceConn, ServerIP, ServerName, UserName, Password) then
begin
AddLog('连接数据库(' + ServerIP + ')成功');
try
RecvDB(FDBLocalConnection, SourceConn);(此过程中存在查询长时间无结果的问题,暂未贴出详细代码)
AddLog('从数据库(' + ServerIP + ')同步数据成功');
finally
SourceConn.Free;
AddLog('从数据库(' + ServerIP + ')同步数据失败');
end;
SourceConn.Connected := False;
end else
begin
AddLog('连接数据库(' + ServerIP + ')失败');
end;
end; SourceConn.Free;
...
AddLog('从数据库(' + ServerIP + ')同步数据成功');
finally
...
AddLog('从数据库(' + ServerIP + ')同步数据失败');
end;
?
try
try
RecvDB(FDBLocalConnection, SourceConn);(此过程中存在查询长时间无结果的问题,暂未贴出详细代码)
AddLog('从数据库(' + ServerIP + ')同步数据成功');
except
AddLog('从数据库(' + ServerIP + ')同步数据失败');
end;
finally
SourceConn.Free;
end;
begin
ServerName := FDBServerName[i];
ServerIP := FDBServerIP[i];
UserName := FDBUserName[i];
Password := FDBPassword[i]; if InitADO(SourceConn, ServerIP, ServerName, UserName, Password) then
begin
AddLog('连接数据库(' + ServerIP + ')成功');
try
RecvDB(FDBLocalConnection, SourceConn);
AddLog('从数据库(' + ServerIP + ')同步数据成功');
except
//SourceConn.Free;
AddLog('从数据库(' + ServerIP + ')同步数据失败');
end;
SourceConn.Connected := False;
end else
begin
AddLog('连接数据库(' + ServerIP + ')失败');
end;
end; SourceConn.Free;
end;