Forums Neueste Beiträge
 

Abfrage auf MSSQLServer Tabelle mit DateTime

09/07/2009 - 14:54 von Andreas Vogt | Report spam
Hallo,
greife auf eine Tabelle im MSSQLServer zu mit Datum von/bis als
Kriterium.
Dazu folgender Code:

Sub Prozedurname()
Dim rsServer As ADODB.Recordset
Dim TimeA As String, TimeB As String, ConnectionString As String

TimeA = "'01." & fehltneNull(frm!Monat) & frm!Monat & "." & frm!
Jahr & "'"
TimeB = "'" & Format$(DateAdd("d", -1, DateSerial(frm!Jahr, frm!
Monat + 1, 1)), "dd") & "." & fehltneNull(frm!Monat) & frm!Monat & "."
& frm!Jahr & "'"
ConnectionString = "Driver={SQL Server};Server=" & servername &
";Database=" & dbName & ";Uid=" & DBUser & ";Pwd=" & DBPass & ";"
SQL = "Select * From " & Servertabelle & " Where (UHRZEIT between
" & TimeA & " AND " & TimeB & ")"
Set rsServer = GetRecordset(ConnectionString, SQL)
Do Until rsServer.EOF
'...
rsServer.MoveNext
Loop
Call CloseRecordset(rsServer)
End Sub

Private Function fehltneNull(Monat As Long)
If Monat < 10 Then
fehltneNull = "0"
Else
fehltneNull = ""
End If
End Function

Funktionen GetRecordset liefert ein ADODB.Recordset zurück,
CloseRecordset schließt es wieder.
Habe bei mir auf meinem SQL Server 2005 Express das so getestet, und
hat auch funktioniert.
Wenn ich allerdings im Kriterium TimeA/TimeB um die Uhrzeit erweitert
habe, bekam ich den Fehler dass das Datum nicht richtig konvertiert
werden konnte.
Und genau dieser Fehler tritt jetzt beim Kunden auf, obwohl "nur" das
Datum im Format dd.mm.yyyy im Kriterium steht.

Wo liegt denn da das Problem?
Wie muss man korrekt nach dem Datentyp DateTime abfragen?
Können die Spalteneigenschaften des Feldes UHRZEIT beim Kunden
differieren? Obwohl gleicher Felddatentyp?

Gruß Andreas
 

Lesen sie die antworten

#1 Peter Doering
09/07/2009 - 15:18 | Warnen spam
Hallo,

Andreas Vogt wrote:

greife auf eine Tabelle im MSSQLServer zu mit Datum von/bis als
Kriterium.
Dazu folgender Code:

Sub Prozedurname()
Dim rsServer As ADODB.Recordset
Dim TimeA As String, TimeB As String, ConnectionString As String

TimeA = "'01." & fehltneNull(frm!Monat) & frm!Monat & "." & frm!
Jahr & "'"
TimeB = "'" & Format$(DateAdd("d", -1, DateSerial(frm!Jahr, frm!
Monat + 1, 1)), "dd") & "." & fehltneNull(frm!Monat) & frm!Monat & "."
& frm!Jahr & "'"
ConnectionString = "Driver={SQL Server};Server=" & servername &
";Database=" & dbName & ";Uid=" & DBUser & ";Pwd=" & DBPass & ";"
SQL = "Select * From " & Servertabelle & " Where (UHRZEIT between
" & TimeA & " AND " & TimeB & ")"
Set rsServer = GetRecordset(ConnectionString, SQL)
Do Until rsServer.EOF
'...
rsServer.MoveNext
Loop
Call CloseRecordset(rsServer)
End Sub



Ich wuerde das Datum im Format 112 (siehe BOL) uebergeben:

TimeA = Format(DateSerial(frm!Jahr, frm!Monat, 1), "YYYYMMDDHHNNSS")
TimeB = Format(DateSerial(frm!Jahr, frm!Monat+1, 0), "YYYYMMDDHHNNSS")

und

... WHERE UHRZEIT Between '" & TimeA & "' AND '" & TimeB & "'"

Uebrigens, du uebergibst keine Uhrzeit, auch wenn das Feld so heisst, aber
das wirst du schon wissen.

Gruss - Peter

Mitglied im http://www.dbdev.org
FAQ: http://www.donkarl.com

Ähnliche fragen