AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken SQL - Invalid cursor declaration
Thema durchsuchen
Ansicht
Themen-Optionen

SQL - Invalid cursor declaration

Ein Thema von stalkingwolf · begonnen am 5. Feb 2019 · letzter Beitrag vom 7. Feb 2019
Antwort Antwort
stalkingwolf

Registriert seit: 6. Mai 2011
518 Beiträge
 
#1

SQL - Invalid cursor declaration

  Alt 5. Feb 2019, 07:33
Datenbank: Firebird • Version: 2.5 • Zugriff über: TIBQuery
der angehängte Fehler bringt mich noch um den Verstand.

Es handelt sich dabei um ein Delphi XE4 Programm und ab und zu ( nicht immer und nicht reproduzierbar ) tritt dieser Fehler auf.
Ich hab das Programm mit Debugs, Protokollen und Exceptions zugepflastert, aber ich kann nicht ermitteln bei was der Fehler auftritt.

Vor allem schaut das nach einem Speicherproblem aus. Der Müll am Ende des Cursornamens weist darauf hin.

Wir hatten das Problem damals schon in einer etwas anderen Form unter Delphi 6 Programmen.
Damals haben wir TIBQuery&Co geändert und den Namen des Cursors selber vergeben. Damit war das Problem aus der Welt.
Die Namen waren damals Random und mit einer sehr kurzen Nummer vergeben, diesen hatten wir verlängert.
Nachdem wir die Programm auf XE4 portiert haben, tritt das Problem erneut auf. Und diesmal können wir TIBQuery&Co nicht einfach ändern, weil Delphi dann beim kompilieren anmerkt das verschiedene DCUs mit unterschiedlichen Datum kompiliert sind.

Ich würde gern den Fehler verstehen, damit ich weiß wobei so etwas auftreten könnte.
Miniaturansicht angehängter Grafiken
dynamic_sql_error.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.350 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: SQL - Invalid cursor declaration

  Alt 5. Feb 2019, 07:52
So wie es aussieht, haben die IBX einen Fehler:
http://tracker.firebirdsql.org/browse/CORE-4559.

Keine leichte Aufgabe...

Frank
Frank Reim
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: SQL - Invalid cursor declaration

  Alt 5. Feb 2019, 08:17
Hallo,
Zitat:
Keine leichte Aufgabe...
Wieso, die Lösung (IBX patchen) steht doch dort?
Ist nur sehr mühsam, das bei jeder Methode (Insert/Update/Delete) zu machen.

Wir hatten uns damals eine eigene TMyQuery abgeleitet und die entsprechenden Methoden überscheiben.
Und nein, die hieß nicht wirklich TMyQuery.

Der Rest ist dann Suchen/Ersetzen.
Heiko
  Mit Zitat antworten Zitat
stalkingwolf

Registriert seit: 6. Mai 2011
518 Beiträge
 
#4

AW: SQL - Invalid cursor declaration

  Alt 7. Feb 2019, 07:35
Moin,

danke für die Info.
Google wollte/will mir die Seite bei der Suche irgendwie nicht ausspucken.

dann schau ich mir das mal genauer an.

Gruß
Sven
  Mit Zitat antworten Zitat
stalkingwolf

Registriert seit: 6. Mai 2011
518 Beiträge
 
#5

AW: SQL - Invalid cursor declaration

  Alt 7. Feb 2019, 09:40
Ich hoffe ich versteh das korrekt.

Wenn ich TIBSQL nutzen, dann füge ich den Code ein und nutze dann TMyIBSQL anstatt TIBSQL in meiner unit.
Da der FCursor Name im .create von TIBSQL generiert wird, sollte es reichen nach dem .create PatchIBSQLCursor aufzurufen.

also
Code:
q := TMyIBSQL.Create(nil);
q.database := dm.ibdb;
q.PatchIBSQLCursor(q);
.
.
.
Ausgabe in PatchIBSQLCursor vom Cursornamen schaut gut aus.

Korrekt verstanden?

Geändert von stalkingwolf ( 7. Feb 2019 um 09:43 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#6

AW: SQL - Invalid cursor declaration

  Alt 7. Feb 2019, 10:02
In neueren Versionen (hier 10.2.3) wird der Cursorname überhaupt nicht mehr gesetzt, dort entfällt das Problem, da isc_dsql_set_cursor_name nicht aufgerufen wird.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: SQL - Invalid cursor declaration

  Alt 7. Feb 2019, 10:17
Hallo,
nein, nicht korrekt verstanden.
Rufe die Patch-Methode im Constructor deiner abgeleiteten Klasse auf.

Somit ist der Patch immer automatisch gesetzt.

Delphi-Quellcode:
constructor TMyIBSQL.Create ...
begin
  inherited ....

  PatchIBSQLCursor(Self);
end;
Heiko

Geändert von hoika ( 7. Feb 2019 um 10:20 Uhr)
  Mit Zitat antworten Zitat
stalkingwolf

Registriert seit: 6. Mai 2011
518 Beiträge
 
#8

AW: SQL - Invalid cursor declaration

  Alt 7. Feb 2019, 11:00
Ok ja. Das spart natürlich Arbeit.

In neueren Versionen (hier 10.2.3) wird der Cursorname überhaupt nicht mehr gesetzt, dort entfällt das Problem, da isc_dsql_set_cursor_name nicht aufgerufen wird.
In 10.1 wird es noch im .prepare von TIBSQL aufgerufen.
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#9

AW: SQL - Invalid cursor declaration

  Alt 7. Feb 2019, 11:27
Ein Cursor wird bei IB/FB nur für einen wahrscheinlich seltenen Anwendungsfall benötigt. Nämlich nur dann, wenn man positioned Updates durchführen möchte, also Spalten im Lesepuffer beim Lesen sperren möchte.

Select ... for update of ... with lock

Zitat von API-Doc:
A cursor is a one-way pointer into the ordered set of rows retrieved by a statement. A
cursor is only needed to process positioned UPDATEand DELETEstatements made against
the rows retrieved by isc_dsql_fetch() for SELECT statements that specify an optional FOR
UPDATE OF clause.
Understanding the with lock clause
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:45 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