![]() |
Datenbank: Firebird • Version: 1.5 • Zugriff über: ZEOS
-502: Declared cursor already exists
Ich bekomme neuerdings bei manchen Abfragen in nicht nachvollziehbarem Zyklus die Fehlermeldung "-502: Declared cursor already exists".
Ich habe eine permanent offene TZConnection und mehrere damit verbundene DataSets (TZQuery, TZTable usw.). Wenn ich ein neues Query absetze und ZEOS praktisch ein SELECT auf Firebird ausführt, erhalte ich manchmal diese Meldung. Woher kommt das und wie stellt man das ab? |
Re: -502: Declared cursor already exists
Könnte daran liegen, das es pro Connection genau eine Transaktion gibt.
|
Re: -502: Declared cursor already exists
Na sowas. Ich arbeite schon so lange mit ZEOS aber das Problem hatte ich bisher nicht. Kann man da irgendwas konfigurieren oder muß ich für jede ZTable, ZQuery usw. eine eigene ZConnection instantiieren und kann man überhaupt mehrere ZConnections gleichzeitig mit dem Embedded Server verbinden?
|
Re: -502: Declared cursor already exists
Zitat:
|
Re: -502: Declared cursor already exists
Ist ja prickelnd. Und nun?
|
Re: -502: Declared cursor already exists
Am besten ne andere Zugriffsbibliothek verwenden.
|
Re: -502: Declared cursor already exists
Keine Chance, dafür ist das Projekt schon zu weit fortgeschritten. Außerdem denke ich liegt das Problem in meinem Code (denn früher gabs besagte Fehlermeldung nicht obwohl es die ganze Zeit mehrere Queries an einer Connection gab). Mehrere parallele Abfragen sollten doch für einen SQL-Server kein Problem sein.
|
Re: -502: Declared cursor already exists
Hallo,
packe deine Queries in ZConnection.StartTransaction / Commit, so dass sie immer unter einer einzigen Transaktion laufen. Hast du multithreading oder mdi ? Dann bleibt dir nur der Weg über mehrere ZConnections. Zeos war als Ersatz der Bde gedacht (afaik) Mehr als ein Transaktion pro Connection geht nicht. #Edit:# es sieht so aus (google), als ob das ein Bug ein Zeos ist Heiko |
Re: -502: Declared cursor already exists
Nein ich habe nur eine Single-Threading-Anwendung (von den Indy-Threads mal abgesehen). Ich hatte auch nach dem Problem gegoogled aber nur spanische und polnische Forenposts gefunden.
Das mit den ZTransaktions, kannst du mir das mal genauer erklären bzw. gibts im Web ne gute Erklärung? |
Re: -502: Declared cursor already exists
Hallo,
mein Fehler, bei ZEOS ist es ja wie bei der Bde, die Transaktion und die ZConnection sind gekoppelt:
Delphi-Quellcode:
Heiko
ZConnection.StartTransaktion;
try Query_1.bla Query_2.bla finally ZConnection.Commit; end; |
Re: -502: Declared cursor already exists
Ich denke so langsam kapiere ich das Problem. Ich habe da ein datensensitives DBGrid in dessen OnChange-Event erzeuge ich ein zusätzliches Query auf der selben Connection, der selben TZQuery und der selben Tabelle. Wahrscheinlich passieren die internen Transaktionen vom Grid und die im OnChange-Event so schnell nacheinander daß der Laden gelegentlich durcheinander kommt. Einfach ein Leichtsinnsfehler. Ich werds jetzt mal umstricken und hoffe daß das Problem dann aus der Welt ist.
|
Re: -502: Declared cursor already exists
Problem gelöst!
Ich habe noch etwas gesucht und ein ähnliches Problem in einer Newsgroup gefunden: ![]() Dort handelte es sich zwar um Interbase+IBX aber das Workaround war sehr interessant: Einfach vor dem Query ein Randomize absetzen. Ich habs probiert und das Problem war vom Tisch. Scheinbar ist das ein uralter Bug den Firebird schon aus IB-Zeiten mit sich rumschleppt bzw. bei FB der selbe Fehler gemacht wurde. Sonst würde der Workaround nicht bei beiden funktionieren. Aber auf so eine Lösung muß man erstmal kommen ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz