Seite 1 von 1
[GELÖST] Makro für UPDATE einer Tabelle bei Fokusverlust
Verfasst: So, 10.05.2015 16:13
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
Re: Makro für UPDATE einer Tabelle bei Fokusverlust
Verfasst: So, 10.05.2015 16:31
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
Re: Makro für UPDATE einer Tabelle bei Fokusverlust
Verfasst: So, 10.05.2015 17:24
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
Re: Makro für UPDATE einer Tabelle bei Fokusverlust
Verfasst: So, 10.05.2015 18:47
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
Re: Makro für UPDATE einer Tabelle bei Fokusverlust
Verfasst: So, 10.05.2015 19:01
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
Re: [GELÖST] Makro für UPDATE einer Tabelle bei Fokusverlust
Verfasst: Mo, 11.05.2015 07:33
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
Re: Makro für UPDATE einer Tabelle bei Fokusverlust
Verfasst: Di, 26.05.2015 08:56
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