[GELÖST] Makro für UPDATE einer Tabelle bei Fokusverlust

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

Wambui
Beiträge: 3
Registriert: So, 10.05.2015 15:57

[GELÖST] Makro für UPDATE einer Tabelle bei Fokusverlust

Beitrag von Wambui »

Hallo,
ich habe ein Base-Formuler zusammengestellt über eine Kundentabelle (Name, Vorname) und über eine parameterisierte Abfrage kann ich gezielt alle Datensätze mit Nachnamen bsp. beginnend mit "la" und mit allen Vornamen beginnend bsp. "j" anzeigen lassen. Dazu verwende ich eine Zwischentabelle "Filtertabelle" mit den beiden Feldern "F_Nachname" und "F_Vorname" und exakt einem leeren Datensatz.
Das klappt auch soweit, nur dass jedes Mal in "Filtertabelle" die Parameter hinzugfügt werden und beim nächsten Öffnen des Formulars mit eingelesen werden.
Ich versuche jetzt ein Makro zu schreiben, das ein UPDATE auf diese Tabelle macht, wenn das Button-Ereignis "Bei Fokusverlust" eintritt.

Code: Alles auswählen

Sub update_filter(event)
	 DIM oForm AS OBJECT
	 DIM oConnection AS OBJECT
	 DIM SQL_Statement AS OBJECT
	 DIM sSQL AS STRING
     oForm = event.source.model.parent
     oConnection = oForm.activeconnection
     SQL_Statement = oConnection.CreateStatement
     sSQL = "UPDATE ""Filtertabelle"" SET ""F_Nachname"" = '', ""F_Vorname"" = ''"
     SQL_Statement.executeUpdate(sSQL)
     oForm.reload
end Sub
Nur leider funktioniert das nicht so, wie ich mir das vorstelle.

Grüße
Wambui
Zuletzt geändert von Wambui am So, 10.05.2015 19:02, insgesamt 1-mal geändert.
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Makro für UPDATE einer Tabelle bei Fokusverlust

Beitrag von RobertG »

Hallo Wambui,

ich nehme an, dass es das Ereignis Button → bei Fokusverlust ist, was Dir Probleme bereitet. Du schreibst nicht, was nicht funktioniert.
Der Standard solch einer Konstruktion ist für mich:
Filter in einem Formular, Button im Unterformular. Beim Verlassen des Filterformulars (Druck auf den Button) wird zuerst der Filter geschrieben, dann das Unterformular aktualisiert.
Wenn Du so eine Konstruktion hättest, dann würdest Du zum einen das falsche Formular ansprechen, zum anderen, wenn das Formular korrekt getroffen würde (über parent.parent), der Filterung des Unterformulars sofort wieder den Boden unter den Füßen wegziehen.
Ich würde vermutlich einfach beim Öffnen des Formulars ein Makro ausführen lassen, das eben die Felder leert. Und für das Leeren würde ich NULL und nicht einen leeren Text nehmen.

So bleibt unklar, was denn nun Dein Problem ist.

Gruß

Robert
Wambui
Beiträge: 3
Registriert: So, 10.05.2015 15:57

Re: Makro für UPDATE einer Tabelle bei Fokusverlust

Beitrag von Wambui »

Was ich meinte, ist dass der SQL-Befehl UPDATE in der Filtertabelle nicht durchgeführt wird. Dazu hatte ich einen Testbutton angelegt mit dem entsprechenden Ereignis.
Jetzt habe ich das Ereignis dem Button auf dem Formular gegeben, der die Abfrage durchführt. Der SQL-Befehl UPDATE wird immer noch nicht erfolgreich durchgeführt. Allerdings erhalte ich jetzt diese Fehlermeldung:
BASIC-Laufzeitfehler.
Es ist eine Ausnahme aufgetreten
Type: com.sun.star.sdbc.SQLException
Message: Table not found in statement [UPDATE "Filtertabelle"].
Wambui
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Makro für UPDATE einer Tabelle bei Fokusverlust

Beitrag von RobertG »

Hallo Wambui,

unter den Umständen stimmt die Verbindung nicht - es sei denn, der Tabellenname existiert tatsächlich nicht in Deiner Datenbank ...
Versuche einmal

Code: Alles auswählen

oDatenquelle = ThisComponent.Parent.CurrentController
If NOT (oDatenquelle.isConnected()) THEN
oDatenquelle.connect()
END IF
oVerbindung = oDatenquelle.ActiveConnection()
SQL_Statement = oVerbindung.CreateStatement()
sSQL = "UPDATE ""Filtertabelle"" SET ""F_Nachname"" = '', ""F_Vorname"" = ''"
SQL_Statement.executeUpdate(sSQL)
Allerdings frage ich mich, warum Du nicht direkt die Felder änderst und dann ein Update machst - so nach dem Schema

Code: Alles auswählen

oForm.updateNull(1)
oForm.updateNull(2)
oForm.updateRow()
... dann benötigst Du die Verbindung nicht.

Gruß

Robert
Wambui
Beiträge: 3
Registriert: So, 10.05.2015 15:57

Re: Makro für UPDATE einer Tabelle bei Fokusverlust

Beitrag von Wambui »

Hallo Robert,
vielen Dank mit deinem Code klappt es.
Kannst Du mir vielleicht noch verraten, wo ich eine Dokumentation hierzu finden kann? Ähnlich wie JavaDoc bei Oracle. Ich bin hier bei der Makroprogrammierung neu und weiß erst einmal nicht, was bspw. ThisComponent alles an Methoden etc. anbietet. Der Editor von LibreOffice Base macht auch keine Vorschläge.

Grüße
Wambui
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: [GELÖST] Makro für UPDATE einer Tabelle bei Fokusverlust

Beitrag von RobertG »

Hallo Wambui,

ich nutze zur Erkundung der möglichen Verbindungen einer Eigenschaft xray (http://bernard.marcelly.perso.sfr.fr/Fi ... l60_de.odt). Wenn Du nach möglichst vielen Beispielen für Datenbanken suchst: So etwas steht dann auch im Base-Handbuch und in den Erläuterungen zu Beispieldateien.

Gruß

Robert
Hiker
******
Beiträge: 590
Registriert: Mo, 08.09.2014 21:34
Wohnort: Berlin

Re: Makro für UPDATE einer Tabelle bei Fokusverlust

Beitrag von Hiker »

Hallo,
Wambui hat geschrieben:Der Editor von LibreOffice Base macht auch keine Vorschläge.
Vorschläge sind hier auch nicht möglich, da Du erst mit der Zuordnung eines Makros zu einer Schaltfläche oder Ereignis entscheidest,
in welchem Kontext Dein Makro aufgerufen wird. Der Editor kann also nicht vorher wissen, welche Umgebung übergeben wird und daher auch keine
Methoden/Eigenschaften voraussagen.

MfG, Jörn
Libre Office 6.3.1 (Win 10 Pro) / Libre Office 6.0.7 (Win8.1 Pro, Win 7 Pro) / AOO (Win 7)
Antworten