August 06, 2020, 20:15:51

Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!


Kombifeld-abhängiges Listenfeld: Parameter eingeben Fehler wenn in Nav-Formular

Begonnen von maddhin, Juli 20, 2020, 11:28:06

⏪ vorheriges - nächstes ⏩

maddhin

Hallo,

hat jemand eine Idee woran das liegen könnte:

Ich habe ein Suchformular (basiert auf einer Abfrage) mit einem Kombifeld (cboCorpBizCat1) und einem Listenfeld zum Filtern. Das Listenfeld ist abhängig vom Kombifeld. D.h. ich habe hier das Kombifeld als Kriterium unter Datensatzherkunft ([Formulare]![frmSearchProduct]![cboCorpBizCat1]) beim Listenfeld angegeben. Das Ganze funktioniert auch.

Jetzt habe ich aber das Formular (frmSearchProduct) in ein Navigationsformular eingebunden (2. Ebene) und es kommt immer die Meldung "Parameterwert eingeben: [Formulare]![frmSearchProduct]![cboCorpBizCat1]". Wenn ich das Formular direkt (also nicht über der Navigation) öffne, funktioniert es problemlos.

Hat jemand eine Idee, was ich hier falsch mache bzw. was hier passiert?

Zur Info, falls relevant, noch das AfterUpdate Event der Kombi:
Private Sub cboCorpBizCat1_AfterUpdate()
Dim mycompany As String
mycompany = "select * from qrysearchproductlist where ([ID_Cat1_biz] = " & Me.cboCorpBizCat1 & ")"
Me.fsubSearchProductList.Form.RecordSource = mycompany
Me.fsubSearchProductList.Form.Requery
Me.lstProductCatList.Requery
End Sub

und für das Listenfeld:
Private Sub lstProductCatList_AfterUpdate()
Dim varItem As Variant
Dim strSearch As String
Dim Task As String

For Each varItem In Me!lstProductCatList.ItemsSelected
    strSearch = strSearch & "," & Me!lstProductCatList.ItemData(varItem)
Next varItem
'MsgBox (strSearch)
If Len(strSearch) = 0 Then
    Task = "select * from qrysearchproductlist"
Else
    strSearch = Right(strSearch, Len(strSearch) - 1)
    'MsgBox (strSearch)
    Task = "select * from qrysearchproductlist where ([ID_cat2_product] in (" & strSearch & "))"
   
End If
    Me.fsubSearchProductList.Form.RecordSource = Task
    Me.fsubSearchProductList.Form.Requery
End Sub

DF6GL

Hallo,

Hat jemand eine Idee, was ich hier falsch mache bzw. was hier passiert?
Ja, und zwar dieses:

Die in der Abfrage eingebaute Parameter ist eine feste Referenz auf ein Steuerelement in einem Formular, das als solches auch geöffnet (geladen) sein muss.

Wird dieses Formular als UFO in ein anderes Form (Navigationsformular) eingebunden, so ist/wird das Formular nicht "normal" geöffnet und existiert als solches zu diesem Zeitpunkt nicht, so dass die Referenz ins Leere läuft.

Insofern ist die Parameter-Referenz (an die Eigenheiten eines Standard-Navigationsformulars) anzupassen:

Forms!Navigationsformular!Navigationsunterformular!cboCorpBizCat1


Eine solche Methode der Parameter-Verwendung (Formularreferenz) ist allerdings nicht empfehlenswert, aus offensichtlichen und unflexiblen Gründen.

maddhin

Zitat von: DF6GL am Juli 20, 2020, 20:27:05Eine solche Methode der Parameter-Verwendung (Formularreferenz) ist allerdings nicht empfehlenswert, aus offensichtlichen und unflexiblen Gründen.


Lieben Dank für die Hilfe und: Stimmt! D.h. kein Navigationsformular benutzen? Oder welche Methode würdest Du hier empfehlen?

DF6GL

Hallo,

naja, den SQL-String für das Listenfeld per VBA dynamisch zusammensetzen und der Rowsource-Eigenschaft zuweisen oder die Parameterliste der Abfrage bearbeiten.

maddhin


maddhin

So, ich bin es nochmal...

Ich habe es geschafft:

Private Sub cboCorpBizCat1_AfterUpdate()
Dim mycompany As String

'filtering search list based on cbo choice
mycompany = "select * from qrysearchproductlist where ([ID_Cat1_biz] = " & Me.cboCorpBizCat1 & ")"
Me.fsubSearchProductList.Form.RecordSource = mycompany
Me.fsubSearchProductList.Form.Requery

'filling of the listbox acc cbo value
Me.lstProductCatList.RowSourceType = "Table/Query"
Me.lstProductCatList.RowSource = "SELECT tbl_Cat2_Product.ID_Cat2_Product, tbl_Cat2_Product.Cat_Name, tbl_Cat2_Product.ID_Cat1_Biz FROM tbl_Cat2_Product WHERE ([ID_Cat1_biz] = " & Me.cboCorpBizCat1 & ") ORDER BY tbl_Cat2_Product.Cat_Name"
Me.lstProductCatList.Requery
End Sub

Der Code ist im AfterUpdate Event der Kombibox und das Listenfeld wird gefüllt.

Das einzige was ich jetzt in diesem Zusammenhang noch rausfinden muss, ist wie man diese Zeilenumbrüche hinbekommt, dass man schick FROM/WHERE/ORDER BY untereinander hat. Bei mir meckert Access entweder wegen "erwartetem Ausdrucksende" oder es passiert nichts mit der Listenbox...

Danke für die Hilfe!

Beaker s.a.

Hallo Martin,
Dazu dient die Zeilenverbindungszeichenfolge Leerzeichen gefolgt von einem
Unterstrich " _".
Me.lstProductCatList.RowSource =
    "SELECT CP.ID_Cat2_Product, CP.Cat_Name, CP.ID_Cat1_Biz" _
  & " FROM tbl_Cat2_Product AS CP" _
  & " WHERE CP.ID_Cat1_biz = " & Me.cboCorpBizCat1 _
  & " ORDER BY CP.Cat_Name"
Bei dieser Abfrage bräuchtest du im Prinzip gar keine Tabellenreferenz
bei den Feldern, da nur eine einzige Tabelle angesprochen wird. Ich
habe es mir allerdings angewöhnt nicht darauf zu verzichten.
Das Ampersand (&) kannst du auch ans Ende einer Zeile setzen
    "SELECT CP.ID_Cat2_Product, CP.Cat_Name, CP.ID_Cat1_Biz" & _
    " FROM tbl_Cat2_Product AS CP" & _

gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.

maddhin

Zitat von: Beaker s.a. am Juli 21, 2020, 15:42:18Dazu dient die Zeilenverbindungszeichenfolge Leerzeichen gefolgt von einem
Unterstrich " _".
Lieben Dank, Ekkehard!

Ich habe damals alles probiert, aber jetzt erst gesehen, dass das erste Zeichen nach " ein Leerzeichen sein muss! Das hat den Unterschied gemacht! Die SELECT Zeile bekomme ich aber nur so in eine neue Zeile (eigentlich inkonsequent ohne "&"):
Me.lstProductCatList.RowSource = _
      " SELECT tbl_Cat2_Product.ID_Cat2_Product, tbl_Cat2_Product.Cat_Name, tbl_Cat2_Product.ID_Cat1_Biz" _
    & " FROM tbl_Cat2_Product" _
    & " WHERE ([ID_Cat1_biz] = " & Me.cboCorpBizCat1 & ")" _
    & " ORDER BY tbl_Cat2_Product.Cat_Name"

Zitat von: Beaker s.a. am Juli 21, 2020, 15:42:18Bei dieser Abfrage bräuchtest du im Prinzip gar keine Tabellenreferenz
bei den Feldern, da nur eine einzige Tabelle angesprochen wird.
Super, wieder was gelernt!

Beaker s.a.

Hallo,
Ja, sorry den fehlenden " _" hinter " = " hab' ich übersehen.
Und das da kein "&" davor muss ist klar, - das ist ja der Anfang
des Strings, also nix davor zum Dranhängen.
gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.