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
Fehler bei Zeile einfügen entgegen SELECT-Auswahl
Moderator: Moderatoren
-
- Beiträge: 2
- Registriert: Mo, 19.04.2010 22:23
Re: Fehler bei Zeile einfügen entgegen SELECT-Auswahl
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
Dann greift ooBase ins leere. Versuche es mal mit "ISLAST".
GRuß eBayer
Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz mit 4 GB Memory (3,2 GB aktiv)
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
-
- Beiträge: 2
- Registriert: Mo, 19.04.2010 22:23
Re: Fehler bei Zeile einfügen entgegen SELECT-Auswahl
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
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