Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Probleme mit Code

Begonnen von Bernie110, März 08, 2011, 10:25:28

⏪ vorheriges - nächstes ⏩

Bernie110

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 !

asiat

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"

Bernie110

Hallo Asiat,

nein funktioniert leider auch nicht  :-\

Gruss
bernie

bahasu

#3
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
Servus

Bernie110

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

MzKlMu

#5
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.
Gruß Klaus

imp666

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.

Bernie110

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 :-(



database

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?


Bernie110

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

Bernie110

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)"

MzKlMu

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.
Gruß Klaus