offene SQL Results
Moderator: Moderatoren
- Manfred
- Foren-Administrator
- Beiträge: 21216
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
offene SQL Results
Gestern bin ich auf eine Situation gestossen, die mir Probleme bereitet. Ich fordere ein Result (Livecursor) vom ADS an. Danach ist eine Reihe von Arbeiten dran und dann wird das Result wieder gschlossen. So weit so gut. Leider ist der Vorgang aber mittendrin abgebrochen worden, weil es einen Fehler im Programm gab. Der Client wurde wieder auf die index.html Seite geworfen, aber das Result war noch offen. Beim nächsten Vorgang kam dann die Meldung beim Schreiben, das der Satz noch von einem anderen User gesperrt wäre. Das ist schon blöd weil es ja immer wieder mal vorkommen kann. Wie löst man so Absturzprobleme? Irgendwie muß ja das Result wieder geschlossen werden. Der ADS hat ja seine Verbindung über xb2net noch zum Programm, was ja weiter läuft. Nur der Client im Web ist ja draußen.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9387
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 362 Mal
- Kontaktdaten:
Re: offene SQL Results
a) Dadurch, dass man solche möglicherweise kritischen Prozesse (also den, der den Fehler ausgelöst hat) in Sequenzen einbettet und im Fehlerfall entsprechend agiert.Wie löst man so Absturzprobleme?
b) Durch Timeouts auf der Serverseite.
Herzlich,
Tom
Tom
- Manfred
- Foren-Administrator
- Beiträge: 21216
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: offene SQL Results
zu b) einen Timeout gibt es, aber der greift ja nicht nach Sekunden(wäre ja auch sicherlich zu kurz gedacht). Und der User meldet sich ja sofort wieder an und kommt dann in erneut besagte Situation, weil er ja ab da auch als Fremdling gilt, der einen gesperrten Satz anpacken will. (Zumindest ist das in der Situation der Fall)
zu a) könntest Du mir da näheres zu schreiben? Ich habe im Moment keine Idee, wie Du das umsetzen würdest.
zu a) könntest Du mir da näheres zu schreiben? Ich habe im Moment keine Idee, wie Du das umsetzen würdest.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- HaPe
- 1000 working lines a day
- Beiträge: 996
- Registriert: So, 15. Nov 2015 17:44
- Wohnort: 71665 Vaihingen-Enz
- Hat sich bedankt: 17 Mal
- Danksagung erhalten: 15 Mal
Re: offene SQL Results
Hallo Manfred !
Indem du an allen kritischen Stellen immer auf korrekte Rückgabewerte prüfst und ist das nicht der Fall, die Connection zum ADS ordnungsgemäß schließt und die Funktion beendest.zu a) könntest Du mir da näheres zu schreiben? Ich habe im Moment keine Idee, wie Du das umsetzen würdest.
--
Hans-Peter
Hans-Peter
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9387
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 362 Mal
- Kontaktdaten:
Re: offene SQL Results
HaPe, Manfred spricht von einem Fehler, also einem Laufzeitfehler. Im einfachsten Fall sichert man das Fehlerobjekt, bettet die gesamte Routine, in der dieser Fehler geschehen kann, in eine Sequenz, und ergänzt das Break() im ersetzten Fehlerobjekt durch das Schließen der Verbindung.
Die MsgBox soll nur verdeutlichen, dass man den Fehler auch tracken kann, selbst in einer Serversituation. "CloseConnection" ist abstrakt - hier sollte dann also die Verbindung geschlossen werden.
Code: Alles auswählen
FUNCTION HierSpielDieMusik() // das ist die Auswertungsroutine, in der der Fehler auftreten kann
LOCAL bError := ErrorBlock( {|o|MsgBox(o:Description),CloseConnection(),Break(o)})
BEGIN SEQUENCE
* Musik spielen
ENDSEQUENCE
ErrorBock(bError)
RETURN Result
Herzlich,
Tom
Tom
- Manfred
- Foren-Administrator
- Beiträge: 21216
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: offene SQL Results
Hi Tom,
stimmt. Ich vergesse immer wieder, das man sowas ja auch in xb2net programmieren kann.
stimmt. Ich vergesse immer wieder, das man sowas ja auch in xb2net programmieren kann.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9387
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 362 Mal
- Kontaktdaten:
Re: offene SQL Results
Das ist gerade bei Serverprogrammierung ziemlich wichtig. Du hast ja keinen Benutzer, der davorsitzt, und neben der Fehlervermeidung und -analyse ist extrem wichtig, dass der Server läuft und erreichbar ist. Falls es um eine Art Server gehen sollte. Ansonsten sollte natürlich auch bei einem Frontend in der ErrorSys dafür gesorgt werden, dass ggf. offene Connections geschlossen, Semaphoren freigegeben oder gelöscht usw. werden.Ich vergesse immer wieder, das man sowas ja auch in xb2net programmieren kann.
Herzlich,
Tom
Tom
- Manfred
- Foren-Administrator
- Beiträge: 21216
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: offene SQL Results
naja, das Dingen dabei ist, der Server läuft weiter nur der Client wird rausgeworfen. Ich muß das alles mal ordentlich verfeinern.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9387
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 362 Mal
- Kontaktdaten:
Re: offene SQL Results
Ich nehme an, der Workerthread wird einfach beendet. In Xb2.Net sind alle Serverklassen auch von Thread() abgeleitet, und im Fehlerfall beenden sie sich einfach. Falls Du das so verwendest, kannst Du das Schließen der Verbindung auch dort einbauen.
Herzlich,
Tom
Tom
- Manfred
- Foren-Administrator
- Beiträge: 21216
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: offene SQL Results
ok, das wäre das gewesen, worauf ich hier als Antwort gehofft habe. Aber leider fehlt mir da noch Wissen, wie man sowas angeht.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2829
- Registriert: Fr, 08. Feb 2008 21:29
- Hat sich bedankt: 97 Mal
- Danksagung erhalten: 13 Mal
Re: offene SQL Results
Hallo, Manfred -
dann schaue Dir mal die Methode :atEnd() sowie die iVar :atEnd der Thread()-Klasse an, das ist wahrscheinlich der Ansatzpunkt, den Du suchst.
dann schaue Dir mal die Methode :atEnd() sowie die iVar :atEnd der Thread()-Klasse an, das ist wahrscheinlich der Ansatzpunkt, den Du suchst.
Liebe Grüsse aus der Eifel,
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9387
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 362 Mal
- Kontaktdaten:
Re: offene SQL Results
Nein, es ist der :onError-Slot. Einfach da das Schließen der Connections (u.a.) reinpacken.
Herzlich,
Tom
Tom
- HaPe
- 1000 working lines a day
- Beiträge: 996
- Registriert: So, 15. Nov 2015 17:44
- Wohnort: 71665 Vaihingen-Enz
- Hat sich bedankt: 17 Mal
- Danksagung erhalten: 15 Mal
Re: offene SQL Results
Hallo Tom !
Sonst hätte ich das dazugeschrieben, weil ich try/catch in Xbase++ nicht gefunden habe.
Mir war nicht klar, das in Xbase++ das try/catch aus C/C++/C#/VFP/Java/Python/Matlab/PowerShell/... mittels Sequenz umgesetzt wird.HaPe, Manfred spricht von einem Fehler, also einem Laufzeitfehler.
... rettet die gesamte Routine, in der dieser Fehler geschehen kann, in eine Sequenz, und ergänzt das Break() im ersetzten Fehlerobjekt durch das Schließen der Verbindung.
Sonst hätte ich das dazugeschrieben, weil ich try/catch in Xbase++ nicht gefunden habe.
--
Hans-Peter
Hans-Peter
- Manfred
- Foren-Administrator
- Beiträge: 21216
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: offene SQL Results
aber das result wird doch in eine Local var geschrieben. Wie komme ich dann da dran?. Und Connection wäre doch die komplette Verbindung des webServers zum SQl Server? Die will ich ja nicht schließen.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9387
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 362 Mal
- Kontaktdaten:
Re: offene SQL Results
Ich arbeite mit dem ADS nicht auf diese Weise (das mache ich mit Postgre), deshalb kann ich Dir nicht genau sagen, was zu tun wäre, um die Sperrung aufzuheben, aber die Strategie wäre halt, im Fehlerfall entsprechend zu reagieren. Tatsächlich nutzen wir bei aktiver ADSDBE im Xb2.Net-Server auch eine eigene Session je Verbindung von außen (also im jeweiligen Serverthread findet ein Connect statt), die bei Beendigung und/oder im Fehlerfall geschlossen wird (während wir in der Hauptanwendung nur eine Session für alles nutzen, die an alle Threads per SetDefault sozusagen vererbt wird).
Herzlich,
Tom
Tom
- Marcus Herz
- 1000 working lines a day
- Beiträge: 860
- Registriert: Mo, 16. Jan 2006 8:13
- Wohnort: Allgäu
- Hat sich bedankt: 39 Mal
- Danksagung erhalten: 197 Mal
- Kontaktdaten:
Re: offene SQL Results
Hallo Manfred
Da du das wahrscheinlich mit AdsClass machst, du musst die Connection der SQL Verbindung schliessen, nicht die Connection zum Server als solche:
Da du das wahrscheinlich mit AdsClass machst, du musst die Connection der SQL Verbindung schliessen, nicht die Connection zum Server als solche:
Code: Alles auswählen
// mit Dictionary
oResultset := addDic:OpenSqlTable("select * from kunde" )
if isObject(oResultset)
begin sequence
// verarbeitung
end sequence
oResultset:close() // gibt ADS Server und Client Speicher frei !!
endif
Gruß Marcus
Den Kopf in den Sand zu stecken verbessert die Welt auch nicht.
Den Kopf in den Sand zu stecken verbessert die Welt auch nicht.
- Marcus Herz
- 1000 working lines a day
- Beiträge: 860
- Registriert: Mo, 16. Jan 2006 8:13
- Wohnort: Allgäu
- Hat sich bedankt: 39 Mal
- Danksagung erhalten: 197 Mal
- Kontaktdaten:
Re: offene SQL Results
Tom schrieb:
Unbedingt.auch eine eigene Session je Verbindung
Gruß Marcus
Den Kopf in den Sand zu stecken verbessert die Welt auch nicht.
Den Kopf in den Sand zu stecken verbessert die Welt auch nicht.
- Manfred
- Foren-Administrator
- Beiträge: 21216
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: offene SQL Results
Hi Marcus
das ist m.E. nicht das Problem. Das mache ich ja. es geht darum wenn ich nicht an das :close komme, sondern vorher der Client "stirbt"
das ist m.E. nicht das Problem. Das mache ich ja. es geht darum wenn ich nicht an das :close komme, sondern vorher der Client "stirbt"
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Marcus Herz
- 1000 working lines a day
- Beiträge: 860
- Registriert: Mo, 16. Jan 2006 8:13
- Wohnort: Allgäu
- Hat sich bedankt: 39 Mal
- Danksagung erhalten: 197 Mal
- Kontaktdaten:
Re: offene SQL Results
Wie kann der Client sterben, bevor du deine Verarbeitung beendest hat
Ich mache für jeden Request die Datenbanken auf und schliesse alles wieder bevor ich die HTML Seite zurückschicke.
Ich mache für jeden Request die Datenbanken auf und schliesse alles wieder bevor ich die HTML Seite zurückschicke.
Gruß Marcus
Den Kopf in den Sand zu stecken verbessert die Welt auch nicht.
Den Kopf in den Sand zu stecken verbessert die Welt auch nicht.
- Manfred
- Foren-Administrator
- Beiträge: 21216
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: offene SQL Results
ganz einfach, irgendwo im Ablauf des Codes ist ein unerkannter Fehler. Dann wirft der Webserver den Client raus und er steht im Loginbildschirm, wie schon oben erklärt.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9387
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 362 Mal
- Kontaktdaten:
Re: offene SQL Results
Das sind jetzt aber zwei Dinge gleichzeitig.
Es gibt einen Fehler und der Server reagiert darauf mit dem Anmeldedialog (weil der vermutlich bei "onGet" oder als "IndexFile" angegeben ist - und ein verkehrter Request reinkommt). Du kannst aber auch im Fehlerfall dem Benutzer irgendwas anzeigen ("onError" kann z.B. auch HTML senden). Das ist aber nicht die Frage, die Du oben gestellt hast. Da hast Du nach einem verbliebenen Lock gefragt, nach einer noch offenen Session.
Es gibt einen Fehler und der Server reagiert darauf mit dem Anmeldedialog (weil der vermutlich bei "onGet" oder als "IndexFile" angegeben ist - und ein verkehrter Request reinkommt). Du kannst aber auch im Fehlerfall dem Benutzer irgendwas anzeigen ("onError" kann z.B. auch HTML senden). Das ist aber nicht die Frage, die Du oben gestellt hast. Da hast Du nach einem verbliebenen Lock gefragt, nach einer noch offenen Session.
Herzlich,
Tom
Tom
- AUGE_OHR
- Marvin
- Beiträge: 12911
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: offene SQL Results
hi HaPe,
wie wäre das
Code: Alles auswählen
#xcommand TRY => BEGIN SEQUENCE
#xcommand CATCH [<oErr>] => RECOVER [USING <oErr>]
gruss by OHR
Jimmy
Jimmy