November 23, 2020, 17:00:28

Neuigkeiten:

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


Auswahlabfrage abhängig von Kombinationsfeld aus Formuar

Begonnen von Lemming, Oktober 07, 2020, 16:03:24

⏪ vorheriges - nächstes ⏩

Lemming

Hallo zusammen,

ich habe eine Tabelle tbl_Artikel mit den Feldern
Artikelnummer
Preisliste1
Preisliste2

Mittels Kombinationsfeld wird "Preisliste1" oder "Preisliste2" ausgewählt.

Wenn ich eine Abfrage erstelle, muss ich in dieser festlegen, welche Felder aus der "tbl_Artikel" berücksichtigt werden sollen.
Ist es möglich, in der Abfrage die Auswahl der Felder von einem Kombinationsfeld abhängig zu machen?

Hintergrund ist, dass Angebote nach vorgegebenen Stücklisten erstellt werden sollen. Die Artikelpreise sollen abhängig von der ausgewählten Preisliste zugeordnet werden.

In einem Formular klappt das mit
ZitatMe!Angebot_Preis = DLookup(Forms!Angebot_frm!Preisliste, "tbl_Artikel", _
                             "[Artikelnummer]='" & Me!Angebot_Artikelnummer & "'")

Kann ich Forms!MeinFormular!MeinSteuerelement auch in einer Abfrage zur Auswahl einen Tabellenfeldes verwenden?

Vielen Dank vorab für eure Hilfe.

Gruß
Michael

Maxel

Oktober 07, 2020, 22:53:19 #1 Letzte Bearbeitung: Oktober 07, 2020, 23:00:00 von Maxel
Hallo,

etwa so nach Aktualisierung des Kombifeldes cboPreisliste, sofern die Preisliste dessen gebundene Spalte ist:

Dim strSQL As String
strSQL = "Select Artikelnummer, " & Me.cboPreisliste & " From tblArtikel"
DeineAbfrage.SQL = strSQL
Me.Requery

Es gibt aber sicher bessere Lösungen des Formular-Layouts.


Gruß
Maxel

Lemming

Hallo Maxel, vielen Dank für deine Antwort.
Bevor ich den Weg über die Abfrage weiter gehe, würde ich doch lieber mit dem bereits funktionierendem Code arbeiten:

Me!AngPos_Preis = DLookup(Forms!mn_Angebot_anzeigen_frm!PL_Temp, "tbl_mn_Artikelliste", _
                             "[Artikelnummer]='" & Me!AngPos_Artikelnummer & "'")

Ich bitte um Entschuldigung dafür, dass die Überschrift jetzt nicht mehr passt.

Ich befinde mich im Hauptformular mn_Angebot_anzeigen_frm.
Die Datensätze befinden sich im Unterformular mn_Angebotspositionen_frm (Endlosformular).
Durch Klick auf die Schaltfläche Befehl440 im Hauptformular sollen alle Datensätze im Unterformular durchlaufen und jeweils der richtige Preis eingetragen werden. Das versuche ich mit folgendem Code.

Private Sub Befehl440_Click()
    Forms!mn_Angebot_anzeigen_frm!mn_Angebotspositionen_frm!AngPos_Artikelnummer.SetFocus
   
    Dim rsf As Recordset
    Set rsf = Me.[mn_Angebotspositionen_frm].Form.RecordsetClone
   
    rsf.MoveFirst
    Do Until rsf.EOF
        With rsf
            Forms!mn_Angebot_anzeigen_frm!mn_Angebotspositionen_frm.Form!AngPos_Preis = DLookup(Forms!mn_Angebot_anzeigen_frm!PL_Temp, "tbl_mn_Artikelliste", _
                             "[Artikelnummer]='" & Forms!mn_Angebot_anzeigen_frm!mn_Angebotspositionen_frm.Form!AngPos_Artikelnummer & "'")
        End With
    rsf.MoveNext
    Loop
End Sub

Leider wird nur der Preis im ersten Datensatz eingetragen. Kann mir jemand sagen, was ich falsch gemacht habe?

Gruß
Michael
 

DF6GL

Oktober 08, 2020, 08:42:00 #3 Letzte Bearbeitung: Oktober 08, 2020, 09:53:41 von DF6GL
Hallo,

die ganze Konstruktion ist verquert.

ZitatBevor ich den Weg über die Abfrage weiter gehe, würde ich doch lieber mit dem bereits funktionierendem Code arbeiten:

ist kontraproduktiv.

wenn überhaupt , dann etwa so:

Private Sub Befehl440_Click()
Dim rsf As Dao.Recordset
Set rsf = Me![mn_Angebotspositionen_frm].Form.RecordsetClone
   
With rsf   
   If not (.BOF and .EOF) then
   .MoveFirst
       Do Until .EOF
           .Edit
                !AngPos_Preis = DLookup(Me!PL_Temp.Controlsource, "tbl_mn_Artikelliste", _
                                                           "[Artikelnummer]='" & !AngPos_Artikelnummer & "'")

'bzw. wenn "PL_Temp" ein ungebundenes Textfeld im HF ist und dessen Inhalt den Namen eines Tabellenfeldes darstellt:
'  !AngPos_Preis = DLookup(Me!PL_Temp.Value, "tbl_mn_Artikelliste", _
'                                                           "[Artikelnummer]='" & !AngPos_Artikelnummer & "'")


           .Update   
           .MoveNext
       Loop
   End If
End With

set rsf = Nothing
End Sub

Lemming

Vielen Dank für deine Hilfe.

Es erscheint die Fehlermeldung: Fehler beim Kompilieren: Methode oder Datenobjekt nicht gefunden

.rsf wird in folgender Zeile markiert:
If not (.rsf.BOF and .EOF) then
In der Funktion habe ich noch Me vor !AngPos_Preis ergänzt.

Das Feld PL_Temp befindet ich im HF. Kann ich es trotzdem mit Me! ansprechen?

DF6GL

Oktober 08, 2020, 09:31:44 #5 Letzte Bearbeitung: Oktober 08, 2020, 09:50:14 von DF6GL
Hallo,


Zitat(.rsf.BOF and .EOF)
das ist ein Tippfehler,

ZitatIn der Funktion habe ich noch Me vor !AngPos_Preis ergänzt.


Das ist falsch! Wo befindet sich dieses Feld?



ZitatDas Feld PL_Temp befindet ich im HF. Kann ich es trotzdem mit Me! ansprechen?


Wir befinden uns im HF.  Da braucht es nur ME.

Evtl. muss es
  !AngPos_Preis = DLookup(Me!PL_Temp.Controlsource, "tbl_mn_Artikelliste", _  lauten.


Ich nehme jetzt an, dass "AngPos_Artikelnummer"  im UF zu finden ist...

Habe den Code korrigiert/angepasst (im letzten Post)



Lemming

Evtl. muss es
Code[Auswählen]
  !AngPos_Preis = DLookup(Me!PL_Temp.Controlsource, "tbl_mn_Artikelliste", _
lauten.

Mein Fehler, Me!PL_Temp ist richtig.

Besten Dank, es klappt.  :)

Beaker s.a.

Hallo,
ZitatMittels Kombinationsfeld wird "Preisliste1" oder "Preisliste2" ausgewählt.

Wenn ich eine Abfrage erstelle, muss ich in dieser festlegen, welche Felder aus der "tbl_Artikel" berücksichtigt werden sollen.
Danach, würde ich behaupten, stimmt das Datenmodell nicht.
Wenn ein Artikel auf mehr als einer Preisliste auftaucht gehört diese
Beziehung in eine Zwischentabelle (n:m).
Dann bezieht sich die Abfrage immer auf das gleiche Feld (FK zur n:m).
Oder willst du deine Tabelle jedes mal verbreitern und deine(n) Abfrage/
Code ergänzen wenn eine neue PL dazu kommt?

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.

Lemming

Hallo,
ZitatWenn ein Artikel auf mehr als einer Preisliste auftaucht gehört diese
Beziehung in eine Zwischentabelle (n:m).
Du hast recht, das ist viel einfacher.
Besten Dank für den Hinweis.

Ich werde die Sonderpreise aus der tbl_Artikelliste streichen und zwei neue Tabellen tbl_Sonderpreislisten und tbl_Sonderpreise erstellen.

Schönes Wochenende!  :)