![]() |
Tipp 0344
|
Datenbank-Abfrage nach Datum (DAO)
|
 |
|
Autor/Einsender: Datum: |
|
Dinko Hasanbasic 09.07.2003 |
|
Entwicklungsumgebung: |
|
VB 6 |
|
|
Im Zusammenhang mit Datumsabfragen werden immer wieder gern Fehler gemacht. Grundsätzlich hat ein
Datum in SQL-Anweisungen das folgende Format: #Monat/Tag/Jahr#
|
Wird das Datum erst zur Laufzeit als Variable in die SQL-Abfrage eingebaut, führt die Anweisung
|
|
|
... WHERE Datum = " & Format$(Date,"#m/d/yy#")
|
|
|
zu einem Fehler, da ggf. auf Grund landestypischer Systemeinstellungen die Format-Funktion
die Trennstriche konsequent in Punkte umwandelt.
|
Mit der Anweisung
|
|
|
... WHERE Datum = " & Format$(Date, "\#m\/d\/yyyy\#")
|
|
|
kann die Format-Anweisung überlistet werden, in dem wie oben ausgeführt, die
Trennstriche einfach als normale Zeichen ausgegeben werden.
|
Folgendes Beispiel führt ein Datumsabfrage nach in einer ComboBox ausgewähltem Datum aus.
|
|
|
Option Explicit
Private db As DAO.Database
Private rs As DAO.Recordset
Private Sub Form_Load()
Dim strPath As String
Dim strSQL As String
strPath = App.Path
If Right(strPath, 1) <> "\" Then strPath = strPath & "\"
On Error GoTo err_FormLoad
Set db = OpenDatabase(strPath & "artikel.mdb")
strSQL = "SELECT DISTINCT Artikel.Datum FROM Artikel;"
Set rs = db.OpenRecordset(strSQL, dbOpenDynaset, dbReadOnly)
With rs
If Not (.BOF And .EOF) Then
.MoveLast
.MoveFirst
While Not .EOF
cboDatum.AddItem rs.Fields(0).Value
.MoveNext
Wend
End If
End With
rs.Close
Set rs = Nothing
cboDatum.ListIndex = 0
exit_Sub:
On Error GoTo 0
Exit Sub
err_FormLoad:
MsgBox "Fehlernummer " & Err.Number & Chr$(13) & Error$(Err), _
vbCritical, "Fehler"
Resume exit_Sub
End Sub
Private Sub cboDatum_Click()
Dim strList As String
Dim strSQL As String
On Error GoTo err_cboClick
strList = (cboDatum.List(cboDatum.ListIndex))
strSQL = "SELECT * FROM Artikel WHERE Datum = " & _
Format$(strList, "\#mm\/dd\/yyyy\#") & ";"
Set rs = db.OpenRecordset(strSQL, dbOpenDynaset, dbReadOnly)
If Not (rs.BOF And rs.EOF) Then
rs.MoveLast
rs.MoveFirst
Set datRS.Recordset = rs
txtFeld(0).DataField = "ArtikelNr"
txtFeld(1).DataField = "ArtikelName"
txtFeld(2).DataField = "Preis"
txtFeld(3).DataField = "Datum"
datRS.UpdateControls
End If
exit_Sub:
On Error GoTo 0
Exit Sub
err_cboClick:
MsgBox "Fehlernummer " & Err.Number & Chr$(13) & Error$(Err), _
vbCritical, "Fehler"
Resume exit_Sub
End Sub
Private Sub datRS_Reposition()
With datRS
.Caption = " Datensatz " & .Recordset.AbsolutePosition + 1 & _
" von " & .Recordset.RecordCount
End With
End Sub
Private Sub Form_Terminate()
On Error Resume Next
rs.Close
Set rs = Nothing
db.Close
Set db = Nothing
On Error GoTo 0
End Sub
|
|
|
|
Um diesen Tipp ausführen zu können, muss die Microsoft DAO 3.x Object Library
in das Projekt eingebunden werden.
|
|
Windows-Version |
95 |
 |
|
98/SE |
 |
|
ME |
 |
|
NT |
 |
|
2000 |
 |
|
XP |
 |
|
Vista |
 |
|
Win
7 |
 |
|
|
VB-Version |
VBA 5 |
 |
|
VBA 6 |
 |
|
VB 4/16 |
 |
|
VB 4/32 |
 |
|
VB 5 |
 |
|
VB 6 |
 |
|
|
|
Download (10,3 kB)
|
Downloads bisher: [ 1949 ]
|
|
|