Hallo,
ich hab ein kleines Problem mit folgendem Code.
Und zwar mit der "fett" makierten Stelle
Das Problem ist, dass (a.NachVonPlz) And val(a.NachBisPlz ) die gleiche Plz enthalten können.
Beispiel:
Wenn in der Tbl StammLeitweg folgender DS eingegeben wurde, dann findet dieser Code keinen LTW.(Leitweg)
D.h. dieser Code bezieht die Möglichkeit einer genauen Postleitzahlen Definition nicht mit ein, sprich
Wenn Me!EMPF_Plz = 22100 dann sollte Hamburg erscheinen
= eingabe in StammLeitwege
LTWnr = HAMBURG = NachBisPlz = 22100 Feld NachBisPlz = 22100
------------------------------------------------------------------
'LEITWEG ZIEHEN
'---------------------------------------------------------------------------------------------------
On Error GoTo myFehler
Dim strSQL As String
MsgBox "ltw"
Set DB = CurrentDb
strSQL = "SELECT a.LfdNr, a.AbLand, a.NachLand, a.AbPlz, a.NachVonPlz, a.NachBisPlz, a.LTWNr"
strSQL = strSQL & " FROM StammLeitweg AS a"
strSQL = strSQL & " WHERE a.AbLand ='" & Me!ABG_Land & "'"
strSQL = strSQL & " And a.NachLand ='" & Me!EMPF_Land & "'"
strSQL = strSQL & " And a.AbPlz ='" & Me!ABG_Plz & "'"
strSQL = strSQL & " And " & Val(Me!EMPF_Plz) & " between val(a.NachVonPlz) And val(a.NachBisPlz )"MsgBox "ltw gezogen"
Set rs = DB.OpenRecordset(strSQL)
Me!LTW = rs!LTWNr
Set DB = Nothing
Set rs = Nothing
Ende:
On Error Resume Next
Exit Sub
myFehler:
If Err.Number = 2113 Then
Me!LTW = "SPEDITION"
End If
Resume Ende
macht er aber nicht >:(
Kann mir jemand helfen ?
danke & Gruss bernie !
hallo,
ich habe zwar wenig Ahnung von vba aber muss es nicht so sein ?
ZitatstrSQL = strSQL & " And " & Val(Me!EMPF_Plz) & " between " & val(a.NachVonPlz) & " And " & val(a.NachBisPlz ): MsgBox "ltw gezogen"
Hallo Asiat,
nein funktioniert leider auch nicht :-\
Gruss
bernie
Hi Bernie
und was passiert, wenn Du statt between ein Konstrukt in der Art:
... Val(Me!EMPF_Plz) & " >= val(a.NachVonPlz) & " And Val(Me!EMPF_Plz) <= " & val(a.NachBisPlz )
verwendest?
Vermutlich geht das obige nicht, da es keine (ganzzahligen) Zahlen zwischen {between} 22100 und 22100 gibt.
Harald
Hi Bahasu,
es handel sich ja nicht um zahlenfelder.
a.NachVonPlz & Me!EMPF_Plz & a.NachBisPlz = textfelder.
Ich habe textfelder für Postleitzahlen gewählt, da in England ja Buchstaben als Plz verwendet werden.
Funktioniert leider auch nicht.
Gruss Bernie
Hallo,
was willst Du mit dem Val wenn es Textfelder sind.
Versuche es mal so:
strSQL = "SELECT LfdNr, AbLand, NachLand, AbPlz, NachVonPlz, NachBisPlz, LTWNr"
strSQL = strSQL & " FROM StammLeitweg"
strSQL = strSQL & " WHERE AbLand ='" & Me!ABG_Land & "'"
strSQL = strSQL & " And NachLand ='" & Me!EMPF_Land & "'"
strSQL = strSQL & " And AbPlz ='" & Me!ABG_Plz & "'"
strSQL = strSQL & " And '" & Me!EMPF_Plz & "' between NachVonPlz And NachBisPlz"
Der Alias (a) ist hier denke ich nicht notwendig.
Hoffe ich hab das richtig verstanden, du möchtest im SQL-String berücksichtigen, dass val(a.NachBisPlz ) und val(a.NachVonPlz) identisch sein können und diesbezüglich die SQL-Syntax verändern.
Das macht einer meinr Lieblingsbefehle: "IIF".
Die Zeile
strSQL = strSQL & " And " & Val(Me!EMPF_Plz) & " between val(a.NachVonPlz) And val(a.NachBisPlz )"
wird dann zu:
strSQL = strSQL & " And " & Val(Me!EMPF_Plz) & _
iif(val(a.NachVonPlz)=val(a.NachBisPlz )," = " & val(a.NachBisPlz )," between val(a.NachVonPlz) And val(a.NachBisPlz )")
Warum du "val" verwendest leuchtet mir übrigens auch nicht ein.
Wenn mehr als 1 Datensatz mit der gleichen PLZ existiert, dann kann man das mit "GROUP BY" oder "UNIQUE" in der SQL-Syntax auf ein einzelnes Ergebnisse reduzieren.
Hallo nochmals,
nein funktioniert immer noch nicht.
@ imp666
Es passiert leider gar nichts..
Nur wenn ich diese zeile
strSQL = strSQL & " And " & Val(Me!EMPF_Plz) & " between val(a.NachVonPlz) And val(a.NachBisPlz )"
mit
strSQL = strSQL & " And a.NachVonPlz ='" & Me!EMPF_Plz & "'"
Ersetze, dann funktiniert es..
allerdings fallen dann alle anderen die unterschiedliche Plz haben weg :-(
Hallo,
1. Ich habe textfelder für Postleitzahlen gewählt, da in England ja Buchstaben als Plz verwendet werden
Das leuchtet ein
2. VAL gibt den numerischen Wert in einer Zeichenfolge am Anfang enthaltener Zahlen zurück (Datentyp Double).
Welche Daten stehen in deinen Feldern und in deiner Tabelle, wenn du die Vergleiche machen lässt?
Welches Ergebnis liefert denn eine Abfrage, die du im Abfrageeditor mit den GLEICHEN Kriterien auf die Tabelle absetzt?
Hallo Data,
also
Im prinzip ist die Tabelle Stammleitweg folgender massen aufgebaut :
LfdNr = Autowert + PK
LTWNr = Textfeld
AbLand = Textfeld
AbPlz = Textfeld
NachLand = Textfeld
NachvonPlz = Textfeld
NachBisPlz = Textfeld
Der Dateninnhalt sieht folgendemassen aus :
LfdNr LTWNr Abland AbPlz NachLand NachvonPlz NachbisPlz
1 Spedition DE 85622 DE 70000 79999
2 Regensburg DE 85622 DE 93000 93999
3 UPS DE 85622 DE leer leer
4 Innenstadt DE 85622 DE 80331 80331
5 Innenstadt DE 85622 DE 80333 80333
6 Innenstadt DE 85622 DE 80539 80539
7 Stadt West DE 85622 DE 80638 80638
Die Sendungsdaten werden in die Tabelle DT-Erfassung eingegeben.
Es gibt ein Formular zu dieser Tabelle das auch DT_Erfassung heisst.
in diesem gibt es folgende Felder.
ABG_Land = Textfeld = Abgangsland
ABG_Plz = Textfeld = Abgangsplz
EMPF_Land = Textfeld = Empfangsland
EMPF_PLZ = Textfeld = Empfangs-plz
LTW = Textfeld = Leitweg
Der Code wird ausgeführt sobald man die Taste BT_Speichern drückt.
Nun soll er bei folgende zwei beispielen folgendes machen.
gibt man in DT-Erfasssung zb ein :
ABG_Land = Textfeld = DE
ABG_Plz = Textfeld = 85622
EMPF_Land = Textfeld = DE
EMPF_PLZ = Textfeld = 80539
Dann das Feld LTW mit der entsprechenden LTWNr aus der TBL Stammleitwege befüllt werden.
in diesem Fall wäre es dann LTW = LTWNr = Innenstadt
Wäre der Fall bei DT-Erfassung so :
ABG_Land = Textfeld = DE
ABG_Plz = Textfeld = 85622
EMPF_Land = Textfeld = DE
EMPF_PLZ = Textfeld = 93021
Sollte dann LTW = Regensburg sein
Abfrage ? Noch zieh ich mir die Daten aus der Tbl Stammleitwege .. mittels eines UFOs "DTStammLeitwegUFO"
Aus dem ich dann mit einem unverknüpften Feld : Me!LeitwegÜbernahme ( =[DTStammLeitwegUFO].[Formular]![LTWNr] )
den LTW übernehme.
'*********** LEITWEG ERMITTLUNG ********************************
If Len(Nz(Me!EMPF_Plz, "")) = 5 Then
With Me!DTStammLeitwegUFO.Form
.Filter = "NachVonPlz <= '" & Me!EMPF_Plz & "' " & _
"AND NachBisPlz >= '" & Me!EMPF_Plz & "'"
.FilterOn = True
End With
Else
With Me!DTStammLeitwegUFO.Form
.Filter = ""
.FilterOn = False
End With
End If
If Me!DTStammLeitwegUFO.Form.Recordset.RecordCount > 0 Then
Me!LTW = Me!LeitwegÜbernahme
Else
Me.LTW = "SPEDITION"
End If
ja ich weiss, das ist schwachsinn ;-) deshalb versuch ich es ja mit einem Code..
Gruss Bernie
Ok ich hab den Fehler gefunden.
MzKlMu sein Code hatte einen kleinen Fehler... die Klammer war zuviel...jetzt sollte es funktionieren *hoff*
Danke @all
strSQL = "SELECT LfdNr, AbLand, NachLand, AbPlz, NachVonPlz, NachBisPlz, LTWNr"
strSQL = strSQL & " FROM StammLeitweg"
strSQL = strSQL & " WHERE AbLand ='" & Me!ABG_Land & "'"
strSQL = strSQL & " And NachLand ='" & Me!EMPF_Land & "'"
strSQL = strSQL & " And AbPlz ='" & Me!ABG_Plz & "'"
strSQL = strSQL & " And '" & Me!EMPF_Plz & "' between NachVonPlz And NachBisPlz)"
Hallo,
sorry, für den Flüchtigsfehler, die Klammer muss natürlich raus. Habe es oben geändert.
PS:
Auch in Deutschland empfiehlt sich die PLZ als Text anzulegen, das es im wilden Osten ;D PLZ mit führenden 0en gibt und da geht eine Zahl auch nicht.