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!
Access Anfänger: Die Nachteile von Nachschlagefeldern (https://dbwiki.net/wiki/Access_Anf%C3%A4nger:_Die_Nachteile_von_Nachschlagefeldern)
Und wie soll ich es dann handhaben?
Hast du vielleicht Tipps?
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
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?
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
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 Subreicht 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