Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: lutschi83 am November 15, 2016, 09:29:16

Titel: Daten vergleichen und bestimmten Wert wiedergeben
Beitrag von: lutschi83 am November 15, 2016, 09:29:16
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!
Titel: Re: Daten vergleichen und bestimmten Wert wiedergeben
Beitrag von: ebs17 am November 15, 2016, 09:37:31
Access Anfänger: Die Nachteile von Nachschlagefeldern (https://dbwiki.net/wiki/Access_Anf%C3%A4nger:_Die_Nachteile_von_Nachschlagefeldern)
Titel: Re: Daten vergleichen und bestimmten Wert wiedergeben
Beitrag von: lutschi83 am November 15, 2016, 10:36:45
Und wie soll ich es dann handhaben?
Hast du vielleicht Tipps?
Titel: Re: Daten vergleichen und bestimmten Wert wiedergeben
Beitrag von: lutschi83 am November 15, 2016, 11:51:45
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
Titel: Re: Daten vergleichen und bestimmten Wert wiedergeben
Beitrag von: DF6GL am November 15, 2016, 11:54:51
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?
Titel: Re: Daten vergleichen und bestimmten Wert wiedergeben
Beitrag von: lutschi83 am November 15, 2016, 12:42:58
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
Titel: Re: Daten vergleichen und bestimmten Wert wiedergeben
Beitrag von: DF6GL am November 15, 2016, 13:10:52
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