Informix via ODBC Fehler "CURSOR not on SELECT statement"
Verfasst: Freitag 2. Dezember 2011, 09:57
Guten Morgen Forum,
ich habe hier ein kleines Problem nach einem Update.
Ich verwende einige kleine Scripte um Daten aus einer alten Informix-Datenbank abzufragen und entsprechend auszuwerten. Das hat in der Vergangenheit problemlos funktioniert.
Die Verbindung habe ich bisher immer (weil es so schön einfach war) von einem Windows-PC aus hergestellt bei dem der Zugang zur Informix-Datenbank als ODBC-Datenquelle in Windows angelegt habe.
Der entsprechende ODBC-Treiber kommt bei der Software iconnect mit die von IBM entsprechend zur Verfügung gestellt wird.
Zur Kommunikation mit der ODBC-Schnittstelle aus Python heraus vewende ich PyODBC.
Wie gesagt, unter alten Maschinen auf denen Windows 2000 lief hat das ganze wunderbar funktioniert. Auf neueren Windows 7 Maschinen (da wurde auch ein entsprechend neuer ODBC-Treiber installiert) kommt es zu bei identischem Code zu folgenden Fehler:
Das Problem taucht immer dann auf wenn ich mit SELECT [...] INTO TEMP in eine temporäre Tabelle schreibe. Das scheint etwas damit zu tun zu haben, dass solch eine Selektion keinerlei Datensätze zurück liefert (logisch, die landen ja in der temporären Tabelle). Nur... öhm... was muss ich tun, damit das trotzdem geht?
Die (Informix-)Dokumentation sagt, dass man dann keinen Cursor verwenden darf:
Von hier:
-363 CURSOR not on SELECT statement.
The cursor named in this statement (probably an OPEN) has been
associated with a prepared statement that is not a SELECT statement.
Review the program logic, especially the DECLARE for the cursor, the
statement id specified in it, and the PREPARE that set up that
statement. If you intended to use a cursor with an INSERT statement,
you can only do that when the INSERT statement is written as part of
the DECLARE statement. If you intended to execute an SQL statement, do
that directly with the EXECUTE statement, not indirectly through a
cursor.
This error is also returned when you attempt to associate a cursor with
a SELECTINTO TEMP statement. Because of the INTO TEMP clause, the
SELECT statement can return no rows and so cannot be used with a
cursor.
Für Hilfe wäre ich sehr dankbar!
Gruß
Sebastian
ich habe hier ein kleines Problem nach einem Update.
Ich verwende einige kleine Scripte um Daten aus einer alten Informix-Datenbank abzufragen und entsprechend auszuwerten. Das hat in der Vergangenheit problemlos funktioniert.
Die Verbindung habe ich bisher immer (weil es so schön einfach war) von einem Windows-PC aus hergestellt bei dem der Zugang zur Informix-Datenbank als ODBC-Datenquelle in Windows angelegt habe.
Der entsprechende ODBC-Treiber kommt bei der Software iconnect mit die von IBM entsprechend zur Verfügung gestellt wird.
Zur Kommunikation mit der ODBC-Schnittstelle aus Python heraus vewende ich PyODBC.
Wie gesagt, unter alten Maschinen auf denen Windows 2000 lief hat das ganze wunderbar funktioniert. Auf neueren Windows 7 Maschinen (da wurde auch ein entsprechend neuer ODBC-Treiber installiert) kommt es zu bei identischem Code zu folgenden Fehler:
Code: Alles auswählen
Error: ('HY000', '[HY000] [Informix][Informix ODBC Driver][Informix]CURSOR not on SELECT statement. (-363) (SQLExecDirectW)')
Die (Informix-)Dokumentation sagt, dass man dann keinen Cursor verwenden darf:
Von hier:
-363 CURSOR not on SELECT statement.
The cursor named in this statement (probably an OPEN) has been
associated with a prepared statement that is not a SELECT statement.
Review the program logic, especially the DECLARE for the cursor, the
statement id specified in it, and the PREPARE that set up that
statement. If you intended to use a cursor with an INSERT statement,
you can only do that when the INSERT statement is written as part of
the DECLARE statement. If you intended to execute an SQL statement, do
that directly with the EXECUTE statement, not indirectly through a
cursor.
This error is also returned when you attempt to associate a cursor with
a SELECTINTO TEMP statement. Because of the INTO TEMP clause, the
SELECT statement can return no rows and so cannot be used with a
cursor.
Für Hilfe wäre ich sehr dankbar!
Gruß
Sebastian