Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Bernie110 am März 08, 2011, 10:25:28

Titel: Probleme mit Code
Beitrag von: Bernie110 am März 08, 2011, 10:25:28
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 !
Titel: Re: Probleme mit Code
Beitrag von: asiat am März 08, 2011, 13:08:52
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"
Titel: Re: Probleme mit Code
Beitrag von: Bernie110 am März 08, 2011, 13:13:05
Hallo Asiat,

nein funktioniert leider auch nicht  :-\

Gruss
bernie
Titel: Re: Probleme mit Code
Beitrag von: bahasu am März 08, 2011, 13:40:54
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
Titel: Re: Probleme mit Code
Beitrag von: Bernie110 am März 08, 2011, 14:14:08
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
Titel: Re: Probleme mit Code
Beitrag von: MzKlMu am März 08, 2011, 14:55:06
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.
Titel: Re: Probleme mit Code
Beitrag von: imp666 am März 08, 2011, 16:50:56
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.
Titel: Re: Probleme mit Code
Beitrag von: Bernie110 am März 08, 2011, 17:22:32
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 :-(


Titel: Re: Probleme mit Code
Beitrag von: database am März 08, 2011, 21:01:15
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?

Titel: Re: Probleme mit Code
Beitrag von: Bernie110 am März 09, 2011, 09:49:25
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
Titel: Re: Probleme mit Code
Beitrag von: Bernie110 am März 09, 2011, 11:02:06
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)"
Titel: Re: Probleme mit Code
Beitrag von: MzKlMu am März 09, 2011, 17:39:46
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.