isNull(oResultSet) funktioniert nicht

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

hr.hartwig
***
Beiträge: 52
Registriert: Mi, 09.05.2007 23:25

isNull(oResultSet) funktioniert nicht

Beitrag von hr.hartwig »

Hallo

Ich habe eine MySQL Datenbank und OO 2.2.1
Bei einer Abfrage ohne Ergebnis bekomme ich
die Fehlermeldung: 'Illegal operation on empty result set'

Hier ist der Codeausschnitt:

Code: Alles auswählen

sQuery = "SELECT Preis, Ware FROM Faktura_D WHERE Kurz = '" + Variable + "'"
oResultSet = oStatement.executeQuery( sQuery )
while oResultSet.next():Wend
oResultSet.last() ' <-- Ohne diese Zeile bekomme ich die Fehlermeldung:' Message: After end of result set'

' Abfragen, ob es ein Ergebnis in der DB gibt:
IF not IsNull(oResultSet) Then     <-- IsNull(oResultSet) funktioniert nicht :-(
  MsgBox oResultSet.getString(1)' Bei keinem Ergebnis bekomme ich die Fehlermeldung:
                                ' 'Illegal operation on empty result set'
                                ' Eine csv- oder dbf Datenbank liefert einfach einen leeren String.
Else
  MsgBox "Keine Ergebnisse in der Datenbank" '
  Exit Sub
End If 
Wenn 'If IsNull(oResultSet)' (habe ich aus Thomas Krumbeins Basicbuch (S. 502).) nicht funktioniert,
welche Möglichkeit gibt es dann, um auf ein 'Null-Ergebnis' zu reagieren?
Danke für die Hilfe
Horst-Rainer
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: isNull(oResultSet) funktioniert nicht

Beitrag von Toxitom »

Hallo Horst-Rainer,

das Problem ist tatsächlich, dass einige DB-Engines eben dennoch ein Resultset zurückliefern - also ein Objekt, aber eben nicht ein NULL-Objekt, sondern ein leeres Resultset-Objekt. Dann funktioniert die Abfrage isNull() nicht, da das Objekt ja kein Nullobjekt ist.

In dem Fall musst du wahrscheinlich abfragen, ob der Zellzeiger sowohl vor dem ersten Datensatz liegt als auch hinter dem letzten (wäre kein Datensatz ;-).
Nicht ausprobiert, aber versuch mal:

Code: Alles auswählen

IF oResultSet.isBeforeFirst() and oResultset.isAfterLast() Then msgbox "Leer" 
Wichtig ist aber: Kommentiere deien "While..." Zeile aus und deine "oResultset.last()"!

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
hr.hartwig
***
Beiträge: 52
Registriert: Mi, 09.05.2007 23:25

Re: isNull(oResultSet) funktioniert nicht

Beitrag von hr.hartwig »

Hallo Toxitom!

Danke für den Versuch, mir zu helfen.

Wenn ich meine "While..." Zeile aus und mein "oResultset.last()" auskommentiere
bekomme ich bei "oResultset.getString(1)" die Fehlermeldung:
"Message: Before start of result set"

Die Zeile von Dir
IF oResultSet.isBeforeFirst() and oResultset.isAfterLast() Then msgbox "Leer"
wird übersprungen.
Ansonsten bleiben die Fehler wie gehabt.

Für weitere Ideen bin ich empfänglich ;-)
Viele Grüße,
Horst-Rainer
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: isNull(oResultSet) funktioniert nicht

Beitrag von Toxitom »

Hallo Horst,

erst mal ne Frage vorab: Verstehst du überhaupt, was du da machst?
Bitte nicht falsch verstehen - ist wirklich nur eine Verständnisfrage.

Meine Zeile sollte dir nur ein Beispiel darstellen, wie du ein leeres Resultset ubfangen könntest - da musst du natürlich noch ein wenig "drumherumbauen". Nur die Zeile reinkopiern bringt gar nichts!

Zum Resultset:
Wenn du das erzeugst, sthet der Zeilenzeiger immer vor dem ersten Datensatz. Da kannst du also nichts abfragen!
Mit oResultset.next() wird der Zeilenzeiger um ein vorwärts bewegt - steht jetzt also entweder auf dem ersten Datensatz - oder hinter dem letztn Datensatz - falls es gar keine Datensätze gab!
Mit oResultset,last() setzt du den Datenzeiger auf den letzten Datensatz - vorausgesetzt es gibt überhaupt mindestens einen. Viele Sprungbewegungen sind nur möglich, wenn der Resultset mit bestimmten Eigenschaften erzeugt wurde - sonst kannst du immer nur von vorne nach hinten gehen.
Dein getString(i) liefert immer den Inhalt der mit i definierten Spalte des aktuellen Datensatzes - und zwar den Textinhalt! Das geht natürlich auch bei cvs oder db-Tabellen.

Viele Grüße
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
hr.hartwig
***
Beiträge: 52
Registriert: Mi, 09.05.2007 23:25

Re: isNull(oResultSet) funktioniert nicht

Beitrag von hr.hartwig »

Hallo Thomas!
Vielen Dank für Deine Antwort!
Deine erste Frage kann ich mit einem eindeutigen 'Jein' beantworten.
Manches mehr, manches weniger... ;-)
Als ich so mit dem Code experimentierte, viel es mir plötzlich wie Schuppen aus den Haaren:
Die 'oResultset.getString' -Zeile gehört natürlich zwischen
'while' und 'wend'.
Wenn es nun kein Ergebnis gibt, bleibt der String leer und das kann ich
entsprechend weiterverarbeiten.
Funktioniert zumindest jetzt so, wie ich es möchte.

VIele Grüße,
Horst-Rainer
Antworten