Hvala na odgovorima. Sto se tice predugog connection timeout-a to je bila moja greska, default timeout je sasvim OK. I pored toga probao sam da se poigram sa isc_dpb_connect_timeout predlogom, koliko mogu da vidim to bi moralo da se odradi u OnCustomizeDPB eventu konekcije, npr. ovako:
Code:
procedure TForm1.OnCustomizeDPB(Sender: TIB_Connection; var ABufPtr: Integer; var ABuffer: array of Char);
begin
BuildDPB(ABufPtr, ABuffer, isc_dpb_dummy_packet_interval, '50');
BuildDPB(ABufPtr, ABuffer, isc_dpb_connect_timeout, '20');
end;
medjutim, ne vidim nikakvu razliku koliku god vrednost da stavim za isc_dpb_connect_timeout...
Osim toga, trenutno pokusavam sa ovim OnConnectionError kodom (tj. ovo je u nasledjenoj klasi):
Code:
procedure TIB_Connection_Plus.ConnectionError(Sender: TObject; const ERRCODE: Integer; ErrorMessage, ErrorCodes: TStringList;
const SQLCODE: Integer; SQLMessage, SQL: TStringList; var RaiseException: Boolean);
begin
if not Connected then exit;
if (ERRCODE = IB_Header.isc_conn_lost) or (ERRCODE = IB_Header.isc_network_error) or (ERRCODE = IB_Header.isc_lost_db_connection)
then
begin
try
try
ForceDisconnect;
except
end;
Open;
RaiseException := false;
except
ConnectionLost := true;
end;
end;
end;
Za upite koje kreiram dinamicki ovo je OK i gubitak konekcije se ne primecuje tj. reconnect se odradi lepo. Medjutim sa postojecim otvorenim IB_Query (na data modulu) je bilo problema jer nakon reconnect-a oni izgleda i dalje imaju stare hendlove... pa sam dodao i
Code:
procedure TIB_Connection_Plus.ForceDisconnect;
var i : integer;
begin
for i:= 0 to self.DatasetCount-1 do
begin
Datasets[i].Close;
Datasets[i].Unprepare;
end;
inherited ForceDisconnect;
end;
ali iz nekog razloga ostao je problem sa IB_Query.Params (parametri se obrisu) i Locate pa sam nasledio query i dodao
Code:
function TIB_Query_Plus.GetParam(index: integer): TIB_Column;
begin
if ParamCount=0
then begin
UnPrepare;
Prepare;
end;
result := inherited Params[index];
end;
function TIB_Query_Plus.Locate(const KeyFields: string; const KeyValues: Variant; Options: TIB_LocateOptions): Boolean;
begin
if not Prepared then Prepare;
result := inherited Locate (KeyFields, KeyValues, Options);
end;
potrebno je jos da se testira, ali za sada deluje ok...