Da ich selbst lange Zeit ein zunächst nicht genau
auffindbares Problem, welches nur sporadisch auftrat,
gehabt habe, an welchem ich manchmal fast verzweifelt bin,
möchte ich dieses sowie seine Umgehung hier kurz schildern.
Problem:
************
Sporadisch auftretende Programmabrüche mit SIGSEGV Exception
im Debugger, manchmal stürzt Debugger auch ab (keine Fortsetzung
des Programmverlaufs möglich), manchmal ist auch die Lazarus
(Codetyphon)-IDE mitabgestürzt.
Der Fehler trat auf bei einer Zuweisung von Daten zu einem Parameter
einer TZQuery von den ZEOS-Komponenten mittels ParamByName.
Beispiel:
Sample_Q.Params.ParamByName ('F_VORNAME').AsString := 'Hans';
Es spielte keine Rolle, ob das Active-Property der TZQuery TRUE oder
FALSE war, hier kam es sporadisch zu Exceptions. Leider kam es
nicht immer zu Exceptions, wodurch ich den Fehler erst tagelang
woanders suchte und nach langer Zeit, teils im Assembler,
das Problem hier feststellen konnte.
Offensichtlich haben die ZEOS-Komponenten Schwierigkeiten mit den
Strings von FPC.
Lösung:
************
Das Problem konnte umgangen werden, wenn der Standardwert des
Datentypes ftUnknown des Parameters F_VORNAME gezielt auf
den Wert ftString gesetzt wurde. Entsprechend wurden die Datentypen
bei Zuweisungen von ganzen Zahlen auf ftInteger oder ftLargeInt (bei 64 Bit)
gesetzt.
Da ich mehr als zehn Jahre niemals Datentypen unter Delphi per Hand
bei einer Zuweisung ParamByName zu Datenbankkomponenten setzen
mußte, da Varianten außer bezüglich der Geschwindigkeit ansonsten
problemlos liefen, ist dieses Problem für mich sehr subtil gewesen.
Falls also jemand bei Datenbankzugriffen mit ZEOS-Komponenten
ebenfalls Exceptiosn bekommt, sollte man zunächst versuchen,
alle Zuweisungen durch Setzten von explizieten Typen zu spezifizieren.
Vielleicht hat jemand ja ähnliche Probleme und kommt damit weiter...
Das Problem werde ich auch an die ZEOSLIB- und CodetyphonEntwickler
weiterleiten.
Zuletzt noch meine Versionen:
- ZEOS 7.1.0-alfa
- Codetyphon 4.4 - 64 Bit
- Kubuntu 13.04 - 64 Bit
- Datenbank POSTGRESQL 9.1.8
Gruß
ATILIUS
Zeos Komponenten, ParamByName, SIGSEGV Exception
-
- Beiträge: 57
- Registriert: Mi 20. Feb 2013, 10:06
- OS, Lazarus, FPC: KUBUNTU 14.04 (fpc 3.3.1) / Raspbian (fpc 3.3.1)
- CPU-Target: x86, x64, ARM
- Kontaktdaten:
-
- Beiträge: 93
- Registriert: Di 17. Apr 2012, 22:41
Re: Zeos Komponenten, ParamByName, SIGSEGV Exception
Fall geklärt:
http://zeos.firmos.at/viewtopic.php?p=17656#17656
An alle, die CodeTyphon 4.4 und *Nix Systeme verwenden: Wir haben ein Problem in der Funtion AnsiStrComp gefunden. Warum auch immer, unter Ubuntu (und anderen *nix? OS's) knallt es, wenn einer der PAnsiChars nicht assigned ist. Bitte die aktualle 7.1 vom SVN holen und im CodeTyphon Package pl_ZeosDBO überschreiben.
Grüße, Michael
http://zeos.firmos.at/viewtopic.php?p=17656#17656
An alle, die CodeTyphon 4.4 und *Nix Systeme verwenden: Wir haben ein Problem in der Funtion AnsiStrComp gefunden. Warum auch immer, unter Ubuntu (und anderen *nix? OS's) knallt es, wenn einer der PAnsiChars nicht assigned ist. Bitte die aktualle 7.1 vom SVN holen und im CodeTyphon Package pl_ZeosDBO überschreiben.
Grüße, Michael
ZeosDevTeam
-
- Beiträge: 57
- Registriert: Mi 20. Feb 2013, 10:06
- OS, Lazarus, FPC: KUBUNTU 14.04 (fpc 3.3.1) / Raspbian (fpc 3.3.1)
- CPU-Target: x86, x64, ARM
- Kontaktdaten:
Re: Zeos Komponenten, ParamByName, SIGSEGV Exception
Noch ein Nachtrag:
Durch die neue Zeosversion ist das Problem bei ParamByName-Zuweisungen zwar seltener geworden, jedoch nicht völlig verschwunden.
Außerdem treten Exceptions auch bei ParamByName-Zuweisungen von anderen Datentypen wie Int64 und TDate sporadisch auf.
In allen Fällen kann man sich behelfen, indem man den Paramtypen von ftUnknown auf den jeweiligen ftDate, ftLargeInt... setzt.
Gruß,
ATILIUS
Durch die neue Zeosversion ist das Problem bei ParamByName-Zuweisungen zwar seltener geworden, jedoch nicht völlig verschwunden.
Außerdem treten Exceptions auch bei ParamByName-Zuweisungen von anderen Datentypen wie Int64 und TDate sporadisch auf.
In allen Fällen kann man sich behelfen, indem man den Paramtypen von ftUnknown auf den jeweiligen ftDate, ftLargeInt... setzt.
Gruß,
ATILIUS
-
- Beiträge: 93
- Registriert: Di 17. Apr 2012, 22:41
Re: Zeos Komponenten, ParamByName, SIGSEGV Exception
Hallo Juergen,
Problem bestätigt. Der thread auf den ich verwiesen hatte, behandelte Fields Änderungen. Hier reden wir von Parametern. ABER ich habe das mal mit allen von mir bearbeiten 7ner versionen getestet und das Verhalten ist das Gleiche. Es knallt zufällig hier und dort. Ein zweiter testrun und es knallt an anderer Stelle. Es würde mich sehr wundern, wenn wir hier von einem Zeos problem reden.
Daher meine Frage an alle:
Nutzt hier jemand XUbuntu und FPC2.7 vom trunk? Kann das jemand bestätigen oder ist nur die von CodeTyphon 4.4 verwendete FPC revision buggy?
Gruß Michael
Problem bestätigt. Der thread auf den ich verwiesen hatte, behandelte Fields Änderungen. Hier reden wir von Parametern. ABER ich habe das mal mit allen von mir bearbeiten 7ner versionen getestet und das Verhalten ist das Gleiche. Es knallt zufällig hier und dort. Ein zweiter testrun und es knallt an anderer Stelle. Es würde mich sehr wundern, wenn wir hier von einem Zeos problem reden.
Daher meine Frage an alle:
Nutzt hier jemand XUbuntu und FPC2.7 vom trunk? Kann das jemand bestätigen oder ist nur die von CodeTyphon 4.4 verwendete FPC revision buggy?
Gruß Michael
ZeosDevTeam
-
- Beiträge: 93
- Registriert: Di 17. Apr 2012, 22:41
Re: Zeos Komponenten, ParamByName, SIGSEGV Exception
Hallo Juergen,
ich nochmal. Habe gerade eine FPC Bugtracker zu diesem Theama gefunden: http://bugs.freepascal.org/view.php?id=24728
Da ist zwar 2.6.3 gemeint, aber man sieht, das das Problem auch auf dem älteren Trunk existierte. -> Kein Zeos-Problem
Gruß Michael
Edit: Schau dir mal das diff-file http://bugs.freepascal.org/file_downloa ... 4&type=bug an, da siehst du ganz deutlich auch deinen vorgeschlagen Weg, das Problem zu umgehen.
ich nochmal. Habe gerade eine FPC Bugtracker zu diesem Theama gefunden: http://bugs.freepascal.org/view.php?id=24728
Da ist zwar 2.6.3 gemeint, aber man sieht, das das Problem auch auf dem älteren Trunk existierte. -> Kein Zeos-Problem
Gruß Michael
Edit: Schau dir mal das diff-file http://bugs.freepascal.org/file_downloa ... 4&type=bug an, da siehst du ganz deutlich auch deinen vorgeschlagen Weg, das Problem zu umgehen.
ZeosDevTeam
-
- Beiträge: 57
- Registriert: Mi 20. Feb 2013, 10:06
- OS, Lazarus, FPC: KUBUNTU 14.04 (fpc 3.3.1) / Raspbian (fpc 3.3.1)
- CPU-Target: x86, x64, ARM
- Kontaktdaten:
Re: Zeos Komponenten, ParamByName, SIGSEGV Exception
Hallo Michael!
Vielen Dank für den Hinweis, es handelt sich also um ein reines fpc-Problem.
In einer neueren fpc-Version sollte es damit dann gelöst sein.
Grüße,
Jürgen
Vielen Dank für den Hinweis, es handelt sich also um ein reines fpc-Problem.
In einer neueren fpc-Version sollte es damit dann gelöst sein.
Grüße,
Jürgen