Fehlermeldung nach oForm.Last
Moderator: Moderatoren
Fehlermeldung nach oForm.Last
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
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
Re: Fehlermeldung nach oForm.Last
Moin,
nur ein Schuss ins Blaue, kann es sein, dass dein Makro schneller als das Formular ist?
Versuch es mal mt folgendem Code:
Gruß R
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
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 10: AOO, LO Linux Mint: AOO, LO
Re: Fehlermeldung nach oForm.Last
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
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
Re: Fehlermeldung nach oForm.Last
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
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
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 10: AOO, LO Linux Mint: AOO, LO
Re: Fehlermeldung nach oForm.Last
mit
Code: Alles auswählen
Print oForm.Row
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 10: AOO, LO Linux Mint: AOO, LO
Re: Fehlermeldung nach oForm.Last
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
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
Re: Fehlermeldung nach oForm.Last
Wie geschrieben, Glaskugellesen hilft da nicht.
Manchmal, sehr selten, zerschießt auch so ein Formular...
R
Manchmal, sehr selten, zerschießt auch so ein Formular...
R
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 10: AOO, LO Linux Mint: AOO, LO
Re: Fehlermeldung nach oForm.Last
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
Hoffentlich kann man damit das problem erklären.
Gruß
Frewer
- Dateianhänge
-
- Test.odb
- (60.23 KiB) 139-mal heruntergeladen
Re: Fehlermeldung nach oForm.Last
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
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
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 10: AOO, LO Linux Mint: AOO, LO
Re: Fehlermeldung nach oForm.Last
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
Danke für die rasche Hilfe und weiter interessante Fragen zum Beantworten
Frewer