Seite 1 von 1

Fehler bei Zeile einfügen entgegen SELECT-Auswahl

Verfasst: Mo, 19.04.2010 23:27
von Andreas Lagasch
Ich arbeite mit HSQLDB, OpenOffice.org 3.2.0 unter Windwos 7 und habe in einem Formular die Daten aus einer Tabelle "Leistung" mit folgenden SQL-Befehl ausgewählt:

SELECT * FROM "Leistung" WHERE (("Leistung"."anwesend" ='AZ' OR "Leistung"."anwesend" = 'Z') AND ("Leistung"."abrechnen"='A') AND ("Leistung"."bez_Datum" IS NOT NULL ))

Ein TableControl zeigt die Daten an, die auch editierbar (nur änderbar) sind.
In früheren Versionen von OpenOffice konnte ich einen Datensatz so ändern und eintragen (von Hand oder im Macro mit Formular.updateRow()), dass der Datensatz, da er nun die Bedingung (im Feld "anwesend") nicht mehr erfüllte, einfach aus der Tabelle (aus dem Formular) verschwand.

Vermutlich seit ich OpenOffice 3.2.0 installiert habe, funktioniert das nicht mehr. Wenn ich versuche, den Eintrag im Feld "anwesend" auf Z2 zu ändern, wie ich das bisher getan habe, dann entsteht ein Fehler, aus dem ich nur durch Beenden des Formulars wieder aussteigen kann. Manchmal ist der Eintrag im Datensatz doch geändert, manchmal auch nicht.

Wenn ich mein in früheren Zeiten funktionierendes Makro abspiele (auf Knopfdruck im Formular), ist ein Teil der Datensätze wie gewünscht geändert, dann aber stockt der Ablauf und ich bekomme jedesmal eine Fehlermeldung.

Sub AnwMarke(oEreignis)
DIM oFormular as Object

oFormular=oEreignis.source.model.parent
oFormular.first()
IF msgBox("Willst Du die Datensätze wirklich ändern?"_
& CHR(13) & "Bitte vergewissere dich, dass"_
& CHR(13) & CHR(09) & "die Daten im CALC-Blatt eingetragen sind,"_
& CHR(13) & CHR(09) & " und die richtigen Daten angezeigt werden!"_
, 3, "Bitte beachten!")<>6 THEN
Exit Sub
END IF
DO UNTIL oFormular.isAfterLast()
SELECT CASE oFormular.getString(oFormular.findColumn("anwesend"))
CASE "Z"
oFormular.updateString(oFormular.findColumn("anwesend"), "Z1")
CASE "AZ"
oFormular.updateString(oFormular.findColumn("anwesend"), "Z2")
CASE ELSE
msgBox("Die Leistung wurde weder von Zita allein noch von beiden erbracht", 0, "Fehler!")
END SELECT
oFormular.updateRow()
oFormular.next()
LOOP
oFormular.reload()
msgBox("Alle Datensätze sind im Feld anwesend neu markiert:"_
& CHR(13) & CHR(09) & "aus Z wurde Z1"_
& CHR(13) & CHR(09) & "aus AZ wurde Z2"_
& CHR(13) & "Die Leistungen müssen nun ausbezahlt werden.", 0, "Hinweis:")
End Sub

Das Makro bleibt bei updateRow() stehen und es erscheint die Meldung:
Es ist eine Exception aufgetreten/ Typ com.sun.star.sbdc.SQLException:/no Data is available

Hat jemand eine Ahnung, ob dies ein Fehler von OpenOffice.org ist und wie ich den (vorübergehend) bis zu nächsten Update umschiffen könnte?
Vielen Dank!

Andreas

Re: Fehler bei Zeile einfügen entgegen SELECT-Auswahl

Verfasst: Di, 20.04.2010 09:54
von eBayer
Ich vermute, Du stehst bei der Case-Bedingung auf einem noch nicht vorhandenen Datensatz (hinter der Tabelle).
Dann greift ooBase ins leere. Versuche es mal mit "ISLAST".
GRuß eBayer

Re: Fehler bei Zeile einfügen entgegen SELECT-Auswahl

Verfasst: Mi, 21.04.2010 09:41
von Andreas Lagasch
Vielen Dank für deine Anregung, aber

1. möchte ich, dass alle Datensätze (also auch der letzte Datensatz) bearbeitet werden und dies ist erst der Fall wenn der Kursor über den letzten Datensatz hinausgewandert ist, eben wenn isafterlast() zutrifft. Ich habe deine Idee ausprobiert, bekomme aber denselben Fehler.
2. Falls damit ein Problem bestünde, würde ich es mit CASE ELSE ja abfangen.
3. Früher ging es ohne Probleme.
4. Auch von Hand lassen sich die betreffenden Felder in der Tabelle auch nicht bearteiten.

Du siehst, das Problem ist so einfach nicht zu lösen. Wäre ja schön gewesen.

Andreas