Datensatz suchen über Kombinations- bzw. Listenfeld

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Datensatz suchen über Kombinations- bzw. Listenfeld

Re: Datensatz suchen über Kombinations- bzw. Listenfeld

von Noebian » So, 27.11.2011 18:59

Deutlich einfacher und ohne Makro funtkioniert es, wenn man ein Tabellen-Kontrollfeld ins Formular einbindet, das die gewünschten Felder (zb Name und Vorname) anzeigt, während der Rest des Formulars die Details des selektierten Datensatzes anzeigt. Ich komme auch von Access her - und bin am lernen, dass Base eben nicht Access ist und man andere Wege gehen kann und muss. Mittlerweile gefällt mir diese Lösung besser als die Combobox.

Re: Datensatz suchen über Kombinations- bzw. Listenfeld

von vueloman » Fr, 25.11.2011 19:27

Noch ein Code der das gleiche macht aber das Event der Listbox verwendet und damit selber die Tabelle und und das zu filternde Feld erkennt. Sie müss also nicht jedes mal angepasst werden und das Makro kann in mehreren Formularen verwendet werden.

Code: Alles auswählen

    Sub SelectListbox2(oEvent)
       Dim oModelo, oForm
       Dim sCampo$, iItemSeleccionado%, sValorSelecc$, sFiltro$
       oModelo = oEvent.Source.Model
       sCampo = oModelo.DataField
       iItemSeleccionado = oModelo.SelectedItems(0)
       sValorSelecc = oModelo.ValueItemList(iItemSeleccionado)
	'msgbox sValorSelecc
       oForm = oModelo.Parent
       sFiltro = """" + sCampo + """='" + sValorSelecc + "'"
       oForm.updateRow()
       oForm.Filter = sFiltro
       oForm.ApplyFilter = True
       oForm.reload()
    End Sub
Wobei die Liste im Beispiel als Datenfeld die Bezeichnung verwendet besser wäre das ID Schlüsselfeld zu verwenden.

Ich habe noch ein bisschen ausprobiert:
1. eine Tabelle Bundesländer eingefügt die über ein ID_Bundesland in der Tabelle Bezeichnung verbunden ist.
2. eine Liste mit einer SQL GOUP BY Anweisung um nur die Bundesländer die verwendet worden sind und dise auch nur einmal anzuzeigen.
3. Die liste ruft nach dem wechseln das obrige Makro auf zeigt dann aber natürlich nur die Zeilen die auch in ID_Bundesland der Tabelle Bezeichnung einen Eintrag haben.

Ich verwende LibreOffice 3.4.4 mit W7

Re: Datensatz suchen über Kombinations- bzw. Listenfeld

von Benutzer 32208 gelöscht » Do, 23.12.2010 09:37

Hallo Leute,

Ich habe eure Diskussion hier sehr aufmerksam gelesen, und sie hat mir auch wirklich geholfen ein sehr ähnliches Problem im Grunde zu lösen. Allerdings verhält es sich bei mir noch ein wenig komplizierter. Ich habe euch unten mal meine Formular Übersicht angefügt.
Eine kurze Erklärung: Das Primäre Ziel des Formulars ist es Teilnehmer für zu einer Schulung (Schulungs ID + Datum) einzugeben. Schulungs ID ist ein Listenfeld, welches wenn aktualisiert die entsprechenden Informationen im Subformular Infoschulung auswerfen soll. Diese Infos sollen nicht verändert werden. Die Primäre Dateneingabe erfolgt über die Auswahl einer SChulungs ID und der Eingabe eines Datums. Diese werden in die Tabelle(Schulungsvorgang) eingespeist. Die Teilnehmer werden dann eingegeben und in einer Tabelle(Mischu) mit dem PrimaryKey der Tabelle Schulungsvorgang als Foreign key gespeichert.

Mein Problem ist nun, dass mit dem Makro welches auf das Feld SchulungsID angewendet wird, alle Felder aktualisieren. Mein Plan ist es aber, dass sich nur die Die Infofelder aus dem Subformular Infoschulung Aktualisieren welches seine Daten aus der Tabelle Schulungen bezieht.

Ist mein Problem soweit verständlich?

Vielen Dank Für eure Hilfe und eine Frohe Weihnachtszeit!!!!


Infos: XP, OOo3.2.1 mit allen benötigten teilen + JRE installiert.

Macro code:

Code: Alles auswählen

Sub SelectListbox
Dim oForm, oListbox As Object
Dim LB_Item as integer
	oForm = ThisComponent.drawpage.forms.getbyindex(0)	
	oListbox = oForm.getByName("Listenfeld 1")
	LB_Item = oListbox.SelectedItems(0)	
	oform.absolute (LB_Item+1)
End Sub
Dateianhänge
Formularübersicht.
Formularübersicht.
Übersicht Formular.JPG (22.57 KiB) 3290 mal betrachtet

Re: Datensatz suchen über Kombinations- bzw. Listenfeld

von nahemoth » Mo, 02.08.2010 11:41

Ich habe eine Liste von Datensätzen, in einer Combobox soll man alle in dem Attribut Name vorkommenden Namen zur Auswahl haben.
Wird dann einer Ausgewählt, so sollen nur die entsprechenden Datensätze ausgegeben werden.
Was verstehst du daran nicht ?

Hier mal noch, wie ich das ganze aufgebaut habe:

Tabellen:
- t_Users -> enthält Benutzer
- t_Logins -> enthält Login-Daten

Formular:
Art des Inhalts: Tabelle
Inhalt: t_Logins

Combobox:
Datenfeld: Name
Listeninhalt: SELECT DISTINCT `Name` FROM `weblogin`.`t_users`

Tabellenkontrollfeld

Makro:

Code: Alles auswählen

Sub SelectCombobox

	Dim oForm As Object
	Dim oCtrlModel As Object
        Dim oTabellenKontrollfeld as Object

	oForm = ThisComponent.drawpage.forms.getbyindex(0)
	oCtrlModel = oForm.getByName("Combobox")
	value = oCtrlModel.Text
		msgbox(value)
 	
 	 oTabellenKontrollfeld = oForm.getByName("Tkf")
 	 oTabellenKontrollfeld.Filter = value
	 oTabellenKontrollfeld.ApplyFilter = True
	 oForm.Reload

End Sub
Wenn ich nun in der Combobox einen Eintrag auswähle, dann gibt er diesen auch korrekt in der Msgbox aus, aber an dem tabellenkontrollfeld ändert sich nichts. Er sollte aber nun lediglich die Datensätze Anzeigen, die den Namen matchen.
Das ist das ganze Problem.

Ich hoffe mich versteht man jetzt etwas besser.

Edit:

jetzt hats geklappt:

Code: Alles auswählen

Sub SelectCombobox

	Dim oForm As Object
	Dim oCtrlModel As Object
	Dim oTabellenKontrollfeld As Object

	oForm = ThisComponent.drawpage.forms.getbyindex(0)
	oCtrlModel = oForm.getByName("Combobox")
	value = oCtrlModel.Text
 	
 	oTabellenKontrollfeld = oForm.getByName("Tkf")
	oForm.Filter = "(`weblogin`.`t_logins`.`Name` = "& "'"& value & "')"
	oForm.applyFilter = True
	oForm.Reload
	
End Sub

Re: Datensatz suchen über Kombinations- bzw. Listenfeld

von turtle47 » Do, 29.07.2010 22:09

Ehrlich gesagt weis ich jetzt nicht nicht was Du haben willst?
Den gewählten Eintrag oder die Position?
Wenn ich dem nachgehe
nahemoth hat geschrieben:einee combobox in der die Namen nach denen gefiltert werden soll
dann sollte der gewählte Eintrag doch vollkommen ausreichen!


Du machst es Dir wirklich recht einfach.
Zum einen hälst Du es nicht für nötig die Shift-Taste zu benutzen um das Schriftbild erträglich zu machen,
und zu anderen bringt Tante Google bei den ensprechenden Suchbegriffen sofort einen Treffer zur Lösung.

Ausserdem hatten wir hier fast schon einmal die gleiche Diskussion.

Das war's von mir.

Jürgen

Re: Datensatz suchen über Kombinations- bzw. Listenfeld

von nahemoth » Do, 29.07.2010 21:13

hm, es is aber ne combobox und da gibts kein SelectedItems(0)

Re: Datensatz suchen über Kombinations- bzw. Listenfeld

von turtle47 » Do, 29.07.2010 21:07

Hallo,

Code: Alles auswählen

Sub SelectListbox
Dim oForm, oListbox As Object
Dim LB_Item as integer
	oForm = ThisComponent.drawpage.forms.getbyindex(0)	
	oListbox = oForm.getByName("ListBox1")
	print "Position: " & oListbox.SelectedItems(0)
	print "Gewähler Eintrag: " & oListbox.getCurrentValue	
End Sub
sollte Deinen Erwartungen entsprechen.

Jürgen

Re: Datensatz suchen über Kombinations- bzw. Listenfeld

von nahemoth » Do, 29.07.2010 20:33

hm, bei mir funktioniert das nicht ... ich habe ein tabellenkontrollfeld in dem die ausgabe erfolgt und einee combobox in der die Namen nach denen gefiltert werden soll aufgelistet werden. wenn ich nun einen Namen auswähle, passiert nichts, es werden immernoch alle datensätze angezeigt.
mein basic-code:

Code: Alles auswählen

Sub SelectCombobox
Dim oForm, oCombobox As Object
Dim LB_Item as integer
   oForm = ThisComponent.drawpage.forms.getbyindex(0)   
   oCombobox = oForm.getByName("Combobox1")
   LB_Item = oCombobox.Text
   msgbox(LB_Item)
   oform.absolute (LB_Item)
End Sub
ich habe mal, um zu sehen, was er aus der combobox holt, ein popup eingebaut, aber darin steht immer "0", egal welchen namen ich wähle.
hat wer nen tipp ?

danke !

Re: Datensatz suchen über Kombinations- bzw. Listenfeld

von Alise » Mo, 10.05.2010 23:27

Hallo zusammen,
also bei mir waren zunächst die Datensätze in der Listbox nicht sortiert und es wurde trotzdem der nächste angezeigt. Die ID ist bei mir tatsächlich ein Autowert. Was Jürgen geschrieben hat, dass er die Datei nochmals entfernt, einen anderen Ordner angelegt und von dort wieder gestartet hat, habe ich noch nicht ausprobiert. Allerdings habe ich dann die Listbox einmal anders sortiert und was soll ich sagen, da hat dann gar nix mehr funktioniert. Jürgens Vorschlag bezgl. entfernen und neu installieren werde ich also noch ausprobieren, sodass auch wirklich der angezeigte Datensatz angezeigt wird.
Warum bei dir, Manuel die Anzeige weg ist, kann ich leider nicht nachvollziehen. :(
Habt alle zusammen vielen herzlichen Dank, dass ihr auf meine Frage geantwortet habt.
Viele Grüße
Alois

Re: Datensatz suchen über Kombinations- bzw. Listenfeld

von ddraht » Sa, 08.05.2010 06:14

Hallo Alise,

sollte der falsche Datensatz angezeigt werden, so hast du vielleicht den Listeninhalt sortiert.
Amateurhaft ausgedrückt: Wenn Liste und Tabelle eine andere Sorierung haben passen die Zeilen nicht übereinander. ;)

Gruß
ddraht

Re: Datensatz suchen über Kombinations- bzw. Listenfeld

von hobby » Sa, 08.05.2010 01:50

turtle47 hat geschrieben:[...]stelle ich das "umständlich und kompliziert" mal in Frage. :wink:
Hallo Alois & Jürgen!

Vielen Dank Jürgen, in diesem Falle nehme ich alles zurück!
Danke nochmals! Ich frage mich nur, warum die Resonanz so gering ist (vgl. auch mein erstelltes Thema mit dem gleichen Problem), wobei es doch so ein kleines Makro ist und darüberhinaus auch noch so (wie ich finde) essentiell!!!?
Alise hat geschrieben: Wieso zeigt er mir im Formular nicht den angeklickten Datensatz an, sondern den, der eins weiter vorne ist?
Bist du dir sicher, Alois, dass dieses in Jürgens angehängter DB passiert und nicht nur in deiner?
Der Grund ist nämlih, dass Jürgen´s erster ID-Eintrag mit Nr. 1 beginnt (vermutlich da kein Auto-Wert). In deiner, wie auch meiner, DB haben wir bei ID Auto-Wert und dieser beginnt mit 0 (und nicht wie bei Jürgen mit 1) und somit ist die ID-Nr. aus der Tabelle nicht identisch mit der Nr. der Reihenfolge in der Listbox.
Daher ist die von Jürgen hinzugefügte Ergänzung notwendig:

Code: Alles auswählen

oform.absolute (LB_Item +1)

Eine Kleinigkeit noch: Bei deiner DB bleibt der Eintrag in der Listbox nach Auswahl noch ordentlich markiert; bei mir nicht. Hast du (oder jemand anderes) vielleicht eine Idee, warum???

Nochmals herzlichen Dank und beste Grüße!
:-P

Manuel

Re: Datensatz suchen über Kombinations- bzw. Listenfeld

von Alise » Fr, 07.05.2010 12:39

Hallo Jürgen, vielen Dank für die schnelle Antwort.
Werde das, was du mir rätst mal ausprobieren.
Bin ja schon zufrieden wie es momentan läuft und hab mich riesig darüber gefreut, dass es so gut funktioniert. :D
Noch eine schöne Zeit.
Gruß
Alois

Re: Datensatz suchen über Kombinations- bzw. Listenfeld

von turtle47 » Do, 06.05.2010 21:59

Hi Alois,
Alise hat geschrieben:Wieso zeigt er mir im Formular nicht den angeklickten Datensatz an, sondern den, der eins weiter vorne ist?
Hmm, kann ich nicht nachvollziehen.
Habe die auf meinem Sytem angemeldete Datenbank abgemeldet, OO.o inkl. Schnellstarter beendet. Die Datei selber nochmal runtergeladen und in einem anderen Ordner gespeichert.
Dann diese angemeldet und getestet > Auswahl und Anzeige stimmen über ein.

Vielleicht etwas besser zielen mit der Maus? :wink:

Kann Dir sonst leider nicht sagen wo das Problem ist.

Sonst mal folgende Codezeile ersetzen:

Code: Alles auswählen

oform.absolute (LB_Item +1)
Jürgen

Re: Datensatz suchen über Kombinations- bzw. Listenfeld

von Alise » Do, 06.05.2010 21:43

Hallo Jürgen,
hab viiiiiiielen herzlichen Dank. Funktioniert (fast) hervorragend.
Das fast bezieht sich auf eine Kleinigkeit. Wieso zeigt er mir im Formular nicht den angeklickten Datensatz an, sondern den, der eins weiter vorne ist?
Z.B. klicke ich Breumeier (Datensatz 7) an, es kommt aber Bernsteiner (Datensatz 6), der Datensatz eben, der vor Breumeier ist.
Kann man das noch hinkriegen oder muss man eben damit leben?
Lieben Gruß
Alois

Re: Datensatz suchen über Kombinations- bzw. Listenfeld

von turtle47 » Do, 06.05.2010 20:52

Hallo Zusammen,
hobby hat geschrieben:dass das in Base nur umständlich und kompliziert über zu programmierende Makros geht...
Nuja, wenn das folgende kleine Makro mit dem Ereignis "Status geändert" der Listbox verbunden ist:

Code: Alles auswählen

Sub SelectListbox
Dim oForm, oListbox As Object
Dim LB_Item as integer
	oForm = ThisComponent.drawpage.forms.getbyindex(0)	
	oListbox = oForm.getByName("ListBox1")
	LB_Item = oListbox.SelectedItems(0)	
	oform.absolute (LB_Item)
End Sub
stelle ich das "umständlich und kompliziert" mal in Frage. :wink:

Hier noch ein Beispiel dazu.
Listbox Select.odb
(73.16 KiB) 2629-mal heruntergeladen
Viel Erfolg.

Jürgen

Nach oben