![]() |
Datenbank: MSSQL • Version: 2012 • Zugriff über: DBX
MSSQL: Verwendung eines TDateTime-Parameters
Hallo zusammen,
ich habe ein Problem mit einer Abfrage von Daten aus einer MSSQL-Datenbank. Folgende Funktion soll die Daten abrufen und zur Übertragung bereitstellen:
Delphi-Quellcode:
Das Feld "Sent" in der Datenbank ist vom Typ "datetime".
function TServerMethods.ReceiveMessages(From, Till: TDateTime): Boolean;
begin //[...] SQLMessages.Close; //TSQLDataSet SQLMessages.CommandText := 'SELECT * FROM MessageTable WHERE Sent BETWEEN :From AND :Till'; SQLMessages.ParamByName('From').AsDateTime := From; SQLMessages.ParamByName('Till').AsDateTime := Till; SQLMessages.Open; //[...] end; Die Abfrage liefert kein Ergebnis, obwohl Daten vorhanden sind. Auch die Varianten:
Delphi-Quellcode:
und
.AsString := FormatDateTime('dd.mm.yyyy hh:nn:ss', From);
//[...]
Delphi-Quellcode:
bringen kein Ergebnis. Bin langsam etwas ratlos, wie ich an die Daten rankomme :|
.AsSQLTimeStamp:= VarToSQLTimeStamp(VarSQLTimeStampCreate(From));
//[...] Kann mir jemand auf die Sprünge helfen? |
AW: MSSQL: Verwendung eines TDateTime-Parameters
Man sollte nicht die von-bis Werte falsch herum angeben.
Uhrzeit sollte bei einer Bereichsangabe nur eine Rolle spielen (= anzugeben sein), wenn die Uhrzeit für den Bereich eine Rolle spielt. ADO zickt gern bei "falschen" Datumswerten rum. Sprich in der Spalte stehen Werte, die "Out Of ADO Range" sind. Den exakten Range kenne ich nicht, musst Du mal nachsehen oder Deine Spaltenwerte per SQL validieren. |
AW: MSSQL: Verwendung eines TDateTime-Parameters
Bin am falschen Problem hängengeblieben :wall:
Also die Abfrage funktioniert bei allen drei Varianten und liefert auch das korrekte Ergebnis. AAAber: Bevor ich dem Client zurückmelde, dass Daten für ihn vorliegen, hab ich einen Test auf
Delphi-Quellcode:
gemacht. Da bekomme ich aber eine Exception. Ich war etwas irritiert, dass nicht 0 zurückgegeben wird, wenn die Abfrage keine Daten enthält, hab da aber einfach n try-except drumgemacht und versucht rauszufinden, warum denn keine Daten zurückkommen...
SQLMessages.RecordCount > 0
Lasse ich die Prüfung weg und lass den Client sich die Daten holen, ist alles da. Mein Problem besteht also eigentlich darin, warum der Zugriff auf RecordCount der TSQLDataSet-Komponente eine Exception verursacht, obwohl Datensätze enthalten sind. Gerade mal in der SqlExpr-Unit bei
Delphi-Quellcode:
nachgeschaut:
TCustomSQLDataSet.GetRecordCount
Delphi-Quellcode:
Ähm ja, ich benutze ja Parameter, also ist Params.Count > 0 (und TableName enthält den korrekten Namen). Aber warum wird mir dafür eine Exception erzeugt :?:
//[...]
TableName := ... if (TableName = '') or (Params.Count > 0) then //Erzeuge eine Exception. //[...] |
AW: MSSQL: Verwendung eines TDateTime-Parameters
![]() Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz