Problem mit Datumsformat in sql-Anweisung

Hallo zusammen,

vielleicht kann mir von Euch jemand helfen.
Ich habe (wieder einmal) ein Problem mit dem Datumsformat (Access 2003).

Ich lese per VBA den Dateinamen eines Fotos ein.
Zur Benennung der Bild-Dateien existiert eine Konvention: NAME_VORNAME_JJJJ_MM_TT.JPG (JJJJ_MM_TT = Geburtsdatum)
Diesen Dateinamen zerlege ich in die einzelnen Bestandteile Name, Vorname, Geburtsjahr, Geburtsmonat, Geburtstag und weise diese Werte Variablen zu.
Bevor ich die einzelnen Werte in den entsprechenden Feldern erfasse, generiere ich aus den Geburtsdaten noch ein Datum (die Variable ist ebenfalls vom Typ Date)

'Geburtsdatum
Geb = GebT & „.“ & GebM & „.“ & GebJ

Anschließend soll nun überprüft werden, ob ein identischer Datensatz bereits gespeichert ist.
Dies geschieht mit folgender sql-Anweisung:

sql = "SELECT A_tliste_UNION_tlliste_kein_ADS.NNAME, A_tliste_UNION_tlliste_kein_ADS.VNAME, A_tliste_UNION_tlliste_kein_ADS.Geburtsdatum "
sql = sql + "FROM A_tliste_UNION_tlliste_kein_ADS "
sql = sql + „WHERE (((A_tliste_UNION_tlliste_kein_ADS.NNAME)=’“ & NNAME & „’) AND ((A_tliste_UNION_tlliste_kein_ADS.VNAME)=’“ & VName & „’) AND (([A_tliste_UNION_tlliste_kein_ADS]![Geburtsdatum])= " & Geb & " ));“

und danach mit dem Zugriff:

Set rs = db.OpenRecordset(sql)

If rs.RecordCount > 0 Then
rs.Close
GoTo naechster
else
rs.AddNew
rs!USER_ID = UID
rs!Name = NNAME
rs!VORNAME = VName
rs!Geburtsdatum = DateValue(Geb)
rs.Update
rs.close
End If

Ich habe schon alles Mögliche mit dem Datum versucht (z.B. #-Zeichen vor und nach der Variablen ‚Geb‘…), aber Access meldet entweder einen Fehler im Datumsausdruck oder ‚Es wurden xxx Parameter erwartet…‘

Was mache ich falsch?
Hat jemand eine Idee?

Vielen Dank.

Gruß
Uli

Hallo zusammen,

vielleicht kann mir von Euch jemand helfen.
Ich habe (wieder einmal) ein Problem mit dem Datumsformat
(Access 2003).

Ich lese per VBA den Dateinamen eines Fotos ein.
Zur Benennung der Bild-Dateien existiert eine Konvention:
NAME_VORNAME_JJJJ_MM_TT.JPG (JJJJ_MM_TT = Geburtsdatum)
Diesen Dateinamen zerlege ich in die einzelnen Bestandteile
Name, Vorname, Geburtsjahr, Geburtsmonat, Geburtstag und weise
diese Werte Variablen zu.
Bevor ich die einzelnen Werte in den entsprechenden Feldern
erfasse, generiere ich aus den Geburtsdaten noch ein Datum
(die Variable ist ebenfalls vom Typ Date)

'Geburtsdatum
Geb = GebT & „.“ & GebM & „.“ & GebJ

„Geb“ ist keine Variable vom Datentyp „Date“…

Richtig wäre so:
Dim Geb as Date
Geb = Dateserial(GebJ , GebM , GebT)

Anschließend soll nun überprüft werden, ob ein identischer
Datensatz bereits gespeichert ist.
Dies geschieht mit folgender sql-Anweisung:

sql = "SELECT A_tliste_UNION_tlliste_kein_ADS.NNAME,
A_tliste_UNION_tlliste_kein_ADS.VNAME,
A_tliste_UNION_tlliste_kein_ADS.Geburtsdatum "
sql = sql + "FROM A_tliste_UNION_tlliste_kein_ADS "
sql = sql + „WHERE
(((A_tliste_UNION_tlliste_kein_ADS.NNAME)=’“ & NNAME & „’) AND
((A_tliste_UNION_tlliste_kein_ADS.VNAME)=’“ & VName & „’) AND
(([A_tliste_UNION_tlliste_kein_ADS]![Geburtsdatum])= " & Format(Geb,"#yyyy-mm-dd#") &
" ));“

SQL erfordert USA oder ISO-Datumsformat

und danach mit dem Zugriff:

Set rs = db.OpenRecordset(sql)

If rs.RecordCount > 0 Then
rs.Close
GoTo naechster
else
rs.AddNew
rs!USER_ID = UID
rs![Name] = NNAME ’ auf „Name“ als Name dringend verzichten
rs!VORNAME = VName
rs!Geburtsdatum = Geb
rs.Update
rs.close
End If

Ich habe schon alles Mögliche mit dem Datum versucht (z.B.
#-Zeichen vor und nach der Variablen ‚Geb‘…), aber Access
meldet entweder einen Fehler im Datumsausdruck oder ‚Es wurden
xxx Parameter erwartet…‘

Was mache ich falsch?

s. o.

Hat jemand eine Idee?

Ja… :wink:

Hallo „df6gl“,

vielen Dank für Deine Hinweise.
Leider läuft die Abfrage aber auch so nicht.
Ich erhalte beim Öffnen des Recordsets den Fehler:

„3061 - 1 Parameter wurden erwartet, aber es wurden zu wenig Parameter übergeben.“

Spielt es auch eine Rolle, welches Format das Datums-Feld in der Tabelle hat? (In meinem Fall ist es ‚Datum, kurz‘)

Gruß
Uli

Hallo,

vielen Dank für Deine Hinweise.
Leider läuft die Abfrage aber auch so nicht.
Ich erhalte beim Öffnen des Recordsets den Fehler:

„3061 - 1 Parameter wurden erwartet, aber es wurden zu wenig
Parameter übergeben.“

Am Besten postest Du mal den kompletten Code der Prozedur und auch den SQL_String der Abfrage, falls „A_tliste_UNION_tlliste_kein_ADS“ eine solche ist.

Spielt es auch eine Rolle, welches Format das Datums-Feld in
der Tabelle hat? (In meinem Fall ist es ‚Datum, kurz‘)

Es kommt nicht auf das FORMAT, sondern auf den DATENTYP an…

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Hallo Franz,

ich glaube, ich bin dem Fehler auf der Spur…

Die SQL-Anweisung basiert, wie Du bemerkt hast, auf einer Unions-Abfrage. In dieser Abfrage existieren bereits Bedingungen.
Ich werde diese Abfrage nun auch als SQL-Anweisung in den VBA-Code packen und für die Bedingungen Variablen deklarieren.
Drauf gekommen bin ich übrigens durch den Austausch der Unions-Abfrage mit einer der Tabellen (im SQL-String).

Gruß
Uli

Hallo,

aber Vorsicht:

eine Union-Abfrage ist nicht aktualisierbar, d. h. es kann kein neuer Recordset-Datensatz angefügt werden.

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!