BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

[Gelöst] Makro: Zwei Datenfelder aus Formular an eine Tabelle anhängen

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
mexman
Beiträge: 30
Registriert: Mi 29. Mär 2017, 04:56

[Gelöst] Makro: Zwei Datenfelder aus Formular an eine Tabelle anhängen

Beitrag von mexman » Mo 10. Apr 2017, 15:33

Hallo:
Nachdem ich das Wochenende mit Studium von Hilfedateien und Makro-Listen verbracht habe, fehlt mir immernoch ausreichend Ahnung folgendes Makro ohne Hilfe zu erstellen :-(
In beiliegender Datenbank möchte ich aus dem Formular JimTablForm ein Makro aufrufen, was folgendes bewirken sollte:
Hänge die beiden oberen Felder aus der Tabelle "Abfrageneu" (FIRST NAME und LAST NAME) an die Tabelle "PTable" (Felder PFirst und PLast) an.
Kann mir jemand bitte auf die Sprünge helfen?
Danke im Voraus
Michael
Dateianhänge
jimallTst.odb.zip
(1021.43 KiB) 163-mal heruntergeladen
Zuletzt geändert von mexman am Di 11. Apr 2017, 19:17, insgesamt 3-mal geändert.

F3K Total
Beiträge: 2409
Registriert: So 10. Apr 2011, 10:10

Re: Makro: Zwei Datenfelder aus Formular an eine Tabelle anhängen

Beitrag von F3K Total » Mo 10. Apr 2017, 20:21

Bittesehr:

Code: Alles auswählen

SUB INSERT_ROW_PTable
    oConnection = ThisDatabaseDocument.CurrentController.ActiveConnection
    SQL_Statement = oConnection.createstatement
    sSQL = "INSERT INTO ""PTable""( ""PFirst"",""PLast"") SELECT ""FIRST NAME"", ""LAST NAME""  FROM ""JimTable1"" WHERE ( LOWER ( ""FIRST NAME"" ) LIKE LOWER ( '%' || ( SELECT ""F_FIRST"" FROM ""FILTER"" ) || '%' ) AND ( LOWER ( ""LAST NAME"" ) LIKE LOWER ( '%' || ( SELECT ""F_LAST"" FROM ""FILTER"" ) || '%' ) OR ( SELECT ""F_LAST"" FROM ""FILTER"" ) IS NULL ) OR LOWER ( ""LAST NAME"" ) LIKE LOWER ( '%' || ( SELECT ""F_LAST"" FROM ""FILTER"" ) || '%' ) AND ( SELECT ""F_FIRST"" FROM ""FILTER"" ) IS NULL OR ( SELECT ""F_LAST"" FROM ""FILTER"" ) IS NULL AND ( SELECT ""F_FIRST"" FROM ""FILTER"" ) IS NULL )"
    Sql_Statement.executeUpdate(sSQL)
END SUB
Gruß R
Windows 10: AOO, LO Linux Mint: AOO, LO

mexman
Beiträge: 30
Registriert: Mi 29. Mär 2017, 04:56

Fuktioniert leider nicht

Beitrag von mexman » Di 11. Apr 2017, 01:43

Hallo R.
Ich hatte mich zu früh gefreut. Leider werden zwar Daten in die entsprechende Tabelle geschrieben, aber ZU VIELE!
Es soll nur EIN DATENSATZ geschrieben werden, nicht alle gefilterten Einträge! Wenn Du mit leeren Filterfeldern filterst, siehst Du ALLE Datensátze und dann werden durch das Makro auch ALLE angezeigten Datensätze in die Tabelle geschrieben!
Wenn ich das Makro ansehe, dann verstehe ich auch, dass das so funktionieren muss, aber das war nicht Sinn der Sache :-(
Was ich eigentlich erreichen möchte ist:
"Hänge die beiden oberen Felder aus der Tabelle "Abfrageneu" (FIRST NAME und LAST NAME) an die Tabelle "PTable" (Felder PFirst und PLast) an."
Habe gesehen, dass INSERT INTO nur von Tabelle nach Tabelle funktioniert, Kann man Dein Makro so ändern, dass lediglich die ERSTE Übereinstellung aus dem Filter berücksichtigt wird? Das ist ja das, was auf dem Formular passiert!


Trotzdem vielen Dank!
Gruss
Michael

F3K Total
Beiträge: 2409
Registriert: So 10. Apr 2011, 10:10

Re: Makro: Zwei Datenfelder aus Formular an eine Tabelle anhängen

Beitrag von F3K Total » Di 11. Apr 2017, 17:47

Moin,
mexman hat geschrieben:... dass lediglich die ERSTE Übereinstellung aus dem Filter berücksichtigt wird?
natürlich kann man das machen. Aber was genau ist denn deiner Meinung nach die erste Übereinstimmung? Du filterst nach Vor- und Nachname, hast aber keine Sortierreihenfolge in deinen Abfragen. Also hängt die Reihenfolge von der Reihenfolge in der Tabelle vermutlich von der ID der Datensätze ab. Welche Kriterien muß der Datensatz erfüllen, damit eben nur dieser eine gefiltert wird? Das solltest du schon genau festlegen, sonst programmiere ich mir hier einen Wolf, und dazu habe ich wenig Lust. Du kannst es so versuchen, nach ID geordnet, der 1. Datensatz

Code: Alles auswählen

SUB INSERT_ROW_PTable
    oConnection = ThisDatabaseDocument.CurrentController.ActiveConnection
    SQL_Statement = oConnection.createstatement
    sSQL = "INSERT INTO ""PTable""( ""PFirst"",""PLast"") SELECT ""FIRST NAME"", ""LAST NAME""  FROM ""JimTable1"" WHERE ( LOWER ( ""FIRST NAME"" ) LIKE LOWER ( '%' || ( SELECT ""F_FIRST"" FROM ""FILTER"" ) || '%' ) AND ( LOWER ( ""LAST NAME"" ) LIKE LOWER ( '%' || ( SELECT ""F_LAST"" FROM ""FILTER"" ) || '%' ) OR ( SELECT ""F_LAST"" FROM ""FILTER"" ) IS NULL ) OR LOWER ( ""LAST NAME"" ) LIKE LOWER ( '%' || ( SELECT ""F_LAST"" FROM ""FILTER"" ) || '%' ) AND ( SELECT ""F_FIRST"" FROM ""FILTER"" ) IS NULL OR ( SELECT ""F_LAST"" FROM ""FILTER"" ) IS NULL AND ( SELECT ""F_FIRST"" FROM ""FILTER"" ) IS NULL ) ORDER BY ID Limit 1"
    Sql_Statement.executeUpdate(sSQL)
END SUB
R
Windows 10: AOO, LO Linux Mint: AOO, LO

mexman
Beiträge: 30
Registriert: Mi 29. Mär 2017, 04:56

Re: Makro: Zwei Datenfelder aus Formular an eine Tabelle anhängen

Beitrag von mexman » Di 11. Apr 2017, 19:17

Hallo R:
Prima! Das war genau richtig so.
Danke sehr!
Der Hintergrund:
In der kompletten Datenbank stehen für eine Person bis zu 35 Datensätze.
Wenn ich nach der Person filtere, stehen diese 35 Datensätze untereinander im Filter, in der Zieltabelle soll aber nur einmal diese Person auftauchen.
>sonst programmiere ich mir hier einen Wolf<
Das soll natürlich nicht sein!
Habe viel gelernt! Vielen Dank! Und schöne Ostern!
Gruss aus mexiko
Michael

An alle, die das LibreOffice-Forum nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten