Neuigkeiten:

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

Mobiles Hauptmenü

Daten vergleichen und bestimmten Wert wiedergeben

Begonnen von lutschi83, November 15, 2016, 09:29:16

⏪ vorheriges - nächstes ⏩

lutschi83

Hallo Leute,
ich komme mit meiner Datenbank nicht weiter, da ich folgendes Problem habe:
Ich habe eine Tabelle "tbl_order_entry" mit den Spalten
"Distributor" (Kombinationsfeld, Typ Zahl mit dem Wert: SELECT [tbl_dist].[tbl_dist_id], [tbl_dist].[dist_code] FROM tbl_dist;)
"User" (Kombinationsfeld, Typ Text mit dem Wert: SELECT [qry_user].[User] FROM qry_user; )
"Article" (Kombinationsfeld, Typ Zahl mit dem Wert: SELECT tbl_pricelist.tbl_pricelist_id, tbl_pricelist.materialnr FROM tbl_pricelist; )
"Type" (wird aus Formular gefüllt mit folgendem Befehl: Me.type.Value = DLookup("type", "tbl_selling_pricelist", "[article_number] = '" & article.Text & "'")
"selling_price" (Typ Zahl)
In der Tabelle tbl_selling_pricelist gibt es ein berechnetes Feld "Price_code" welches sich aus Distributor & User & Type & article_number zusammensetzt. Dieser Price_code hat einen bestimmten "selling_price".

Meine Frage ist: Wie kann ich in dem Formular "frm_order_entry" für eine neue angelegte Bestellung prüfen lassen ob die Kombination Distributor, User, Type, Article_number in der Tabelle tbl_selling_pricelist vorhanden ist und den dort hinterlegten selling_price eintragen lassen. Falls die Kombination nicht vorhanden ist, dann soll das Feld leer bleiben.

Ich hab es schon mit dlookup versucht, doch irgendwie funktioniert das nicht?
Gibt es vielleicht auch eine andere Möglichkeit, die Prüfung durchzuführen?

Vielen Dank schon einmal für eure Hilfe!


lutschi83

Und wie soll ich es dann handhaben?
Hast du vielleicht Tipps?

lutschi83

#3
Hallo, ich hab es hinbekommen.
ZitatMe.type.Value = DLookup("type", "tbl_selling_pricelist", "[article_number] = '" & article.Text & "'")
Dim xyz As String
xyz = DLookup("selling_price", "tbl_selling_pricelist", "[price_code] = '" & price_code & "'")
Me.selling_price.Value = xyz
End Sub

Jetzt hab ich nur das Problem, wenn es keine Übereinstimmung gibt, soll er in der Tabelle tbl_pricelist zum Material den "net_price" heraussuchen.

Wie kann ich das noch in meinem Befehl einbauen.

Danke schon einmal

DF6GL

Hallo,

indem:

-- die Kombifelder aus den Tabellen geworfen werden.
-- die Tabellenbeziehungen korrekt (der realen Situation angepasst) erstellt werden.
-- berechnete Werte nicht in Tabellenfelder gespeichert werden.
-- "Kombination" ("Price_code") mit einer Zuordnungstabelle realisiert werden.
-- Formulare für jede Tabelle angelegt werden. 1:n Beziehungen bei Verlaufstabellen  mit HFO/UFO-Konstruktion abbliden.
-- Daten aus Stammdaten- (Nachschlage-) Tabellen mit Form-Kombinationsfeldern (Steuerelemente) ausgewählt (und damit entspr. den Bezihungen zugeordnet) werden.


PS:

Deinen Code halte ich für sehr fragwürdig. 

1) In welcher Ereignisprozedur steht der Code?
2) Ist "Selling_price" mit Datentyp TEXT definiert?
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

lutschi83

Danke für die Antwort.
Ich hab es irgendwie hinbekommen, aber wie du schon sagst, wahrscheinlich sehr fragwürdig und umständlich:
Folgende Ereignisprozedur hab ich erstellt:
ZitatPrivate Sub article_afterUpdate()

Me.type.Value = DLookup("type", "tbl_selling_pricelist", "[article_number] = '" & article.Text & "'")

Dim xyz As String

If IsNull(xyz = DLookup("selling_price", "tbl_selling_pricelist", "[price_code] = '" & price_code & "'")) = True Then

xyz = DLookup("net_price", "tbl_pricelist", "[materialnr] = '" & article & "'")

Else

xyz = DLookup("selling_price", "tbl_selling_pricelist", "[price_code] = '" & price_code & "'")

End If

Me.selling_price.Value = xyz

End Sub

Was kann ich daran verbessern bzw. wo findest du dass ich zu "fragwürdig" bin.
Ich bin Neuling und du sagst ja selbst
Zitatlearning by doing

DF6GL

Hallo,

naja, ich habe ja beim Code und nicht bei Dir von "fragwürdig" gesprochen... 8)

"Learning by doing" erlebst  Du ja gerade und es hindert niemanden daran, Fragen zu stellen.  :)



Private Sub article_afterUpdate()
Me![type]= DLookup("type", "tbl_selling_pricelist", "[article_number] = '" & Me!article.Text & "'") ' "type" sollte als Name vermieden werden
Me!selling_price=DLookup("selling_price", "tbl_selling_pricelist", "[price_code] = '" & Me!price_code & "'")
End Sub



reicht vollauf, um die Vorgabe zu erfüllen.



Kommentare:
Zitat

Private Sub article_afterUpdate()

Me!type.Value = DLookup("type", "tbl_selling_pricelist", "[article_number] = '" & Me!article.Text & "'")   ' Ausrufezeichen bei Objekt-Verweisen nehmen, Value ist überflüssig, .Text ist falsch, weil Cursor möglicherweise nicht mehr in diesem Feld.
'"Type" ist ein reserviertes Wort und muss zwingend in Eckklammern stehen.

Dim xyz As String

If IsNull(xyz = DLookup("selling_price", "tbl_selling_pricelist", "[price_code] = '" & price_code & "'")) = True Then
' Zuweisung eines "Double" oder "Währungs"- Feldes an einen String ist logisch fehlerhaft
' Anwenden der Isnull-Funktion an einen boolschen Ausdruck  (xyz = DLookup...)  ist sinnlos.
' IsNull kann nur auf Variablen vom Datentyp Variant angwendet werden.
xyz = DLookup("net_price", "tbl_pricelist", "[materialnr] = '" & Me!article & "'")
'Auslesen von "net_price" als Alternativwert ist nicht Bestandteil Deiner Anforderung: "Falls die Kombination nicht vorhanden ist, dann soll das Feld leer bleiben"

Else

xyz = DLookup("selling_price", "tbl_selling_pricelist", "[price_code] = '" & Me!price_code & "'") ' Referenzen auf Form-Steuerelemente immer mit "Me" schreiben.

End If

Me!selling_price.Value = xyz   ' Me!selling_price ist ab sofort vom Daten(unter)typ Variant/TEXT, was vermutlich nicht erwünscht ist.

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