Resultset.getInt() => Ungültiger Cursorstatus

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

StyloMilo
Beiträge: 2
Registriert: Fr, 08.06.2007 00:27

Resultset.getInt() => Ungültiger Cursorstatus

Beitrag von StyloMilo »

Hallo zusammen,

ich bin grad dabei erste Schritte in Base und OOo Basic zu unternehmen. Klappt soweit auch ganz gut, allerdings stoße ich auf folgenden Fehler. Ich möchte den Eintrag mit dem höchsten Wert im Feld 'PersNr' (Integer) auslesen, um dem nächsten Eintrag eben die nächsthöhere Nummer zu geben. Alles was kommt ist allerdings die folgende Fehlermeldung:

Type: com.sun.star.sdbc.SQLException
Message: [Microsoft][ODBC Driver Manager] Ungültiger Cursorstatus.

Der Code, der den Fehler verursacht ist folgender, genauer gesagt ist der Übeltäter die Zeile mit '.getInt(sIndex)':

Code: Alles auswählen

sSQL = "SELECT MAX(PersNr) AS PNr FROM mitarbeiter"
oResultset = oStatement.executeQuery(sSQL)
if not isNull(oResultset) then
   sIndex = oResultset.findcolumn("PNr")
	sPersNr = oResultset.getInt(sIndex)
	sPersNr = sPersNr+1
end if
Wenn ich mir die Spaltenanzahl und Index ausgeben lasse, dann ist das beides '1', darum versteh ich die Meldung nicht ganz. Konnte leider weder über Google noch die Forumssuche was finden, darum hoffe ich, dass Ihr mir helfen könnt. Vielen Dank schon mal im Voraus.

Gruß
StyloMilo
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Resultset.getInt() => Ungültiger Cursorstatus

Beitrag von Toxitom »

Hey StyloMilo,

Die Fehlermeldung resultiert daher, dass du noch gar keine Zeile ausgewählt hast, der Zeilenzähler also noch bei -1 steht. Und der ist ungültig!
Stell dir dein Resultset als Tabelle vor, es gibt dann einen Zeilenzeiger (das ist jetzt der benannte Cursor), der auf einen Zeilensatz deutet. In der Regel kannst du den Zeilenzeiger nur vorwärts bewegen. Hast du das Resultset erzeugt, dann steht dieser Zeiger vor dem ersten Datensatz. Du willst aber mit "oResultset.getInt(..)" den ersten Datensatz auswerten, also fehlt der Befehl, den Zeilenzeiger um eins vorzusetzen. Das erreichst du zum Beispiel mit:
"oResultset.Next" Dein Code müsste also lauten:

Code: Alles auswählen

sSQL = "SELECT MAX(PersNr) AS PNr FROM mitarbeiter"
oResultset = oStatement.executeQuery(sSQL)
if not isNull(oResultset) then
   sIndex = oResultset.findcolumn("PNr")
   oResultset.next
   sPersNr = oResultset.getInt(sIndex)
   sPersNr = sPersNr+1
end if
Das geht, solange du sicherstellen kannst, dass immer nur ein Datensatz vorhanden ist bezw. das du nur den ersten Datensatz auswerten willst.

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
StyloMilo
Beiträge: 2
Registriert: Fr, 08.06.2007 00:27

Re: Resultset.getInt() => Ungültiger Cursorstatus

Beitrag von StyloMilo »

Super! Läuft wie eine Eins. Vielen Dank, Thomas.
Antworten