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. 🤗

Suche nach Feldinhalt

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
bugsbunny
Beiträge: 2
Registriert: Mi 1. Apr 2020, 11:12

Suche nach Feldinhalt

Beitrag von bugsbunny » Mi 1. Apr 2020, 11:28

Ich hatte mir für LO 4.0.3 folgendes Skript gestrickt welches bei Aktivierung zum gewählten Artikelnamen sprang:

Code: Alles auswählen

Sub SelectListbox
' bei Status geändert
	Dim oForm, oListbox As Object
	Dim LB_Item as integer
	dim AktArtikelname as string
	dim DataSource as object
	dim ConnectToDB as object
	dim Statement as object
	dim Abfrageergebnis as Object
	dim stSQL as string
	dim i, j as long
	oForm = ThisComponent.drawpage.forms.getbyindex(0)   
	oListbox = oForm.getByName("ListBox1")
	LB_Item = oListbox.SelectedItems(0)
	AktArtikelname=oListbox.StringItemList(LB_Item)	'(oListbox.SelectedItems(0))
	' auf Tabelle "Artikel" zugreifen und AktArtikelname suchen
	DataSource=ThisComponent.Parent.DataSource
	ConnectToDB=DataSource.GetConnection ("","")
	Statement=ConnectToDB.createStatement
	stSQL = "SELECT ""Artikelname"" FROM ""Artikel"" "
	' WHERE ""Artikelname"" = '" +AktArtikelname+ "'"
	Abfrageergebnis=Statement.executeQuery(stSQL)
	i=0
	j=0
	while Abfrageergebnis.next and j=0
		i=i+1
		if Abfrageergebnis.getString(1) = AktArtikelname then j=i
	wend	' nächsten Artikel
	oform.reload()
	oform.absolute(j)
end Sub
Das hat so funktioniert.
Mit LO 5.1.6.2 löscht er den aktuellen Artikelname?!?

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Suche nach Feldinhalt

Beitrag von RobertG » Mi 1. Apr 2020, 15:09

Hallo bugsbunny,

soll das ein Aprilscherz sein?
In Deinem Makro ist nur ein SELECT, und nach dem SELECT-Inhalt wird das Formular neu geladen - wozu immer Du das so brauchst. Ich löse so etwas lieber mit einer einfachen Filtertabelle.
Ein SELECT kann nichts löschen.

Auf Aprilscherz komme ich auch, weil da eine LO Version von 2013 und eine von 2016 genannt werden. Die sind doch beide schon längst in Rente geschickt worden. Danach gab es auch notwendige Sicherheitspatches. Würde ich also nicht mehr mit arbeiten.

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

bugsbunny
Beiträge: 2
Registriert: Mi 1. Apr 2020, 11:12

Re: Suche nach Feldinhalt

Beitrag von bugsbunny » Fr 3. Apr 2020, 20:03

Hallo Robert

nein ist es nicht.
Und wie würde dein Code aussehen?

Gruss

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Suche nach Feldinhalt

Beitrag von RobertG » Fr 3. Apr 2020, 20:36

Hallo bugsbunny,

ist die folgende Grundlage richtig: Du möchtest mit einem Listenfeld den Inhalt eines Formulars filtern, das heißt einen bestimmten Datensatz auswählen?

Die Butterbrotlösung dazu ist, eine Tabelle zum Filtern zu nutzen. Diese Filtertabelle ist Basis für ein Formular "Filter". In ihr werden nur in einer Zeile (Primärschlüssel deswegen ein Boolean-Feld) Werte gespeichert, z.B. Dein Artikelname oder besser der Schlüsselwert für den Artikelnamen. Beschicken kannst Du das Formular über Dein Listenfeld. Darin suchst Du den Wert aus, der wird abgespeichert.

Das 2. Formular, das auf der gleichen Oberfläche liegt, basiert dann nicht auf einer Tabelle, sondern auf einer Abfrage, in der unter anderem die Bedingung steht:

Code: Alles auswählen

... WHERE "Artikel_ID" = (SELECT "Artikel_ID" FROM "Filter")
Sobald jetzt der Wert für die Artikel_ID in der Filtertabelle (durch das Formular) geändert wird muss die Datenbasis für das andere Formular wieder neu eingelesen werden. Das machst Du dadurch, dass Du einen Button direkt neben das Listenfeld packst, der aber eigentlich in dem anderen Formular verankert ist. Er hat die Eigenschaft, das andere Formular zu aktualisieren.

Wenn jetzt das Listenfeld geändert wurde wird durch das Drücken des Buttons zuerst das Abspeichern des Listenfeldwertes ausgelöst, da hier ein Formular verlassen wurde. Anschließend wird das andere Formular neu geladen.

Das funktioniert ganz ohne Makros.

Natürlich kannst Du Dir den Button auch noch sparen. Dann musst Du lediglich die Abspeicherung und Aktualisierung über ein Makro regeln.

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

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

Re: Suche nach Feldinhalt

Beitrag von F3K Total » Sa 4. Apr 2020, 09:56

Hallo zusammen,
vielleicht ein kleiner Hinweis:
  • Die Filter Methode von Robert erzeugt ein Abfrageergebnis, das eben NUR die Treffer im Formular anzeigt, alle anderen Datensätze werden ausgeblendet.
  • Das Makro sucht im vorhandenen Formular und setzt den Cursor auf den ersten Treffer, d.h. alle Datensätze bleiben eingeblendet.
Das Makro funktioniert unter LO 6.4.2 in diesem Sinne einwandfrei, siehe angehängte Test-Datenbankdatei.
Der Fehler bei dir, Häschen, kann nur dann gefunden werden, wenn du die problematische DB, ggf. verfremdet, hier zur Verfügung stellst, und wie Robert schon geschrieben hat, auf eine aktuelle Version von Libreoffice wechselst.
Gruß R
Dateianhänge
LISTBOX_PER_MAKRO.zip
nur entpacken
(12.89 KiB) 149-mal heruntergeladen
Windows 10: AOO, LO Linux Mint: AOO, LO

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