Seite 1 von 1

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

Verfasst: Fr 15. Mai 2015, 19:36
von Wambui
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

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

Verfasst: Fr 15. Mai 2015, 20:05
von RobertG
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

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

Verfasst: Sa 16. Mai 2015, 10:11
von Wambui
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