❤️ Helfen Sie noch heute, unser LibreOffice Forum zu erhalten! ❤️
Unterstützen Sie das LibreOffice-Forum und helfen Sie uns, unser Ziel für 2025 zu erreichen!
🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱
>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗
Felder im Datenbankformular leeren
Re: Felder im Datenbankformular leeren
Hallo hab jetzt folgenden Code eingegeben:
SUB Datenblatt_bereinigen
DIM oForm AS OBJECT
oForm = thisComponent.drawpage.forms.MainForm
oForm.getByName("txtRadschrauben").BoundField.UpdateNULL()
oForm.getByName("txtRadkappen").BoundField.UpdateNULL()
oForm.getByName("txtAuftrag").BoundField.UpdateNULL()
oForm.getByName("txtkm-Stand").BoundField.UpdateNULL()
oForm.getByName("txtReifenfabrikat vorn").BoundField.UpdateNULL()
oForm.getByName("txtReifenfabrikat hinten").BoundField.UpdateNULL()
oForm.getByName("txtReifengröße VL").BoundField.UpdateNULL()
oForm.getByName("txtReifengröße VR").BoundField.UpdateNULL()
oForm.getByName("txtReifengröße HL").BoundField.UpdateNULL()
oForm.getByName("txtReifengröße HR").BoundField.UpdateNULL()
oForm.getByName("txtDOT VL").BoundField.UpdateNULL()
oForm.getByName("txtDOT VR").BoundField.UpdateNULL()
oForm.getByName("txtDOT HL").BoundField.UpdateNULL()
oForm.getByName("txtDOT HR").BoundField.UpdateNULL()
oForm.getByName("txtProfiltiefe VL").BoundField.UpdateNULL()
oForm.getByName("txtProfiltiefe VR").BoundField.UpdateNULL()
oForm.getByName("txtProfiltiefe VR").BoundField.UpdateNULL()
oForm.getByName("txtProfiltiefe HL").BoundField.UpdateNULL()
oForm.getByName("txtProfiltiefe HR").BoundField.UpdateNULL()
oForm.getByName("txtmontierte Räder").BoundField.UpdateNULL()
oForm.getByName("txtBemerkung").BoundField.UpdateNULL()
oForm.UpdateRow()
END SUB
Funktioniert im Prinzip auch gut, genauso wollte ich es haben, allerdings löscht es nur Auftrag/km-Stand/Radschrauben und Radkappen, den Rest lässt er stehen.
Keine Fehlermeldung beim ausführen.
Ich finde den Fehler nicht.
Gruß Eberhard
SUB Datenblatt_bereinigen
DIM oForm AS OBJECT
oForm = thisComponent.drawpage.forms.MainForm
oForm.getByName("txtRadschrauben").BoundField.UpdateNULL()
oForm.getByName("txtRadkappen").BoundField.UpdateNULL()
oForm.getByName("txtAuftrag").BoundField.UpdateNULL()
oForm.getByName("txtkm-Stand").BoundField.UpdateNULL()
oForm.getByName("txtReifenfabrikat vorn").BoundField.UpdateNULL()
oForm.getByName("txtReifenfabrikat hinten").BoundField.UpdateNULL()
oForm.getByName("txtReifengröße VL").BoundField.UpdateNULL()
oForm.getByName("txtReifengröße VR").BoundField.UpdateNULL()
oForm.getByName("txtReifengröße HL").BoundField.UpdateNULL()
oForm.getByName("txtReifengröße HR").BoundField.UpdateNULL()
oForm.getByName("txtDOT VL").BoundField.UpdateNULL()
oForm.getByName("txtDOT VR").BoundField.UpdateNULL()
oForm.getByName("txtDOT HL").BoundField.UpdateNULL()
oForm.getByName("txtDOT HR").BoundField.UpdateNULL()
oForm.getByName("txtProfiltiefe VL").BoundField.UpdateNULL()
oForm.getByName("txtProfiltiefe VR").BoundField.UpdateNULL()
oForm.getByName("txtProfiltiefe VR").BoundField.UpdateNULL()
oForm.getByName("txtProfiltiefe HL").BoundField.UpdateNULL()
oForm.getByName("txtProfiltiefe HR").BoundField.UpdateNULL()
oForm.getByName("txtmontierte Räder").BoundField.UpdateNULL()
oForm.getByName("txtBemerkung").BoundField.UpdateNULL()
oForm.UpdateRow()
END SUB
Funktioniert im Prinzip auch gut, genauso wollte ich es haben, allerdings löscht es nur Auftrag/km-Stand/Radschrauben und Radkappen, den Rest lässt er stehen.
Keine Fehlermeldung beim ausführen.
Ich finde den Fehler nicht.
Gruß Eberhard
Re: Felder im Datenbankformular leeren
Hallo Eberhard,
gehe einmal die Formularfelder durch. Ich hatte am Anfang beim Test auch das Verhalten, dass nur ein Feld gelöscht wurde. Dann habe ich das zweite Feld angesehen und dort unter Eigenschaften → Daten → Eingabe erforderlich → "Nein" ausgewählt. Daraufhin klappte dort das Löschen. In der Tabelle selbst ist nämlich die Eingabe nicht erforderlich. Der Inhalt kann also sehr wohl leer (NULL) sein.
Gruß
Robert
gehe einmal die Formularfelder durch. Ich hatte am Anfang beim Test auch das Verhalten, dass nur ein Feld gelöscht wurde. Dann habe ich das zweite Feld angesehen und dort unter Eigenschaften → Daten → Eingabe erforderlich → "Nein" ausgewählt. Daraufhin klappte dort das Löschen. In der Tabelle selbst ist nämlich die Eingabe nicht erforderlich. Der Inhalt kann also sehr wohl leer (NULL) sein.
Gruß
Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
Re: Felder im Datenbankformular leeren
Hallo, Danke für die schnelle Antwort
hat aber leider nicht geklappt, daran kanns wohl nicht liegen.
Wenn ich zwei Felder in den Eigenschaften vergleiche kann ich keine Unterschiede erkennen. Das eine löscht, das andere nicht.
Gruß Eberhard
hat aber leider nicht geklappt, daran kanns wohl nicht liegen.
Wenn ich zwei Felder in den Eigenschaften vergleiche kann ich keine Unterschiede erkennen. Das eine löscht, das andere nicht.
Gruß Eberhard
Re: Felder im Datenbankformular leeren
Hallo Eberhard,
In dem Formular wechselt während der Eingabe die Zeilennummer auf "1". Ist für mich reichlich irritierend. Vielleicht auch für die Funktion UpdateRow() - habe ich jetzt nicht getestet. Im Normalfall sollte das Update reichen. So musst Du aber noch ein oForm.Reload() hinterher schieben.
Ich versuche noch einmal heraus zu bekommen, warum die Zeilenzahl in Deinem Formular plötzlich wechselt ...
----------
Betrifft nicht nur Dein Formular sondern scheint ein Bug in Base-Formularen allgemein zu sein.
Ich habe ein Beispiel mit einer Tabelle mit lediglich 3 Feldern erstellt, dazu ein Formular. Gebe ich im Formular Daten neu ein, so ist kein Problem sichtbar. Will ich aber alte Daten z.B. in Datensatz 3 bearbeiten und bearbeite das erste Feld, springe anschließend zum zweiten - dann wird nicht mehr Datensatz 3, sondern Datensatz 1 angezeigt (obwohl zum Bearbeiten Datensatz 3 aktiv ist).
Ich muss jetzt einmal nachsehen, ab welcher Version das so ist und anschließend den Bug melden.
Ist bereits gemeldet: https://bugs.documentfoundation.org/sho ... i?id=82591
Gruß
Robert
In dem Formular wechselt während der Eingabe die Zeilennummer auf "1". Ist für mich reichlich irritierend. Vielleicht auch für die Funktion UpdateRow() - habe ich jetzt nicht getestet. Im Normalfall sollte das Update reichen. So musst Du aber noch ein oForm.Reload() hinterher schieben.
Ich versuche noch einmal heraus zu bekommen, warum die Zeilenzahl in Deinem Formular plötzlich wechselt ...
----------
Betrifft nicht nur Dein Formular sondern scheint ein Bug in Base-Formularen allgemein zu sein.
Ich habe ein Beispiel mit einer Tabelle mit lediglich 3 Feldern erstellt, dazu ein Formular. Gebe ich im Formular Daten neu ein, so ist kein Problem sichtbar. Will ich aber alte Daten z.B. in Datensatz 3 bearbeiten und bearbeite das erste Feld, springe anschließend zum zweiten - dann wird nicht mehr Datensatz 3, sondern Datensatz 1 angezeigt (obwohl zum Bearbeiten Datensatz 3 aktiv ist).
Ich muss jetzt einmal nachsehen, ab welcher Version das so ist und anschließend den Bug melden.
Ist bereits gemeldet: https://bugs.documentfoundation.org/sho ... i?id=82591
Gruß
Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
Re: Felder im Datenbankformular leeren
Hallo Eberhard,
habe jetzt die Lösung, wie das Makro und die Positionierung einwandfrei funktionieren kann:
Setze zu Beginn Deines Makrocodes in dem Modul folgende Zeilen ein - vor allen anderen Prozeduren:
Wähle unter
Formular → Eigenschaften → Ereignisse → Nach dem Datensatzwechsel
die Prozedur "RowCounter" als Makro.
Jetzt wird nach jedem Zeilenwechsel automatisch die korrekte Zeilenzahl gespeichert. Die globale Variable gilt so lange, wie Dein Dokument geöffnet ist.
Ändere anschließend den Code für den Löschvorgang. Nach dem Aufruf von oForm.UpdateRow() ergänzt Du:
Damit wird das Formular neu geladen und der Datensatz, den Du gerade bearbeitet hast, auch weiterhin angezeigt.
Gruß
Robert
habe jetzt die Lösung, wie das Makro und die Positionierung einwandfrei funktionieren kann:
Setze zu Beginn Deines Makrocodes in dem Modul folgende Zeilen ein - vor allen anderen Prozeduren:
Code: Alles auswählen
REM ***** BASIC *****
GLOBAL loRow AS LONG
SUB RowCounter(oEvent AS OBJECT)
loRow = oEvent.Source.Row
END SUB
Formular → Eigenschaften → Ereignisse → Nach dem Datensatzwechsel
die Prozedur "RowCounter" als Makro.
Jetzt wird nach jedem Zeilenwechsel automatisch die korrekte Zeilenzahl gespeichert. Die globale Variable gilt so lange, wie Dein Dokument geöffnet ist.
Ändere anschließend den Code für den Löschvorgang. Nach dem Aufruf von oForm.UpdateRow() ergänzt Du:
Code: Alles auswählen
oForm.Reload()
oForm.Absolute(loRow)
END SUB
Gruß
Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
Re: Felder im Datenbankformular leeren
Hallo Robert
Hallo So richtig ?? Das löschen funktioniert aber das mit der ersten Zeile hab ich nicht verstanden, springt immer dann zum ersten Datensatz.
Formular → Eigenschaften → Ereignisse → Nach dem Datensatzwechsel
die Prozedur "RowCounter" als Makro.
???
Gruß Eberhard
Code: Alles auswählen
REM ***** BASIC *****
GLOBAL loRow AS LONG
SUB RowCounter(oEvent AS OBJECT)
loRow = oEvent.Source.Row
END SUB
SUB Datenblatt_bereinigen
DIM oForm AS OBJECT
oForm = thisComponent.drawpage.forms.MainForm
oForm.getByName("txtRadschrauben").BoundField.UpdateNULL()
oForm.getByName("txtRadkappen").BoundField.UpdateNULL()
oForm.getByName("txtAuftrag").BoundField.UpdateNULL()
oForm.getByName("txtkm-Stand").BoundField.UpdateNULL()
oForm.getByName("txtReifenfabrikat vorn").BoundField.UpdateNULL()
oForm.getByName("txtReifenfabrikat hinten").BoundField.UpdateNULL()
oForm.getByName("txtReifengröße VL").BoundField.UpdateNULL()
oForm.getByName("txtReifengröße VR").BoundField.UpdateNULL()
oForm.getByName("txtReifengröße HL").BoundField.UpdateNULL()
oForm.getByName("txtReifengröße HR").BoundField.UpdateNULL()
oForm.getByName("txtDOT VL").BoundField.UpdateNULL()
oForm.getByName("txtDOT VR").BoundField.UpdateNULL()
oForm.getByName("txtDOT HL").BoundField.UpdateNULL()
oForm.getByName("txtDOT HR").BoundField.UpdateNULL()
oForm.getByName("txtProfiltiefe VL").BoundField.UpdateNULL()
oForm.getByName("txtProfiltiefe VR").BoundField.UpdateNULL()
oForm.getByName("txtProfiltiefe VR").BoundField.UpdateNULL()
oForm.getByName("txtProfiltiefe HL").BoundField.UpdateNULL()
oForm.getByName("txtProfiltiefe HR").BoundField.UpdateNULL()
oForm.getByName("txtmontierte Räder").BoundField.UpdateNULL()
oForm.getByName("txtBemerkung").BoundField.UpdateNULL()
oForm.getByName("txtMechaniker").BoundField.UpdateNULL()
oForm.getByName("Markierfeld Reifendruck").BoundField.UpdateNULL()
oForm.getByName("Markierfeld Reifendruckkontrolle").BoundField.UpdateNULL()
oForm.UpdateRow()
oForm.Reload()
oForm.Absolute(loRow)
END SUB
Formular → Eigenschaften → Ereignisse → Nach dem Datensatzwechsel
die Prozedur "RowCounter" als Makro.
???
Gruß Eberhard
Re: Felder im Datenbankformular leeren
Hallo Eberhard,
mit dem Makro "Datenblatt_bereinigen" haben wir gleich mehrere Bugs aufgedeckt bzw. bestätigt.
funktioniert vom Prinzip her ... aber UpdateRow() zeigt das nicht direkt in allen Formularfeldern an - zuverlässig nur in einem. Sobald Du allerdings zum nächsten Datensatz wechselst und dann zurück gehst sind die Daten tatsächlich weg: https://bugs.documentfoundation.org/sho ... i?id=91600
Dem wollte ich auf die Sprünge helfen, indem ich mit Reload() das Formular neu einlesen lasse. Damit auch der Datensatz der alte bleibt muss das Formular anschließend mit Absolute(Datensatzzahl) auf den entsprechenden vorherigen Datensatz eingestellt werden. Das führte dann leider direkt zum nächsten Bug: https://bugs.documentfoundation.org/sho ... i?id=82591. Der momentane Datensatz lässt sich nicht zuverlässig auslesen, wenn Du z.B. irgendwelche Änderungen im Formular vorher vorgenommen hast. Der Datensatzzeiger oForm.Row zeigt dann plötzlich nur noch '0' an.
Deshalb hast Du jetzt korrekt zu Beginn die Prozedur stehen, mit der der momentane Datensatz zwischengespeichert wird. Die Prozedur RowCounter muss bei jedem Datensatzwechsel des Formulars "MainForm" ausgelöst werden. Dann wird in der Variablen loRow der gerade erreichte Datensatz gespeichert.
Du musst also das Formular zum Bearbeiten öffnen. Klicke anschließend ein Kontrollfeld an und suche im Kontextmenü nach "Formular". Dann klickst Du den Reiter "Ereignisse" in den Formular-Eigenschaften an und wählst für das Ereignis "Nach dem Datensatzwechsel" die Prozedur "RowCounter" aus den Makros aus.
Anschließend müssten die Daten geleert werden und der Datensatzzeiger nach dem Leeren auf den korrekten Datensatz verweisen.
Gruß
Robert
mit dem Makro "Datenblatt_bereinigen" haben wir gleich mehrere Bugs aufgedeckt bzw. bestätigt.
Code: Alles auswählen
SUB Datenblatt_bereinigen
DIM oForm AS OBJECT
oForm = thisComponent.drawpage.forms.MainForm
oForm.getByName("txtRadschrauben").BoundField.UpdateNULL()
oForm.getByName("txtRadkappen").BoundField.UpdateNULL()
...
oForm.UpdateRow()
END SUB
Dem wollte ich auf die Sprünge helfen, indem ich mit Reload() das Formular neu einlesen lasse. Damit auch der Datensatz der alte bleibt muss das Formular anschließend mit Absolute(Datensatzzahl) auf den entsprechenden vorherigen Datensatz eingestellt werden. Das führte dann leider direkt zum nächsten Bug: https://bugs.documentfoundation.org/sho ... i?id=82591. Der momentane Datensatz lässt sich nicht zuverlässig auslesen, wenn Du z.B. irgendwelche Änderungen im Formular vorher vorgenommen hast. Der Datensatzzeiger oForm.Row zeigt dann plötzlich nur noch '0' an.
Deshalb hast Du jetzt korrekt zu Beginn die Prozedur stehen, mit der der momentane Datensatz zwischengespeichert wird. Die Prozedur RowCounter muss bei jedem Datensatzwechsel des Formulars "MainForm" ausgelöst werden. Dann wird in der Variablen loRow der gerade erreichte Datensatz gespeichert.
Du musst also das Formular zum Bearbeiten öffnen. Klicke anschließend ein Kontrollfeld an und suche im Kontextmenü nach "Formular". Dann klickst Du den Reiter "Ereignisse" in den Formular-Eigenschaften an und wählst für das Ereignis "Nach dem Datensatzwechsel" die Prozedur "RowCounter" aus den Makros aus.
Anschließend müssten die Daten geleert werden und der Datensatzzeiger nach dem Leeren auf den korrekten Datensatz verweisen.
Gruß
Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
Re: Felder im Datenbankformular leeren
Jetzt hats geklappt, Super
Danke dir Robert
Gruß Eberhard
Danke dir Robert
Gruß Eberhard
An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:
Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.