AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken MSSQL: Verwendung eines TDateTime-Parameters
Thema durchsuchen
Ansicht
Themen-Optionen

MSSQL: Verwendung eines TDateTime-Parameters

Ein Thema von ensaron · begonnen am 10. Okt 2012 · letzter Beitrag vom 10. Okt 2012
Antwort Antwort
ensaron

Registriert seit: 29. Aug 2008
Ort: 10369 Berlin
63 Beiträge
 
Delphi 10.3 Rio
 
#1

MSSQL: Verwendung eines TDateTime-Parameters

  Alt 10. Okt 2012, 09:35
Datenbank: MSSQL • Version: 2012 • Zugriff über: DBX
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:
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;
Das Feld "Sent" in der Datenbank ist vom Typ "datetime".
Die Abfrage liefert kein Ergebnis, obwohl Daten vorhanden sind.
Auch die Varianten:
Delphi-Quellcode:
  .AsString := FormatDateTime('dd.mm.yyyy hh:nn:ss', From);
  //[...]
und
Delphi-Quellcode:
  .AsSQLTimeStamp:= VarToSQLTimeStamp(VarSQLTimeStampCreate(From));
  //[...]
bringen kein Ergebnis. Bin langsam etwas ratlos, wie ich an die Daten rankomme
Kann mir jemand auf die Sprünge helfen?
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#2

AW: MSSQL: Verwendung eines TDateTime-Parameters

  Alt 10. Okt 2012, 10:43
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.
Gruß, Jo
  Mit Zitat antworten Zitat
ensaron

Registriert seit: 29. Aug 2008
Ort: 10369 Berlin
63 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: MSSQL: Verwendung eines TDateTime-Parameters

  Alt 10. Okt 2012, 11:52
Bin am falschen Problem hängengeblieben
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 SQLMessages.RecordCount > 0 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...

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 TCustomSQLDataSet.GetRecordCount nachgeschaut:
Delphi-Quellcode:
  //[...]
  TableName := ...
  if (TableName = '') or (Params.Count > 0) then
    //Erzeuge eine Exception.
  //[...]
Ä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
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.009 Beiträge
 
Delphi 12 Athens
 
#4

AW: MSSQL: Verwendung eines TDateTime-Parameters

  Alt 10. Okt 2012, 12:07
Data.SqlExpr.TCustomSQLDataSet.RecordCount

Zitat:
Lesen Sie RecordCount nicht, wenn
Die Datenmenge eine Stored Procedure repräsentiert.
Die Datenmenge eine Abfrage repräsentiert, die Parameter enthält.
Die Datenmenge einen Mehr-Tabellen-Join repräsentiert.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz