Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Feldwert aus einer anderen Tabelle mit mehreren Kritierien entnehmen

Begonnen von Bernie110, November 30, 2010, 12:34:41

⏪ vorheriges - nächstes ⏩

Bernie110

In Tabelle   "DT_ERFASSUNG"  habe ich folgende Daten bzw Felder angelegt.

LfdNr           = Autowert PK
ABG_Land   = Text_feld   ( ist das Abgangsland )
ABG_PLZ     = Text_Feld  ( ist die Abgangspostleitzahl )
EMPF_Land = Text_Feld  ( ist das Empfangsland )
EMPF_Plz    = Text_Feld  ( Ist die Empfangsplz )
TU_ID         =  Zahlenfeld ( ist die Nr des Spediteurs aus den Kundenstammdaten )

Frachtpfl_Gewicht  = zahlen_Feld  ( Steht für das Gewicht einer Sendung )

Fracht   = Zahlen_Feld ( steht für die Kosten bzw. höhe der Fracht ) hier brauch ich den Wert aus der Tabelle " Tarif_Positionen"
--------------------------------------------------------------------------------------------------------


In der Tabelle " Tarif_Positionen" sind folgende Felder angelegt

LfdNr           = Autowert PK
Von_Land   = Text_feld   ( ist das Abgangsland )
Von_Plz    = Text_Feld  ( ist die Abgangspostleitzahl )
bis_Plz    = Text_Feld  ( ist die Abgangspostleitzahl )
nach_Land = Text_Feld  ( ist das Empfangsland )
PLZ1_von    = Text_Feld  ( Ist die Empfangsplz )
PLZ1_Bis     = Text_Feld  ( Ist die Empfangsplz )
TU_ID         =  Zahlenfeld ( ist die Nr des Spediteurs aus den Kundenstammdaten )
Kg1_von     =  Zahlenfeld ( Angabe der Kilogramm-Gewicht von )
Kg1_Bis     =  Zahlenfeld ( Angabe der Kilogramm-Gewicht bis )
Tarif_Fix    = zahlenfeld  (  = der Frachtbetrag )
----------------------------------------------------------------------------------------------------


So und nun benötige ich den richtigen Tarif_Fix aus Tablle Tarif_positionen nach Fracht  in die Tabelle DT_ERFASSUNG

dabei müssen folgende Kiterien erfüllt sein :

ABG_Land   = Von_Land
 
ABG_PLZ     = Werte sollte zwischen Von_Plz  & bis_Plz liegen

EMPF_Land = nach_Land

EMPF_Plz    = Wert sollte zwischen PLZ1_von  & PLZ1_Bis liegen

TU_ID         = TU_ID

Frachtpfl_Gewicht  = Wert sollte zwischen Kg1_von & Kg1_Bis  liegen

dann soll er den
Wert übernehmen

Fracht = Tarif_Fix

Hoffe ich hab mich nicht zu umständlich ausgedrückt.

Hab mal a bisserl rumgedoktort, krieg aber den vergleich nicht hin :-(

-----------------------------------------------------------------------

If Me!Fracht = 0 Then
On Error GoTo myFehler
Dim strSQL As String
If IsNull(Me!ABG_Land) Or IsNull(Me!ABG_Plz) Or IsNull(Me!EMPF_Land) Or IsNull(Me!EMPF_Plz) Then
Me!Fracht = 0
Exit Sub
End If
Set db = CurrentDb
strSQL = "SELECT a.LfdNr, a.Von_Land, a.Von_Plz, a.bis_Plz, a.nach_Land, a.PLZ1_von, a.PLZ1_Bis, a.TU_ID ,a.Kg1_von, a.Kg1_Bis, Tarif_Fix   "
strSQL = strSQL & " FROM Tarif_Positionen AS a"


strSQL = strSQL & " WHERE a.Von_Land =" & "'" & Me!ABG_Land & "'" & " And a.Von_Plz <> a.bis_Plz '" & Me!ABG_Plz &  "'"
strSQL = strSQL & " And a.nach_Land ='" & Me!EMPF_Land & "'" & " And a.PLZ1_von <> a.PLZ1_Bis  '" & Me!EMPF_Plz & "'"

strSQL = strSQL & " And a.TU_ID ='" & Me!TU_ID & "'"

strSQL = strSQL & " And a.Kg1_von <> a.Kg1_Bis  ='" & Me!Frachtpfl_Gewicht & "'"


Set rs = db.OpenRecordset(strSQL)
Me!Fracht = rs!Tarif_Fix
Set db = Nothing
Set rs = Nothing
Ende:
On Error Resume Next
Exit Sub
myFehler:
If Err.Number = 2113 Then
Me!Fracht = 0
End If
Resume Ende

End If
----------------------------------------------------------

naaja hoffe ihr habt ne kleine Fvorstellung was ich brauch

Danke

gruss
Bernie

DF6GL

Hallo,

ich nehme an, das macht Probleme:
strSQL = strSQL & " And a.Kg1_von <> a.Kg1_Bis  ='" & Me!Frachtpfl_Gewicht & "'"



besser so:

strSQL = strSQL & " And " & Me!Frachtpfl_Gewicht & " between  a.Kg1_von And a.Kg1_Bis "

Dito bei der PLZ, wobei da, weil Text, ein "numerisches between" nur dann geht, wenn die Datentypen tempörar in numerische werte konvertiert werden, z. B:

strSQL = strSQL & " And " & val(Me!EMPF_Plz) & " between val(a.PLZ1_von)  And   val(a.PLZ1_Bis )"




Bernie110

Hmm so ?

Geht aber auch nicht

If Me!TU_Fracht = 0 Then
On Error GoTo myFehler
Dim strSQL As String
If IsNull(Me!ABG_Land) Or IsNull(Me!ABG_Plz) Or IsNull(Me!EMPF_Land) Or IsNull(Me!EMPF_Plz) Then
Me!TU_Fracht = 0
Exit Sub
End If
Set db = CurrentDb

strSQL = "SELECT a.LfdNr, a.Von_Land, a.Von_Plz, a.bis_Plz, a.nach_Land, a.PLZ1_von, a.PLZ1_Bis, a.TU_ID ,a.Kg1_von, a.Kg1_Bis, a.Tarif_Fix"

strSQL = strSQL & " FROM TU_OFFERTE_TARIF_Positionen AS a"

strSQL = strSQL & " WHERE a.Von_Land =" & "'" & Me!ABG_Land & "'"
strSQL = strSQL & " And a.Nach_Land =" & "'" & Me!EMPF_Land & "'"

strSQL = strSQL & " And " & Val(Me!ABG_Plz) & " between val(a.Von_Plz)  And   val(a.bis_Plz )"
strSQL = strSQL & " And " & Val(Me!EMPF_Plz) & " between val(a.PLZ1_von)  And   val(a.PLZ1_Bis )"

strSQL = strSQL & " And a.TU_ID ='" & Me!TU_ID & "'"
strSQL = strSQL & " And " & Me!Frachtpfl_Gewicht & " between  a.Kg1_von And a.Kg1_Bis "



Set rs = db.OpenRecordset(strSQL)
Me!TU_Fracht = rs!Tarif_Fix
Set db = Nothing
Set rs = Nothing
Ende: On Error Resume Next
Exit Sub
myFehler:
If Err.Number = 2113 Then
Me!TU_Fracht = 0
End If
Resume Ende
End If

DF6GL

Hallo,

und WAS geht nicht?  Kein Wert geliefert? Syntxfehler? Laufzeitfehler?

Gibt es überhaupt einen Datensatz mit den angegebenen Kriterien?

Außerdem reicht:


Sub calcFracht()
If Me!TU_Fracht = 0 Then
.
strSQL = "SELECT  a.Tarif_Fix "
strSQL = strSQL & " FROM TU_OFFERTE_TARIF_Positionen AS a"
.
.
.
strSQL = strSQL & " And " & Me!Frachtpfl_Gewicht & " between  a.Kg1_von And a.Kg1_Bis "
Me!TU_Fracht = nz(db.OpenRecordset(strSQL,dbOpensnapshot)(0),0)
Set db = Nothing
Set rs = Nothing
End if

Ende:
Exit Sub

myFehler:
Resume Ende
End Sub

Bernie110

Hallo Franz,

nein er holt keinen Wert.

Ja nach diesen Kriterien gibt es einen Datensatz.

Das ist er


LfdNr   TU_Offerte Tarif_Nr Tarif_Name   Gültig   Kg1_von    Kg1_Bis  Von_Land Von_Plz   bis_Plz   nach_Land   PLZ1_von   PLZ1_Bis   Tarif_Fix   Tarif_je_FpflKg   TU_ID
266        1         11    GS National   WAHR   141,00    180     DE      85622   85622   DE      87000      94999      42,30       0,00       2
In der anderen Tabelle ist :

ABG_LAND = DE
ABG_PLZ   = 85622
EMPF_LAND = DE
EMPF_PLZ = 93449
Frachtpfl_Gewicht  = 150
TU_ID = 2
TU_Fracht = 0

Somit sollte TU_Fracht = 42,30 sein...

Wenn ich diesen o.g. Code ausführe passiert gar nichts .. er mekert nicht einmal.
War der Alte denn wirklich ohne Fehler ?

Gruss
bernie

Bernie110

Ahhhh ich hab den Fehler gefunden. Die verdammten Gänsefüsschen waren es  ;D

so funktionierts nun .

DANKE FRANZ !!!!

If Me!TU_Fracht = 0 Then
On Error GoTo myFehler
Dim strSQL As String
If IsNull(Me!ABG_Land) Or IsNull(Me!ABG_Plz) Or IsNull(Me!EMPF_Land) Or IsNull(Me!EMPF_Plz) Then
Me!TU_Fracht = 0
Exit Sub
End If
Set db = CurrentDb
strSQL = "SELECT a.LfdNr, a.Von_Land, a.Von_Plz, a.bis_Plz, a.nach_Land, a.PLZ1_von, a.PLZ1_Bis, a.TU_ID ,a.Kg1_von, a.Kg1_Bis, a.Tarif_Fix"
strSQL = strSQL & " FROM TU_OFFERTE_TARIF_Positionen AS a"
strSQL = strSQL & " WHERE a.Von_Land ='" & Me!ABG_Land & "'"
strSQL = strSQL & " And a.Nach_Land ='" & Me!EMPF_Land & "'"
strSQL = strSQL & " And " & Val(Me!ABG_Plz) & " between val(a.Von_Plz)  And   val(a.bis_Plz )"
strSQL = strSQL & " And " & Val(Me!EMPF_Plz) & " between val(a.PLZ1_von)  And   val(a.PLZ1_Bis )"
strSQL = strSQL & " And a.TU_ID =" & Me!TU_ID
strSQL = strSQL & " And " & Me!Frachtpfl_Gewicht & " between  a.Kg1_von And a.Kg1_Bis "
Set rs = db.OpenRecordset(strSQL)
Me!TU_Fracht = rs!Tarif_Fix
Set db = Nothing
Set rs = Nothing
Ende:
On Error Resume Next
Exit Sub
myFehler:
If Err.Number = 2113 Then
Me!TU_Fracht = 0
End If
Resume Ende
End If