Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Prekid konekcije na Firebird

[es] :: Pascal / Delphi / Kylix :: Prekid konekcije na Firebird

[ Pregleda: 618 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

FranjoZG
Franjo Popović
Programer
Zagreb

Član broj: 328819
Poruke: 298
93.140.16.*



+4 Profil

icon Prekid konekcije na Firebird01.09.2020. u 10:02 - pre 43 meseci
Koristim: FB 1.5 i Delphi 10.1

Korisnik pokrene program, pa zaboravi na njega 2-3 sata. Kad se sjeti, program je izgubio konekciju na FB server. Kod sebe to ne uspjevam dobiti. Pokušavam sa zaustavljanjem i pokretanjem servisa FB.
U parametrima TFDConnection sam postavio:
AutoConnect := true
AutoReConnect := true

Kod zaustavljanja FB servisa, event AfterDisconnect se NE okine.

Kako nakon prekida konekcije ponovno ju uspostaviti? Pokušao sam u event konekcije OnError dodati:
Code:

procedure Tdm.fdcError(ASender, AInitiator: TObject; var AException: Exception);
begin
   fmMain.OtvoriDB;
end;


u Main formi, proc. OtvoriDB:
Code:

procedure TfmMain.OtvoriDB;
  ...
  if dm.fdc.Connected then
     dm.fdc.Close;
  ...
end;


dm.fdc.Connected ima vrijednost: true
dm.fdc.Close vrati grešku: [FireDAC][Phys][FB]Unable to complete network request to host "MojLap". Error writing data to the connection.
Ako izbacim dm.fdc.Close, tada mi dm.fdc.Open javi istu grešku.

Kolega ima na istom kompu program pisan u D2007 i nema tih problema.

 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Prekid konekcije na Firebird01.09.2020. u 10:20 - pre 43 meseci
Registrujej se da pratis sve exceptione, handluj tu gresku koja se javi tako sto unistis sve komponente (ili samo osnovne tipa DBConnection i DBSession) i ponovo ih napravis.
 
Odgovor na temu

FranjoZG
Franjo Popović
Programer
Zagreb

Član broj: 328819
Poruke: 298
93.140.16.*



+4 Profil

icon Re: Prekid konekcije na Firebird01.09.2020. u 11:29 - pre 43 meseci
savkic, probao sam, ali...

Namjerno sam izazvao error s form2.ShowModal a da nisam kreirao formu, exception je odradio, ali za konekciju kada stopiram FB server nije, javlja sistemsku grešku.

napravio sam u main formi:
Code:

  TfmMain = class(TForm)
  ...
  public
    procedure MyAppException(Sender: TObject; E: Exception);
  end;

procedure TfmMain.FormCreate(Sender: TObject);
begin
  Application.OnException := MyAppException;
end;

procedure TfmMain.MyAppException(Sender: TObject; E: Exception);
begin
   ShowMessage('Greška na:' + Sender.ClassName);
   Application.ShowException(e);
   dm.fdc.Free;
end;


Gdje griješim?
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Prekid konekcije na Firebird01.09.2020. u 11:42 - pre 43 meseci
Application.OnException nije dobio obavestenje o toj gresci? Da je nisi hendlovao vec negde? Mislim da ce u globalni hendler ici samo one neobradjene. Takodje probaj i sa TApplicationEvents.
 
Odgovor na temu

Allexxandar
Srbija

Član broj: 316446
Poruke: 3



+40 Profil

icon Re: Prekid konekcije na Firebird01.09.2020. u 15:08 - pre 43 meseci
Citat:
FranjoZG:
Koristim: FB 1.5 i Delphi 10.1

Korisnik pokrene program, pa zaboravi na njega 2-3 sata. Kad se sjeti, program je izgubio konekciju na FB server. Kod sebe to ne uspjevam dobiti. Pokušavam sa zaustavljanjem i pokretanjem servisa FB.
U parametrima TFDConnection sam postavio:
AutoConnect := true
AutoReConnect := true

Kod zaustavljanja FB servisa, event AfterDisconnect se NE okine.

Kako nakon prekida konekcije ponovno ju uspostaviti? Pokušao sam u event konekcije OnError dodati:
Code:

procedure Tdm.fdcError(ASender, AInitiator: TObject; var AException: Exception);
begin
   fmMain.OtvoriDB;
end;


u Main formi, proc. OtvoriDB:
Code:

procedure TfmMain.OtvoriDB;
  ...
  if dm.fdc.Connected then
     dm.fdc.Close;
  ...
end;


dm.fdc.Connected ima vrijednost: true
dm.fdc.Close vrati grešku: [FireDAC][Phys][FB]Unable to complete network request to host "MojLap". Error writing data to the connection.
Ako izbacim dm.fdc.Close, tada mi dm.fdc.Open javi istu grešku.

Kolega ima na istom kompu program pisan u D2007 i nema tih problema.




Možda računar kod korisnika ode u sleep?
 
Odgovor na temu

FranjoZG
Franjo Popović
Programer
Zagreb

Član broj: 328819
Poruke: 298
93.140.3.*



+4 Profil

icon Re: Prekid konekcije na Firebird04.09.2020. u 08:35 - pre 43 meseci
Nisam uspio shvatiti zašto se kod korisnika prekine konekcija. Kod sebe to nisam uspio napraviti. Kada komp ode u sleep, nakon buđenja konekcija još uvijek postoji. Kod sebe mogu samo ručno zaustaviti servis. Našao sam naćin provjere da li je servis aktivan ili ne, ali sam na lokalnom kompu. Nisam uspio naći kako provjeriti da li je aktivan FB servis na serveru.

Problem je provjera da li konekcija još uvijek postoji. Probao sa ping-om, ali ako nema konekcije traje predugo. Pokušat ću ju staviti u zasebni thread, pa ako se thread ne izvrši za par sekundi, protumačit ću to kao izgubljenu konekciju.
Što mislite o toj ideji ili postoji neki drugi način. Google mi nije dao ništa pametno.

Nešto zanimljivo, nisam detaljno istraživao: Ako je tfdConnection.AutoReConnect := true, tada kod izgubljene konekcije tfdConnection.Close javalja grešku (pokušaj ubisa u bazu). Možda ima veze sa aktivnim transakcijama. Ako je postavljeno na false, ta greška se ne javlja.
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Prekid konekcije na Firebird04.09.2020. u 09:54 - pre 43 meseci
> Nisam uspio naći kako provjeriti da li je aktivan FB servis na serveru.

Pokusas da se povezes na ServicesAPI? Ne znam da li FireDac ima adekvatne komponente, IBX ix ima.

> Problem je provjera da li konekcija još uvijek postoji.

Posaljes kveri i vidis ima li rezultata:
select 1 from RDB$DATABASE;
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Prekid konekcije na Firebird

[ Pregleda: 618 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.