Seite 1 von 1

Suche nach Feldinhalt

Verfasst: Mi 1. Apr 2020, 11:28
von bugsbunny
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?!?

Re: Suche nach Feldinhalt

Verfasst: Mi 1. Apr 2020, 15:09
von RobertG
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

Re: Suche nach Feldinhalt

Verfasst: Fr 3. Apr 2020, 20:03
von bugsbunny
Hallo Robert

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

Gruss

Re: Suche nach Feldinhalt

Verfasst: Fr 3. Apr 2020, 20:36
von RobertG
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

Re: Suche nach Feldinhalt

Verfasst: Sa 4. Apr 2020, 09:56
von F3K Total
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