# SQL Select Befehl in vba access funktioniert richtig



## Airmexx (8. Juli 2010)

Sorry, das ich wieder mein problem hier posten muss...

habe folgenden SQL befehl

```
sqlid = ("SELECT ID_urlaub FROM tbl_azubi_urlaub WHERE '(urlaub_von = " & txtvon & " AND urlaub_bis = " & txtbis & " AND Personalnummer = " & sqlper & ")'")
        Set rec3 = CurrentDb.OpenRecordset(sqlid, dbOpenSnapshot)
        idurlaub = rec3.Fields("ID_urlaub")
```

meine tabelle ID_urlaub hat folgenden auf bau:
ID_urlaub, Personalnummer, urlaub_von, urlaub_bis, Bemerkungen

das problem ist jetzt, das wenn mehrere einträge vorhanden sind, mit (natürlich) unterschiedlichen ID´s, nimmt er immer die erste ID, obwohl das Datum überall verschieden ist

danke...


----------



## Steiner_B (8. Juli 2010)

Hatten wir die selbe Anfrage heute nicht schon mal in nem anderen Thread?
Selbes Problem wie dort schon besprochen. Du darst bei den Klammern vom WHERE keine ' setzen.


----------



## airmexx (8. Juli 2010)

leider nicht.
von den stand von heute morgen, hätte ich das so geschrieben.

```
sqlid = ("SELECT ID_urlaub FROM tbl_azubi_urlaub WHERE '(urlaub_von = '" & txtvon & "' AND urlaub_bis = '" & txtbis & "' AND Personalnummer = '" & sqlper & "')'")
```


```
sqlid = ("SELECT ID_urlaub FROM tbl_azubi_urlaub WHERE '(urlaub_von = " & txtvon & " AND urlaub_bis = " & txtbis & " AND Personalnummer = " & sqlper & ")'")
```

so wie es jetzt da steht ist es schon fast richtig, aber irgendwas an meiner logik in select muss falsch sein zb. in meiner tabelle hab ich folgende datensätze:
ID_urlaub Personalnummer urlaub_von urlaub_bis Bemerkungen
144            0000                         23.01....      24.01.....
145  ...........................
146............................
147...........................

aber alle datum´s sind verschieden, und wenn ich die abfrage auf zb. 146 machen will bekomme ich immer die 144


----------



## Yaslaw (8. Juli 2010)

Ich hab mal mein Tutroial zur Fehlersuche für VBA und MS Access angepasst.
VBA/MS Access Query Debug


----------



## Steiner_B (8. Juli 2010)

Gib mal den kompletten SQL-String aus. Dann nimm ihn und schick ihn in Access in den Abfrageeditor. Geht er dort?


----------



## Yaslaw (8. Juli 2010)

Steiner_B hat gesagt.:


> Gib mal den kompletten SQL-String aus. Dann nimm ihn und schick ihn in Access in den Abfrageeditor. Geht er dort?


Genau mein Tutorial *g*.....


----------



## Steiner_B (8. Juli 2010)

Wenn du schon dabei bist: Poste den SQL-String auch hier bitte.

@yaslaw: Ist ja auch die einzige sinnvolle Variante


----------



## airmexx (8. Juli 2010)

ja er funktioniert dort, ich bekomme aber mehrere id´s angezeit

SELECT ID_urlaub FROM tbl_azubi_urlaub WHERE '(urlaub_von = 08.07.2010 AND urlaub_bis = 23.07.2010 AND Personalnummer = 503524)'

aber ist die abfrage nicht eindeutig genug?
irgendwie guckt er nach personalnummer wie es aussieht, aber nicht nach den daten(datum´s)


----------



## Steiner_B (8. Juli 2010)

So ich hab jetzt deine Datenbank schnell nachgebaut und probiert. Ich seh nur meinen ersten Post bestätigt: Nimm die ' bei '( und )' heraus und es wird gehen. Immer wenn du ' ' verwendest wird der Inhalt zwischen den Hochkommas nicht vom SQL-Parser interpretiert, was bei dir bedeutet das nach dem WHERE keine Bedingung folgt. Resultat: Du bekommst natürlich alle Werte aus der Datenbank. Und wenn du alle Werte bekommst und nur den ersten Abfragst wird das immer der erste aus der Datenbank sein.


----------



## Yaslaw (8. Juli 2010)

item: *Nimm endlich die ' da raus. Stand im alten Thread schon etwa 10 mal!*

item: Ansonsten stimmt das schon. Die ausgegeben Daten, haben die andere Urlaubsdatums?

item: das saubere Datumsformat für SQL ist bei Access #mm/dd/yyyy#


```
SELECT 
	ID_urlaub 
FROM 
	tbl_azubi_urlaub 
WHERE 
	urlaub_von = #07/08/2010#
	AND urlaub_bis = #07/23/2010#
	AND Personalnummer = 503524
```


----------



## airmexx (8. Juli 2010)

wenn ich jetzt die ' rausnehme sprint auch eine zeile runter...gut...

aber dann in der zweiten zeile beim SET kommt folgende fehlermeldung:

Syntaxfehler in Zahl in Abfrageausdruck '(urlaub_von = " & txtvon & " AND urlaub_bis = " & txtbis & " AND Personalnummer = " & sqlper & ")'


----------



## Steiner_B (8. Juli 2010)

Dann mein Freund formatiere deine Datumtexte richtig wie von yaslaw einen Post weiter oben schon geschrieben. Er hat dir ja sogar schon die ganze Anfrage so wie du sie hattes reingeschrieben.


----------



## Yaslaw (8. Juli 2010)

airmexx hat gesagt.:


> wenn ich jetzt die ' rausnehme sprint auch eine zeile runter...gut...
> 
> aber dann in der zweiten zeile beim SET kommt folgende fehlermeldung:
> 
> Syntaxfehler in Zahl in Abfrageausdruck '(urlaub_von = " & txtvon & " AND urlaub_bis = " & txtbis & " AND Personalnummer = " & sqlper & ")'



*item: Mein Tutorial hilft dir da weiter!
item: In meinem Beitrag habe ich dein SQL angepasst -> Lesen!*

Sorry, mir wirds zu blöd mich dauernd zu wiederholen. Wer nicht lesen will, der soll selber schauen wie er zurecht kommt.
Wünsche noch einen schönen Tag.


----------

