Na deine Nutzer tun mir leid. Stell dir mal vor nen Browser entwickler würde so denken.Also wennn ein User den Netzstecker zieht oder im laufenden Betrieb von LAN auf WLAN umstellt, dann ist er's selber schuld und dann reicht eine Fehlermeldung.
MYSQL: ein reconnect nach "Server is gone away" durchführen
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
Re: MYSQL: ein reconnect nach "Server is gone away" durchfüh
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
Re: MYSQL: ein reconnect nach "Server is gone away" durchfüh
@christian, dann zeig mir mal den browser der nach dem Abziehen des Netzsteckers noch ohne Meldung läuft 

-
- Beiträge: 2013
- Registriert: Do 16. Okt 2008, 10:22
- OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
- CPU-Target: x86,x64,ARM
Re: MYSQL: ein reconnect nach "Server is gone away" durchfüh
Für MSEgui habe ich zu diesem Zweck die CloseTransactions() Prozedur geändert:
Das sollte dann auch funktionieren wenn in <transaction>.Action nicht caNone oder caRollback steht.
Code: Alles auswählen
procedure tmdatabase.CloseTransactions;
Var I : longint;
begin
If Assigned(FTransactions) then begin
For I:=FTransactions.Count-1 downto 0 do begin
with tmdbtransaction(FTransactions[i]) do begin
try
EndTransaction;
except
end;
finalizetransaction;
end;
end;
end;
end;
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
Re: MYSQL: ein reconnect nach "Server is gone away" durchfüh
Zeig mir mal nen Browser der ne Meldung macht wenn kurz das Netz weg ist. (Wohl gemerkt nicht wärend eines Requests wir müssen schon gleiches mit gleichem vergleichen)
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
Re: MYSQL: ein reconnect nach "Server is gone away" durchfüh
Danke für die Blumenhde hat geschrieben:Aber auch bei zeos gibt es noch ein kleines Prob; ein reconnect wenn die Verbindung fehlt ist abzufangen, aber wenn dann die Verbinbindung wiederkommt, gibts eine exception.

Ich habe da mal einiges probiert, ich bekomme keine Exception, wenn die Verbindung wieder da ist - wie bekommst Du die angestellt?! Evtl. liegts auch an der Zeosversion, ich nutze zur Zeit 7.2a-Trunc.
Machst Du das generell oder nur bei einer Exception?! Wenn generell - ist das performancemäßig vertretbar?!hde hat geschrieben:Übrigends bei Zeos reicht es meist, im BeforePost-Event einen Reconnect zu machen.
@hubblec4: Das sollte trotzdem funktionieren, scheinbar hat sich da was geändert in FreePascal von 2.6.4 -> 2.7.1 (müsstest Du entsprechend anpassen).
@mse: Schade, dass Du nicht für FreePascal/Lazarus arbeitest, Du wärst bestimmt eine sehr sehr gute Unterstützung! Na, keine Lust?!

Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
Re: MYSQL: ein reconnect nach "Server is gone away" durchfüh
Kann sehr gut sein, steht auf meiner ToDo-Liste das zu testen, fehlte aber bisher die Zeit.Michl hat geschrieben:Evtl. liegts auch an der Zeosversion, ich nutze zur Zeit 7.2a-Trunc.
-
- Beiträge: 2013
- Registriert: Do 16. Okt 2008, 10:22
- OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
- CPU-Target: x86,x64,ARM
Re: MYSQL: ein reconnect nach "Server is gone away" durchfüh
Leider ist Lazarus für meine Zwecke nicht geeignet und bei FPC sind die Delphi-Fesseln zu eng.Michl hat geschrieben: @mse: Schade, dass Du nicht für FreePascal/Lazarus arbeitest, Du wärst bestimmt eine sehr sehr gute Unterstützung! Na, keine Lust?!
Re: MYSQL: ein reconnect nach "Server is gone away" durchfüh
Dann sag mir mal, wie du in eine Datenbank auf einem Server schreibst wenn der User den Netzstecker abgezogen hat?Christian hat geschrieben:Na deine Nutzer tun mir leid.
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
Re: MYSQL: ein reconnect nach "Server is gone away" durchfüh
Darauf bezog ich mich, wenn jemand dauerhaft das Netz entfernt kann ,man natürlich wenig machen ausser drauf hinweisen.Also wennn ein User im laufenden Betrieb von LAN auf WLAN umstellt, dann ist er's selber schuld und dann reicht eine Fehlermeldung.
Promet blendet z.b. Über die gesamte Mainform eine Panel mit dem Text "Es besteht keine Verbindung zum Datenbankserver, stellen Sie die Verbindung wieder her" und pingt alle 5 sek den Server an, wenn er wieder da ist wied das Panel wieder ausgeblendet.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
Re: MYSQL: ein reconnect nach "Server is gone away" durchfüh
@christian, ich denke, du hast den Thread etwas zu flüchtig gelesenhde hat geschrieben:bei Zeos reicht es meist, im BeforePost-Event einen Reconnect zu machen, der Connect ist dann in jedem Falle, egal ob er weg war oder nicht, wieder da

Re: MYSQL: ein reconnect nach "Server is gone away" durchfüh
@Michl
Ich habe mal deinen Code
in die SQLTransaktion.Rollback Prozedur eingebaut.
Leider bekomme ich immer noch besagten fehler.
In dem FPC bugtracker hast du aber auch die SQLTransaction.RollbackRETAINING prozedur angepasst. aber auch die sieht bei fpc2.6.4 etwas anders aus.
Ich bin da auch etwas zu unerfahren als das ich jetzt einfach in den bestehenden Sachen von Lazarus rumcoden will.
Kann man davon ausgehen das der Fehler in einer bald kommenden version behoben sein wird?
Ich habe mal deinen Code
Code: Alles auswählen
if not Assigned(FTrans) then //Das hier ist neu
CloseTrans
else
Leider bekomme ich immer noch besagten fehler.
In dem FPC bugtracker hast du aber auch die SQLTransaction.RollbackRETAINING prozedur angepasst. aber auch die sieht bei fpc2.6.4 etwas anders aus.
Ich bin da auch etwas zu unerfahren als das ich jetzt einfach in den bestehenden Sachen von Lazarus rumcoden will.
Kann man davon ausgehen das der Fehler in einer bald kommenden version behoben sein wird?
-
- Beiträge: 2013
- Registriert: Do 16. Okt 2008, 10:22
- OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
- CPU-Target: x86,x64,ARM
Re: MYSQL: ein reconnect nach "Server is gone away" durchfüh
Hast du schon meine Version probiert?
Re: MYSQL: ein reconnect nach "Server is gone away" durchfüh
@hubblec4: Was hat Du denn für eine Action in Deiner TSQLTransaction stehen?! Konsequenterweise müsste man das tatsächlich für alle Actions fortführen. Werde das mal heute abend noch in 2.7.1 machen und den Patch neu hochladen.
PS.: Ich habe mir mal Laz. 1.2.4 mit FPC 2.6.4 installiert und das Testbeispiel gestartet, bei mir funktioniert (Änderung in Unit sqldb.pas):Damit ist ein Disconnect und Connect nach einer unterbrochenen Verbindung bei mir möglich.
@mse: Dein Vorschlag funktioniert deshalb bei Freepascal nicht, da FTrans=nil ist und somit es zu immer zu einer neuen Exception kommt, bevor CloseTrans aufgerufen wird. Aber mal sehen, evtl. haben die Entwickler von Freepascal noch eine ganz andere Idee?!
PS.: Ich habe mir mal Laz. 1.2.4 mit FPC 2.6.4 installiert und das Testbeispiel gestartet, bei mir funktioniert (Änderung in Unit sqldb.pas):
Code: Alles auswählen
procedure TSQLTransaction.Commit;
begin
if active then
begin
closedatasets;
if LogEvent(detCommit) then
Log(detCommit, SCommitting);
if not assigned(FTrans) then
closeTrans
else
if TSQLConnection(Database).commit(FTrans) then
begin
closeTrans;
FreeAndNil(FTrans);
end;
end;
end;
procedure TSQLTransaction.CommitRetaining;
begin
if active then
begin
if LogEvent(detCommit) then
Log(detCommit, SCommitRetaining);
if assigned(FTrans) then
TSQLConnection(Database).commitRetaining(FTrans);
end;
end;
procedure TSQLTransaction.Rollback;
begin
if active then
begin
closedatasets;
if LogEvent(detRollback) then
Log(detRollback, SRollingBack);
if not assigned(FTrans) then
CloseTrans
else
if TSQLConnection(Database).RollBack(FTrans) then
begin
CloseTrans;
FreeAndNil(FTrans);
end;
end;
end;
procedure TSQLTransaction.RollbackRetaining;
begin
if active then
begin
if LogEvent(detRollback) then
Log(detRollback, SRollBackRetaining);
if assigned(FTrans) then
TSQLConnection(Database).RollBackRetaining(FTrans);
end;
end;
@mse: Dein Vorschlag funktioniert deshalb bei Freepascal nicht, da FTrans=nil ist und somit es zu immer zu einer neuen Exception kommt, bevor CloseTrans aufgerufen wird. Aber mal sehen, evtl. haben die Entwickler von Freepascal noch eine ganz andere Idee?!
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
-
- Beiträge: 2013
- Registriert: Do 16. Okt 2008, 10:22
- OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
- CPU-Target: x86,x64,ARM
Re: MYSQL: ein reconnect nach "Server is gone away" durchfüh
Aha. In MSEgui sieht es so aus:Michl hat geschrieben: @mse: Dein Vorschlag funktioniert deshalb bei Freepascal nicht, da FTrans=nil ist und somit es zu immer zu einer neuen Exception kommt, bevor CloseTrans aufgerufen wird. Aber mal sehen, evtl. haben die Entwickler von Freepascal noch eine ganz andere Idee?!
Code: Alles auswählen
procedure TSQLTransaction.Rollback;
begin
if active then begin
dobeforestop;
if checkcanevent(self,tmethod(fonbeforerollback)) then begin
fonbeforerollback(self);
end;
savepointevent(spek_rollbacktrans,0);
closedatasets;
try
if not (tao_fake in foptions) then begin
tcustomsqlconnection(database).RollBack(FTrans);
end;
finally
fsavepointlevel:= -1;
CloseTrans;
if checkcanevent(self,tmethod(fonafterrollback)) then begin
fonafterrollback(self);
end;
doafterstop;
end;
end;
end;
Re: MYSQL: ein reconnect nach "Server is gone away" durchfüh
nein noch nicht, da jetzt Michl aber meinte es würde eh bei FPC nicht gehen, weis ich nicht ob es sinn macht es zu testen.mse hat geschrieben:Hast du schon meine Version probiert?