Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   ZQuery.Open und Sigsev (https://www.delphipraxis.net/181638-zquery-open-und-sigsev.html)

Monday 30. Aug 2014 22:30

Datenbank: SQLite • Version: 3.8.0 • Zugriff über: Zeos 7.1

ZQuery.Open und Sigsev
 
Hallo,

ich habe wieder meinen lieblingsfehler der sigsev Reihe ;)

Ich habe eine Anwendung (wird Computerspiel) die mit MySQL arbeitet (über Zeos). Nun habe ich das ganze auf SQLite umgestellen, DB, SQL Befehle usw. Bis hier her funktioniert auch alles so wie es soll.

Nun wenn ich mein Programm starte, drücke ich auf einen Button und er schreibt und liest in der SQLite. Alles funktioniert.
Wenn ich nun ein weiteres mal auf den gleichen Button klicke, erhalte ich einen Sigsev fehler. Obwohl exakt die gleichen Schritte ausgeführt worden sind wie zuvor. Mit MySQL zuvor hat alles wunderbar geklappt.

Nun habe ich ein bisschen geforscht in welcher Zeile der Sigsev ausgelöst worden ist, und zwar hier:

Code:
    ZQuery2.Close; ZQuery2.SQL.Clear;
    if db_version = 'sqlite' then begin ZQuery2.SQL.Text := 'SELECT count(fen) as max FROM verlauf where tief = :i;'; end;
    ZQuery2.ParamByName('i').AsInteger := tief2;
    ZQuery2.Open; // <- Hier kommt der Sigsev
Für mich eher unlogisch das er ausgerechnet in diesen Abschnitt auftritt. Beim ersten Durchlauf bzw. ersten Klick hat ja noch alles geklappt. Beim zweiten auf einmal nicht mehr - warum?

An den Select kann es nicht liegen, die Variable tief2 ist auch ein gültiger Wert. Sigsev deutet ja auf eine Speicherverletzung hin.
Also ist meine Vermutung das es irgendwie an der Datenbank selbst liegt, das dort zuviel Speicher verbraucht ist, irgendwas zuviel ist,... aber das übersteigt meine Kenntnisse. Muss man da irgendwas freigeben, unlocken o.ä.??
Das würde zumindest erklären, warum es erst funktioniert, und dann nicht mehr. Zumal ja vorher schon ein paar Selects und inserts gemacht worden sind. Vermute ich, dass es an dieser Stelle "Zuviel" geworden ist.

Das ganze findet innerhalb einer transaction statt. Aber auch wenn ich die transaction auskommentiere, kommt der Fehler.

Hat jemand noch Ideen oder Lösungsvorschläge??

Lg,
Monday

DeddyH 31. Aug 2014 09:43

AW: ZQuery.Open und Sigsev
 
Vielleicht stimmt die Bedingung nicht, dann wäre der Parameter nicht definiert.Was passiert denn, wenn Du das end hinter das Open setzt?

Monday 31. Aug 2014 14:01

AW: ZQuery.Open und Sigsev
 
Hallo,

vielen Dank für deine Antwort. Dein Tipp führte zu keiner Veränderung.

Ich denke, ich habe den Fehler gefunden.

Obwohl der Sigsev an den ZQuery Bereich aufgetreten ist, war der Auslöser an einer ganz anderen Stelle zuvor. Und zwar habe ich an eine if Abfrage über einen Array Bereich gemacht, was dann den Sigsev ausgelöst hat. Nun scheint es zu funktionieren.

Warum dieser Fehler erst beim zweiten Durchlauf aufgetreten ist, und offenbar gar nicht (oder selten?) als die Anwendung mit MySQL lief, finde ich schon komisch. Ich hätte das anders erwartet. Vielleicht war es einfach nur Glück, weil der Speicherbereich in dem Moment einfach "gepasst" hat.

Trotzdem Danke für die Hilfe

Lg,
Monday


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:13 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