❤️ 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. 🌱


❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

[GELÖST] Delete-Makro zum Löschen selektierter Datensätzen

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
Wambui
Beiträge: 12
Registriert: Fr 15. Mai 2015, 09:30

[GELÖST] Delete-Makro zum Löschen selektierter Datensätzen

Beitrag von Wambui » Fr 15. Mai 2015, 19:36

Hallo,
jetzt bräuchte ich noch einmal in Base Makros Unterstützung. Ich möchte in einem Formular mit zwei Tabellenansichten (KundenStammdaten, Journal) bei Auswahl eines Datensatzes in KundenStammdaten per Schaltfläche den ausgewählten Datensatz löschen. Dazu habe ich folgendes Makro geschrieben und an das Schaltfächenereignis "Wenn Taste gedrückt" angehängt.

Code: Alles auswählen

Sub Delete(event)
 	DIM oForm AS OBJECT
 	DIM oConnection AS OBJECT
 	DIM oDatasource AS OBJECT
	DIM iRow AS LONG
 	oForm = event.source.model.parent
  	oDatasource = ThisComponent.Parent.CurrentController
 	IF NOT (oDatasource.isConnected()) THEN 
 		oDatasource.connect()
 	END IF
 	oConnection = oDatasource.ActiveConnection()
 	iRow = oForm.getRow()
 	oForm.reload()
 	oForm.absolute(iRow)
 	oForm.deleteRow()
End Sub
Leider wird bei Drücken der Schaltfläche wird der Datensatz allerdings nicht gelöscht un des kommt auch keine Fehlermeldung. Was ist an meinem Code falsch?

Vielen Dank

Wambui
Zuletzt geändert von Wambui am Sa 16. Mai 2015, 10:12, insgesamt 2-mal geändert.

RobertG
* LO-Experte *
Beiträge: 2888
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Delete-Makro zum Löschen von selektierten Datensätzen

Beitrag von RobertG » Fr 15. Mai 2015, 20:05

Hallo Wambui,

ich verstehe Dein Anliegen nicht. Wenn Du einen Button hast, dann kannst Du in
Eigenschaften: Schaltfläche → Allgemein → Aktion → Datensatz Löschen
wählen. Wozu brauchst Du ein Makro.

Jetzt zum Makro selbst: Viel zu viel Code. Was zum Schluss aber fehlt ist das Aktualisieren des Formulars. Der Datensatz wird gelöscht, steht aber noch da, weil das Formular nicht neu eingelesen wurde.
Wenn der Button in dem Formular steht, aus dem der Datensatz gelöscht werden soll, dann hätte gereicht:

Code: Alles auswählen

    Sub Delete(event)
       DIM oForm AS OBJECT
       oForm = event.source.model.parent
       oForm.deleteRow()
       oForm.reload()
    End Sub
Allerdings landest Du dann noch nicht mit dem Reload unbedingt bei dem Datensatz, den Du erreichen willst - es sei denn, Du löscht den ersten Datensatz.
Um den korrekten Datensatz zu erreichen musst Du natürlich vorher die Zeile über getRow auslesen. Nach dem Refresh kannst Du dann mit Absolute() an den vorherigen Punkt springen - nur einen Datensatz weiter, weil der vorherige ja nicht mehr existiert. Aber aufpassen: Du musst Dich vorher vergewissern (am besten mit isLast()), ob der Curor bereits auf dem letzten Datensatz stand. Dann muss der Wert für Absolute() um 1 herunter gesetzt werden.

All diese Klimmzüge brauchst Du aber gar nicht, wenn Du schlicht die Aktionsmöglichkeit des Buttons nutzt.

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

Wambui
Beiträge: 12
Registriert: Fr 15. Mai 2015, 09:30

Re: Delete-Makro zum Löschen von selektierten Datensätzen

Beitrag von Wambui » Sa 16. Mai 2015, 10:11

RobertG hat geschrieben:Wenn Du einen Button hast, dann kannst Du in
Eigenschaften: Schaltfläche → Allgemein → Aktion → Datensatz Löschen
wählen. Wozu brauchst Du ein Makro.

All diese Klimmzüge brauchst Du aber gar nicht, wenn Du schlicht die Aktionsmöglichkeit des Buttons nutzt.
Das stimmt. Ich war lediglich darauf fixiert meinen SQL-Befehl zum Löschen über mehrere verknüpfte Tabellen umzusetzen. Ich arbeite normalerweise nicht mit BASE. Ergo ist ja selbstverständlich, dass man auch den Wald voller Bäume nicht sieht. Der Gedanke an das Vorhandenseins einer Löschfunktion kam heute Morgen vor dem Einschalten des Rechners und Deiner Antwort.

Dennoch besten Dank,

Wambui


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.



Antworten