Seite 1 von 1

In kopiertem Datensatz mit hinterlegtem Makro, Felddaten löschen

Verfasst: Di 14. Dez 2021, 16:06
von Pensionär
Guten Tag

Es gibt ja im Base eine komfortable Lösung um Datensätze zu kopieren, indem man in der Tabelle einen Datensatz mit der Maus über den nächsten Datensatz zieht. Im neuen Datensatz sind dann alle Werte übernommen.
In meinem Fall wäre es super, wenn das Datum und die Belegnummer gelöscht wären.
Kann man mit einem Makro auf Felder zugreifen und diese löschen und dieses Makro im Formular Eigenschaften, (unter: Nach der Datensatzaktion...) hinterlegen?
Ich finde keine anwendbare Lösung, weder in der Anleitung noch im Forum.

Vielen Dank, falls jemand einen Vorschlag hat.

Einen schönen Abend
und beste Grüsse
Markus

Re: In kopiertem Datensatz mit hinterlegtem Makro, Felddaten löschen

Verfasst: Di 14. Dez 2021, 18:00
von RobertG
Hallo Markus,

Du kannst natürlich auf den aktuellen Datensatz zugreifen und mit updateNULL ein entsprechendes Feld leeren. Das ginge z.B. mit so etwas wie

Code: Alles auswählen

oForm.updateNULL(oForm.findColumn("Datum"))
oForm.updateRow()
Jetzt musst Du natürlich heraus bekommen, mit welchem Event genau Du das verbinden darfst. Schließlich willst Du das nur bei einem Insert über das Kopieren und Einfügen machen und nicht bei jeder Datensatzaktion. Da müsste ich auch mit xray testen, an welcher Bedingung das denn fest gemacht werden kann. Nicht dass Du grundsätzlich kein Datum mehr speichern kannst …

Gruß

Robert

Re: In kopiertem Datensatz mit hinterlegtem Makro, Felddaten löschen

Verfasst: Di 14. Dez 2021, 18:31
von Pensionär
Guten Abend Robert

Vielen Dank für die schnelle Antwort.

Ich versuchte es schon mehrmals mit dem Löschen, aber es kommt immer wieder die Meldung:
BASIC-Laufzeitfehler.
Objektvariable nicht belegt.


Auch mit Deinem Vorschlag.

Habe dann immer wieder gegoogelt wegen der Objektvariablen, aber keine Lösung gefunden.

Herzliche Grüsse
Markus

Re: In kopiertem Datensatz mit hinterlegtem Makro, Felddaten löschen

Verfasst: Mi 15. Dez 2021, 07:36
von RobertG
Hallo Markus,

das, was ich da geschrieben habe, ist natürlich nicht eine komplette Prozedur. Wenn Du z.B. die Prozedur an ein Ereignis des Formulars koppelst, dann könnte das so lauten:

Code: Alles auswählen

SUB InhaltLoeschen(oEvent AS OBJECT)
oForm = oEvent.Source
IF oForm.ImpelementationName = "com.sun.star.comp.forms.ODatabaseForm" THEN
oForm.updateNULL(oForm.findColumn("Datum"))
oForm.updateRow()
END IF
END SUB
Die Variable oForm wird aus dem auslösenden Ereignis ermittelt. Die Abfrage zur Implementation kann eventuell entfallen. Das habe ich mir jetzt für die Prozedur nicht weiter angeschaut.

Gruß

Robert

Re: In kopiertem Datensatz mit hinterlegtem Makro, Felddaten löschen

Verfasst: Mi 15. Dez 2021, 17:29
von Pensionär
Guten Abend Robert

Vielen Dank für Deine Hilfe.
Du hast natürlich recht, dass ich diesen Makro schwerlich hinterlegen kann, weil dann diese Aktion auf bestehenden Datensätzen auch ausgeführt wird, wenn ich mich darin bewege.

Ich habe nun bei der Tabelle einen Schalter hinterlegt, welcher beim kopieren nicht übersehen werden kann und dieser löscht dann die beiden Felder, mit diesem Makro:

SUB Datum_Beleg_loeschen
DIM oForm AS OBJECT
oForm = thisComponent.drawpage.forms.MainForm
oForm.updateNULL(oForm.findColumn("Datum"))
oForm.updateNULL(oForm.findColumn("Belegnummer"))
END SUB

Ich wünsche Dir einen schönen Abend
und grüsse Dich herzlich
Markus