Warum noch ein Access-Buch?
Für wen ist das Buch?
Jetzt bestellen
+ direkter Download des eBooks!
Nur EUR 59,95!
Fehler gefunden?
Bitte melden!
Wünsche an das Buch?
Her damit!
Was denken die Leser über dieses Buch?
Lesen Sie aktuelle Rezensionen!
Kapitel des noch nicht veröffentlichten Buchs zum Downloaden, Probelesen und Kommentieren
Beispieldatenbanken
Zusätzliches Material

Das Buch im HTML-Format

Für unbestimmte Zeit bieten Addison-Wesley und André Minhorst den kompletten Inhalt des Buchs als Download an. Schauen Sie rein und informieren Sie sich über den Inhalt! Und wenn Ihnen das Buch nützlich erscheint und Sie glauben, dass Sie etwas gelernt haben oder durch das Gelesene sogar etwas Zeit und somit Geld bei Ihrer Arbeit einsparen konnten, können Sie sich ja beim Autor und beim Verlag revanchieren - beispielsweise durch den Kauf dieses Buchs.

Am schönsten wäre es natürlich, wenn Sie das Buch direkt hier bestellen - Sie erhalten das Buch dann direkt vom Verlag, und der Autor und Verlag haben dann noch mehr davon, als wenn Sie es anderswo kaufen.

Danke für Ihr Interesse!

3.3.8 Zeichenkette oder Zahlenwert?

3.3.9 Probleme mit Datumsangaben

Auch Datumsangaben führen immer wieder zu Problemen. Die folgende Routine soll beispielsweise Informationen über Abwesenheiten ausgeben, deren Beginn in einem bestimmten Zeitraum liegt, der durch die Parameter datStart und datEnde angegeben werden kann.

Public Function AbwesenheitenZeitraum(datStart As Date, datEnde As Date)
    ...
    Set rst = db.OpenRecordset("SELECT * FROM tblAbwesenheiten " _
        & "WHERE Startdatum BETWEEN " & datStart & " AND " & datEnde, _
        dbOpenDynaset)
    ...
End Function

Listing 3.4: Ermitteln von Abwesenheiten in einem bestimmten Zeitraum

Wenn Sie die Routine mit folgendem Aufruf starten, erscheint die Fehlermeldung aus Abbildung 3.10. Auf den ersten Blick scheinen hier die Anführungszeichen zu fehlen.

AbwesenheitenZeitraum "1.1.2007", "31.1.2007"

Abbildung 3.10: Fehlermeldung bei der Verwendung von Datumsangaben in SQL-Ausdrücken

Ändern Sie den Aufruf der SQL-Anweisung wie folgt um, gibt es allerdings eine andere Fehlermeldung (siehe Abbildung 3.11):

Set rst = db.OpenRecordset("SELECT * FROM tblAbwesenheiten WHERE Startdatum BETWEEN '" & datStart & "' AND '" & datEnde & "'", dbOpenDynaset)

Diesmal hat Access Probleme mit dem Datentyp - ein String scheint das Bedürfnis nach einem Wert des Typs DATETIME nicht zu befriedigen. Mit dem Wissen, dass Access Datumsangaben intern als Zahlenwerte behandelt, erscheint dies schnell logisch. Dabei gibt es zwei Möglichkeiten: Verwenden Sie den Datentyp Double, um Datumsangaben inklusive Uhrzeit zu verwalten, dann entspricht die Zahl vor dem Komma der Anzahl Tage seit dem 31.12.1899 und die Zahl nach dem Komma der Anzahl Sekunden, die am angegebenen Tag verstrichen sind. Für Datumsangaben ohne Uhrzeit reicht dementsprechend der Datentyp Long aus.

Abbildung 3.11: Auch die Zeichenkette taugt nicht als Datumskriterium

Nun müssen Sie aber nicht alle Datumsangaben explizit in einen Zahlen-Datentyp umwandeln. Es reicht, wenn Sie ein standardisiertes Format verwenden. Dieses hat die Form yyyy-mm-dd. Zusätzlich fassen Sie diesen Ausdruck in der Abfrage in Raute-Zeichen (#) ein.

Im obigen Code sieht das Ganze dann wie folgt aus (in einer Zeile):

Set rst = db.OpenRecordset("SELECT * FROM tblAbwesenheiten WHERE Startdatum BETWEEN #" & Format(strStart, "yyyy-mm-dd") & "# AND #" & Format(strEnde, "yyyy-mm-dd") & "#", dbOpenDynaset)

Das Formatieren des Datums und das Einfassen in Rauten lässt sich auch per Funktion erledigen:

Public Function SQLDatum(strDatum As String) As String
    SQLDatum = Format(strDatum, "\#yyyy-mm-dd\#")
End Function

Listing 3.5: Funktion zum Standardisieren von Datumsangaben

Die Zeile aus obiger Routine sähe dann so aus (in einer Zeile):

Set rst = db.OpenRecordset("SELECT * FROM tblAbwesenheiten WHERE Startdatum BETWEEN " & SQLDatum(strStart) & " AND " & SQLDatum(strEnde), dbOpenDynaset)

Nächster Abschnitt:

3.3.10 Verweis auf Steuerelemente

© 2006-2008 André Minhorst Alle Rechte vorbehalten.