Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Datensatz nach mehreren Kombifeldern suchen

Begonnen von chainy24, Februar 10, 2011, 11:27:03

⏪ vorheriges - nächstes ⏩

chainy24

Hallo,
ich hab hier schon alles durchsucht, bin der Lösung meines Problems aber leider nicht näher gekommen. Vielleicht war ich auch nur zu dämlich, die Lösung zu erkennen.

Meine DB ist eine Artikelliste, die nach Kategorie und Unterkategorie eingeteilt ist (jeweils extra Tabellen).
Ich habe ein HF in dem es insgesamt 3 Kombifelder für die Auswahl geben soll. Nach diesen sollen die Datensätze in einem Unterformular angezeigt werden.
Wenn ich also im 1. die Kategorie auswähle, werden mir alle Artikel der Kategorie angezeigt. In meiner naiven Art dachte ich, dass ich den gleichen Code für die Unterkategorie verwenden kann, doch da kommt dann nur eine Fehlermeldung, dass das ID-Feld nicht als gültiger Feldname oder Ausdruck erkannt wird.

Ich hoffe, dass ich das halbwegs verständlich ausgedrück habe. Für Tipps wäre ich dankbar.
Hier der Code, der als Ereignisprozedur steht:
Private Sub Kombinationsfeld5_AfterUpdate()
   ' Den mit dem Steuerelement übereinstimmenden Datensatz suchen.
   Dim rs As Object

   Set rs = Me.Recordset.Clone
   rs.FindFirst "[HK_ID] = " & Str(Nz(Me![Kombinationsfeld5], 0))
   If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End Sub



Private Sub Kombinationsfeld12_AfterUpdate()
   ' Den mit dem Steuerelement übereinstimmenden Datensatz suchen.
   Dim rs As Object

   Set rs = Me.Recordset.Clone
   rs.FindFirst "[UK_ID] = " & Str(Nz(Me![Kombinationsfeld12], 0))
   If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End Sub


Wobei das Kombinationsfeld5 die erste Auswahl ist, und das Kombinationsfeld12 das zweite.

database

Hallo,

Zitat... dass das ID-Feld nicht als gültiger Feldname oder Ausdruck erkannt wird ...
deutet darauf hin, dass sich auf deinem Formular kein Feld namens [UK_ID] befindet.

Wenn dem so ist, wird auch die Datenherkunft deines Formulars für diese Art von Filterung nicht geeignet sein
bzw. müsste diese wahrscheinlich erst dafür angepasst werden.

chainy24

Hi,
aber es befindet sich ja auch kein Feld mit HK_ID in dem Formular. Wieso geht das dann?
Das Kombifeld hat folgende Datenherkunft: SELECT Hauptkategorie.HK_ID, Hauptkategorie.HK_Name FROM Hauptkategorie;
das zweite: SELECT Unterkategorie.UK_ID, Unterkategorie.UK_Name, Unterkategorie.UK_HKat FROM Unterkategorie WHERE (((Unterkategorie.UK_HKat)=[formulare]![Suche_Form].[kombinationsfeld5])); 
Die Daten die dann im UF angezeigt werden, kommen alle aus der Tabelle Artikel.
Wenn aber bei der ersten "Suche" das Feld HK_ID gefunden wird, sollte es doch auch beim zweiten Mal mit UK_ID klappen?  ???

danke schon mal im Voraus für die Hilfe.


database

Hi,

ZitatWieso geht das dann

Weil die Datenherkunft des Hauptformulars dieses Feld enthält.


chainy24

aber es enthält doch auch die UK_ID?!
Das zweite Kombifeld steht ja auch im HF.
Oder steh ich grad mal wieder voll auf der Leitung und du meinst was ganz anderes?

database

#5
Hallo,

mir scheint hier besteht ein Verständnisproblem - vielleicht auch meinerseits.

Also du wählst im ersten Kombi einen Eintrag und der bezeichnet eine Hauptkategorie.
Nach dem Aktualisieren deines Kombis wird nun jener Artikel angezeigt, der als erster mit diesem Kriterium gefunden wird.

Danach wählst du aus dem 2. Kombi einen Eintrag aus, der einer Unterkategorie der vorhin gewählten Hauptkategorie entspricht.
Nach dem Aktualisieren soll jener Artikel im Hauptform angezeigt werden, der im Feld UK_ID diese Unterkategorie stehen hat.

Stell mal im Formular das Feld HK_ID und das Feld UK_ID sichtbar dar und achte darauf, dass die Felder auch wirklich so heißen.
Was steht nach der Auswahl im Feld UK_ID drin? Hoffentlich eine Zahl oder?

Kontrolliere bitte auch ob die gebundene Spalte des Kombi12 auf die erste Spalte eingestellt ist

Wenn alles so ist wie beschrieben sollte dein Code eigentlich funktionieren.
Allerdings frage ich mich was dann mit den Daten des UFo passieren soll, die stimmen ja dan nicht mehr zum angezeigten Artikel des HaFo  ???





chainy24

Nein, das hast du schon richtig verstanden.
Das HF ist eigentlich nur die Auswahl, also nur die zwei (drei) Kombifelder. Die Auswahl der Hauptkategorie wirft sagen wir mal 10 Datensätze im UF aus (wird in Listenform angezeigt, weiß jetzt nicht, wie man das genau bezeichnet).
Die Auswahl der Unterkategorie soll dann daraus nur noch diejenigen (sagen wir mal 5) Datensätze anzeigen, die eben in dieser Unterkat sind.

Das mit der gebundenen Spalte hab ich kontrolliert, das stimmt so. Und auch das mit dem sichtbar stellen hab ich gemacht. Dort wird die Zahl richtig aktualisiert, auch wenn ich die Unterkategorie auswähle.

Das er das Feld UK_ID findet, da hattest du recht, das hab ich im Formular schon gelöst.
Jetzt kommt zwar keine Fehlermeldung mehr, aber er sortiert auch nicht aus. Es tut sich einfach gar nichts mehr.

database

Naja, dann bestand doch ein Verständnisproblem... es geht also doch um das UFo...  ;D

Wenn du die Auswahl im UF verfeinern willst dann musst du DEM das auch mitteilen.
Die erste Auswahl funktioniert deshalb, weil das UF an die ID des HF gebunden arbeitet.


Private Sub Kombinationsfeld12_AfterUpdate()

    Dim strSQL as String
    strSQL = "SELECT BenötigteFelder FROM Tabelle WHERE UK_ID=" & Me![Suche_Form].[kombinationsfeld12]

    Me!DeinUFo.Form.Recordsource = strSQL

    Me!DeinUFo.Requery

End Sub


.... sollte dann die angezeigten Datensätze im UFo auf jene reduzeiren, die im Feld UK_ID den Eintrag aus dem Kombi enthalten.
'BenötigteFelder' und 'Tabelle' bitte natürlich mit deinen Gegebenheiten ersetzen.

HTH

chainy24

Jetzt tut das UFO immerhin schon was.   :)  Allerdins wirft er mir bei der ersten Unterkategorie alles aus, bei der zweiten (also wenn ich eine andere, als die 1. in der Liste wähle) gar nichts mehr.

Muss morgen weitertüfteln, weil ich leider keine Zeit mehr habe.
Danke auf jeden Fall für die Tipps. Haben mir schon mal wesentlich weiter geholfen.

lg Chainy

chainy24

Hallo,
also das mit der Suche funktioniert jetzt! Juhu. Danke vielmals, für die Hilfe!!!

Allerdings stellt sich jetzt ein neues Problem: Hat man einmal das zweite Auswahlkriterium eingegeben, muss man, wenn man einen anderen Artikel sucht, immer die Unterkategorie auswählen.
Wie kann ich ihm dann sagen, dass er wenn ich beim 1. Kombifeld was aussuche, NUR nach der Hauptkategorie sucht, ohne dass ich im 2. Kombifeld was eingebe?
Also dass er mir alle Unterkategorien wieder unten listet?
Ich dachte mir, dass ich im Kombifeld irgendwie als Standardwert * eingebe, so nach dem Motto: Select *
Was natürlich nicht funktioniert.

lg

database

#10
Hallo,

naja, eventuell analog der Lösung mit der Unterkategorie:


Private Sub Kombinationsfeld5_AfterUpdate()

   Dim strSQL as String
   strSQL = "SELECT BenötigteFelder FROM Tabelle WHERE HK_ID=" & Me![Suche_Form]![kombinationsfeld5]

   Me!DeinUFo.Form.Recordsource = strSQL

   Me!DeinUFo.Requery

End Sub



Wenn ich dein Ansinnen richtig interpretiert habe ...  obiger Code sollte das UFo mit den Daten der Auswahl im Kombi 1 befüllen.
Eine Auswahl im Kombi 2 ist dabei nicht notwendig.
Das UFo reagiert nun auf die Auswahlen (unabhängig) aus beiden Kombis, wobei die Abhängigkeit der Kombis untereinander
wie bisher unberührt bleibt ---> (Auswahl in Kombi 1 ändert die Daten im Kombi 2)


chainy24

Hi,
Hab´s hingekriegt, danke für den Tipp!!!  ;D
Allerdings musste man noch dem ID-Feld der Hauptkategorie (das ich eigentlich nur zur Kontrolle einblenden wollte, den Wert des Komibfeld5 zuweisen.

Jetzt funktioniert es, wie es soll!!
Danke für die Hilfe!

lg Chainy

database

Sehr gut, freut mich!

Bitte den Thread dann in DEINEM ersten Beitrag auf 'gelöst' setzen - DANKE!