Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" 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