Fehlermeldung nach oForm.Last

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

Frewer
**
Beiträge: 39
Registriert: Do, 05.03.2020 16:10

Fehlermeldung nach oForm.Last

Beitrag von Frewer »

Hallo
beim Öffnen eines Formulares übernehme ich teilweise Daten aus dem letzten eingegebenen Datensatz. Zu diesem Zweck gebe ich den Befehl oForm.last ein. Mit MsgBox sehe ich die geforderte Spalte "mlfdnr". In der Zeile < intlfdnr = oForm.getint(stName)> wird der Fehler "Cursor zeigt vor die erste bzw. hinter die letzte Zeile..." angezeigt. Schließen ich das Formular, dann ist in der DatenTabelle eine neue Zeile bei der die neue fmlfdnr, fbeok, fdbok, fJahr (im Formular als HiddenFelder, die auf die entsprechenden Tabellenfelder (ohne f..) hinweisen) korrekt eingestellt sind. Es fehlen aber alle Daten, die ich in das Formular eingegeben habe.
Gibt es dafür eine Erklärung?

Sub Datenübernahme (oEvent as object)
REM wird mit Öffnen des Formulars "Eingabe" gestartet
DIM stName as Long
DIM intlfdnr as Integer
DIM stJahr as String
DIM stJahr1 as String
DIM intJahr as Integer
DIM unoDate AS NEW com.sun.star.util.Date
oDoc = thisComponent
oDrawpage = oDoc.drawpage
oForm = oDrawpage.forms.getByName("Eingabe")
oForm.last 'geht zur letzten Zeile
REM lfdNr auslesen
stName = oForm.findColumn("mlfdnr")
intlfdnr = oForm.getInt(stName)
REM altes Datum auslesen, Jahr ermitteln
stName = oForm.findColumn("Datum")
unoDate = oForm.getDate(stName)
REM neue Zeile einfügen
oForm.MoveToInsertRow()
REM beok, dbok vorbesetzen
oFeld = oForm.getByName("fbeok")
oFeld.BoundField.UpdateInt(0)
oFeld = oForm.getByName("fdbok")
oFeld.BoundField.UpdateInt(0)
REM ausgelesenes Jahr abspeichern
oFeld = oForm.getByName("fJahr")
oFeld.BoundField.UpdateInt(unoDate.Year)
REM lfdNr ermitteln und eingeben
oFeld = oForm.getByName("fmlfdnr")
If unoDate.Year <> Year(DATE) Then
intlfdnr=0
End if
oFeld.BoundField.UpdateInt(intlfdnr+1)
oForm.insertRow()
End Sub

mfG
Frewer
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Fehlermeldung nach oForm.Last

Beitrag von F3K Total »

Moin,
nur ein Schuss ins Blaue, kann es sein, dass dein Makro schneller als das Formular ist?
Versuch es mal mt folgendem Code:

Code: Alles auswählen

Sub Datenübernahme (oEvent as object)
    REM wird mit Öffnen des Formulars "Eingabe" gestartet
    DIM stName as Long
    DIM intlfdnr as Integer
    DIM stJahr as String
    DIM stJahr1 as String
    DIM intJahr as Integer
    DIM unoDate AS NEW com.sun.star.util.Date
    oDoc = thisComponent
    oDrawpage = oDoc.drawpage
    oForm = oDrawpage.forms.getByName("Eingabe")
    do
        wait 10
    loop until oForm.isloaded
    oForm.last 'geht zur letzten Zeile
    REM lfdNr auslesen
    stName = oForm.findColumn("mlfdnr")
    intlfdnr = oForm.getInt(stName)
    REM altes Datum auslesen, Jahr ermitteln
    stName = oForm.findColumn("Datum")
    unoDate = oForm.getDate(stName)
    REM neue Zeile einfügen
    oForm.MoveToInsertRow()
    REM beok, dbok vorbesetzen
    oFeld = oForm.getByName("fbeok")
    oFeld.BoundField.UpdateInt(0)
    oFeld = oForm.getByName("fdbok")
    oFeld.BoundField.UpdateInt(0)
    REM ausgelesenes Jahr abspeichern
    oFeld = oForm.getByName("fJahr")
    oFeld.BoundField.UpdateInt(unoDate.Year)
    REM lfdNr ermitteln und eingeben
    oFeld = oForm.getByName("fmlfdnr")
    If unoDate.Year <> Year(DATE) Then
    intlfdnr=0
    End if
    oFeld.BoundField.UpdateInt(intlfdnr+1)
    oForm.insertRow()
End Sub
Gruß R
Frewer
**
Beiträge: 39
Registriert: Do, 05.03.2020 16:10

Re: Fehlermeldung nach oForm.Last

Beitrag von Frewer »

Hallo R

funktioniert nicht. Die Fehlermeldung ist die Gleiche wie vorher. Also scheint es nicht an der Warteschleife zu liegen.
Habe das gleiche Makro jetzt auf meinem Laptop mit LibreOffice probiert und da lief es, allerdings gibt es da wieder einen anderen Fehler, den es bei OpenOffice nicht gibt. Komisch, das muss ich noch genauer analysieren. Schade, dass LO nicht auf WIN XP läuft.
Ich verwende oForm.last und oForm.first auch in anderen Formularen und dort funktioniert alles. Und interessant ist ja auch, dass < Msgbox stName > mir auch die richtige Spalte in der Tabelle anzeigt (allerdings weiß ich nicht, ob ich auch in der letzten Zeile bin).
Ich verstehe nicht, wieso der Cursor nicht in der letzen Zeile der Tabelle ist, wie im Tutorial beschrieben, sondern dahinter. Deshalb habe ich hinter < oForm.last > mal < msgbox oForm.last > eingesetzt. Das Ergebnis ist "False" - was immer das auch heißt -.

Wie kann ich denn die Zeilennr auslesen, um festzustellen, ob ich in der letzten Zeile bin?

mfG
Frewer
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Fehlermeldung nach oForm.Last

Beitrag von F3K Total »

Moin,
es wäre gut, wenn du die .odb datei, ggf. vereinfacht, und verfremdet hier hochladen würdest, dann kann dir sicherlich geholfen werden.
So ins Blaue hat ja nicht geklappt.
Gruß R
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Fehlermeldung nach oForm.Last

Beitrag von F3K Total »

Frewer hat geschrieben: So, 14.06.2020 15:40 Wie kann ich denn die Zeilennr auslesen, um festzustellen, ob ich in der letzten Zeile bin?
mit

Code: Alles auswählen

Print oForm.Row
Gruß R
Frewer
**
Beiträge: 39
Registriert: Do, 05.03.2020 16:10

Re: Fehlermeldung nach oForm.Last

Beitrag von Frewer »

Ist sehr persönlich, muss sie also erst normalisieren.

Habe noch weitere Versuche gemacht: setze ich vor <oForm.last> den Befehl <msgbox oForm.getRow> dann bekomme ich 0 (also Cursor vor der 1ten Zeile). Setze ich <msgbox oForm.getRow> hinter <oForm.last> bekomme ich wieder 0. d.h. der Cursor hat sich nicht bewegt.
Ich habe mit dem FNavigator verifiziert, dass das Formular tatsächlich "Eingabe" heißt und mit meiner Tabelle verbunden ist.

mfG
Frewer
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Fehlermeldung nach oForm.Last

Beitrag von F3K Total »

Wie geschrieben, Glaskugellesen hilft da nicht.
Manchmal, sehr selten, zerschießt auch so ein Formular...
R
Frewer
**
Beiträge: 39
Registriert: Do, 05.03.2020 16:10

Re: Fehlermeldung nach oForm.Last

Beitrag von Frewer »

hier ist die Datenbank Test.odt mit dem Formblatt "Eingabe" un den zugehörigen Makros.
Hoffentlich kann man damit das problem erklären.

Gruß
Frewer
Dateianhänge
Test.odb
(60.23 KiB) 134-mal heruntergeladen
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Fehlermeldung nach oForm.Last

Beitrag von F3K Total »

Ja,
kann man, das Formular hat die Eigenschaft "Nur Daten hinzufügen = Ja", zeigt also immer nur den in Bearbeitung befindlichen Datensatz an.
Ich habe das mal ausgeschaltet, und schwubs, funktioniert es.

Gruß R
Frewer
**
Beiträge: 39
Registriert: Do, 05.03.2020 16:10

Re: Fehlermeldung nach oForm.Last

Beitrag von Frewer »

oh, welch ein Fehler. Tatsächlich mit der Änderung funktioniert das Formular bei mir auch. Auf was man nicht alles aufpassen muß!!!

Danke für die rasche Hilfe und weiter interessante Fragen zum Beantworten

Frewer
Antworten