Neuigkeiten:

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

Mobiles Hauptmenü

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

#1
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.


Viele Grüße
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

#3
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
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

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

#5
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)


Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

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
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

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!  :)