Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   IBSQL und Firebird (https://www.delphipraxis.net/181810-ibsql-und-firebird.html)

hanspeter 10. Sep 2014 12:26

Datenbank: Firebird • Version: 2.5 • Zugriff über: IbExpress

IBSQL und Firebird
 
Hallo,

ich verwende XE2 , Firebird 2.5 und greife auf diese Datenbank über "InterBase Express core components" k zu.

Der Konstruct:
Delphi-Quellcode:
IBSQL := TibSQL.Create;
IBSQL.Database := Database
IBSQL.Transaction := readTransactin
IBSQL.Text := Select * from Daten where id=123;
IBSQL.Open;

...

IBSQL.Close;
IbSQL.Free;
Die Abfrage funktioniert korrekt.
Bei IBSQL.free
stürzt das Programm tief im System in "class function TMonitor.GetFieldAddress(AObject: TObject): PPMonitor; ab.
Anweisung Result := PPMonitor(PByte(AObject) + AObject.InstanceSize - hfFieldSize + hfMonitorOffset);
Hier scheint AObject.InstanceSize einen Zugriffsfehler zu bringen.
Das passiert aber nur bei manchen Abfragen.
Hat wer eine Idee was dass sein könnte?

Gruß Peter

Lemmy 10. Sep 2014 13:09

AW: IBSQL und Firebird
 
ich behaupte einfach mal, dass die Ursache im Unterschied zwischen Firebird und Interbase zu finden ist, da die IBX offiziell nur Interbase unterstützen....

mquadrat 10. Sep 2014 14:25

AW: IBSQL und Firebird
 
Unsere Legacy-Anwendung greift auch über IBX auf Firebird zu und es kommt kein solcher Fehler. Daran dürfte es IHMO also nicht liegen.

hanspeter 12. Sep 2014 08:41

AW: IBSQL und Firebird
 
So jetzt habe ich den Fehler gefunden ist wohl eher Delphi zuzuordnen.

In einer Klasse wird ein indiziertes Property verwendet.
Vor der Abfrage wird der Index eines Eintrags errechnet.
Da der Index größer Feldlänge war, kam es zu einer Speicherschutzverletzung.

Ich setze einen Break direkt auf die Anweisung, welche die Speicherschutzverletzung auslöst.
Hat der Debugger diese Stelle erreicht, drücke ich F7.
Der Debugger arbeitet nur diesen einen Bfehl ab und
und hält mit einer Fehlemeldung tief in der Systembibliothek von Delphi an. (IBX -> vcl.System).
Es ist praktisch unmöglich von dem Fehlerhalt auf den tatsächlichen Fehlerort zu schließen.

Gruß
Peter

Dejan Vu 12. Sep 2014 11:37

AW: IBSQL und Firebird
 
Magst Du den Quelltext, der den Fehler auslöst ("Vor der Abfrage wird der Index eines Eintrags errechnet.") posten oder Dateiname und Zeile angeben, damit man das nachvollziehen kann?

hstreicher 12. Sep 2014 11:38

AW: IBSQL und Firebird
 
Was für ein Zeichensatz ?

IB und FB verwenden für UTF-8 verschiedene Kennungen,
das kann bei den Buffergrößen zu falschen Berechnungen/Overflows führen

hier ein Fix , im unteren viertel der Seite

http://translate.google.de/translate...20%26bih%3D965

mfg Hannes


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz