AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi ADO Datum Parameter wird falsch interpretiert
Thema durchsuchen
Ansicht
Themen-Optionen

ADO Datum Parameter wird falsch interpretiert

Ein Thema von Salomon · begonnen am 19. Okt 2007 · letzter Beitrag vom 19. Okt 2007
Antwort Antwort
Benutzerbild von Salomon
Salomon

Registriert seit: 9. Jun 2002
453 Beiträge
 
#1

ADO Datum Parameter wird falsch interpretiert

  Alt 19. Okt 2007, 11:14
Datenbank: MS SQL Server Express • Zugriff über: ADO
Hallo,
ich werde noch verückt Wenn ich die beiden Statements unten ausführe bekomme ich verschiedene Ergebnisse...

In ActualDate steht das Datum für welches ich die Datensätze haben will. Dieses wird dann mit ActivityDate in der DB verglichen.
Verwende ich das zweite Statement werden die korrekten Daten ausgelesen.

Wenn ich das Statement mit den Parametern verwende, muss ich als Datum 15.10.2007 übergeben, um Datensatze zu erhalten die mit 16.10.2007 als ActivityDate in der DB stehen


Delphi-Quellcode:
 ADOQuery.SQL.Text :='SELECT * FROM TB_AM_Hours, TB_AM_Projects, TB_AM_ActivityType WHERE ' +
                      ' FK_UserID = :FK_UserID '+
                      ' and FK_ProgramID = :FK_ProgramID ' +
                      ' and ActivityDate = :ActivityDate ' +
                      ' and FK_ActivityTypeID = ActivityTypeID ' +
                      ' and FK_ProjectID = ProjectsID ' +
                      ' ORDER by HoursID;';

                       ADOQuery.Parameters.ParamByName('FK_UserID').Value := DM_ProjectPoint.CurrentUserData.UserID;
                       ADOQuery.Parameters.ParamByName('FK_ProgramID').Value := 1;
                       showmessage(DateToStr(ActualDate));
                       ADOQuery.Parameters.ParamByName('ActivityDate').Value := ActualDate;


    ADOQuery.SQL.Text :='SELECT * FROM TB_AM_Hours, TB_AM_Projects, TB_AM_ActivityType WHERE ' +
                      ' FK_UserID = ' + QuotedStr(DM_ProjectPoint.CurrentUserData.UserID) +
                      ' and FK_ProgramID = 1' +
                      ' and ActivityDate = ' + QuotedStr(DateToStr(ActualDate)) +
                      ' and FK_ActivityTypeID = ActivityTypeID ' +
                      ' and FK_ProjectID = ProjectsID ' +
                      ' ORDER by HoursID;';
   showmessage(ADOQuery.SQL.Text);
Beim Wegschreiben neuer Datensätze in die DB mit Hilfe von Parmetrisierten SQL Statements habe ich auch diesen Versatz von einem Tag. Da sich das aufhebt wenn man alles per parameter macht ist mir das erst sehr spät aufgefallen.

Wie kann denn sowas passieren??

Thanx
Marcus
01001000 01100001 01101100 01101100 01101111
01010111 01100101 01101100 01110100 00100001

http://www.it-adviser.net
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: ADO Datum Parameter wird falsch interpretiert

  Alt 19. Okt 2007, 11:17
was für ein Typ (Date/DateTime) hat und was steht in ActualDate?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Salomon
Salomon

Registriert seit: 9. Jun 2002
453 Beiträge
 
#3

Re: ADO Datum Parameter wird falsch interpretiert

  Alt 19. Okt 2007, 11:21
ActualDate : TDate; Inhalt ist quasi '15.10.2007'

ActivityHours auf der DB ist vom Typ DateTime. Der Inhalt hier ist '16.10.2007 00:00:00'
01001000 01100001 01101100 01101100 01101111
01010111 01100101 01101100 01110100 00100001

http://www.it-adviser.net
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: ADO Datum Parameter wird falsch interpretiert

  Alt 19. Okt 2007, 11:27
Dann caste das Feld ActivityHours in der Abfrage auch mal nach Date
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Salomon
Salomon

Registriert seit: 9. Jun 2002
453 Beiträge
 
#5

Re: ADO Datum Parameter wird falsch interpretiert

  Alt 19. Okt 2007, 11:34
Das sagst du so einfach. Ich habe keinen Plan wie das geht

ActualDate im Programm erst in einen String umzuwandeln geht auch. Ist glaube ich aber sehr unsauber...
01001000 01100001 01101100 01101100 01101111
01010111 01100101 01101100 01110100 00100001

http://www.it-adviser.net
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: ADO Datum Parameter wird falsch interpretiert

  Alt 19. Okt 2007, 11:35
Hallo,

Date enthält sowohl Datum als auch Uhrzeit
(erst ab SQL2008 gibt es einen native "nur Datum" Typ).

Versuche mal FormatDateTime('dd.mm.yyyy hh:nn:ss', ActualDate) statt dem DateToStr.

Mit Parameterm macht das ADO wohl selbst.

zum Cast:
and (cast (ActivityDate as date)='+QuotedStr

aber wie gesagt, ich würde immer Parameter nehmen.


Heiko

PS: Genau diese Problematik wurde im aktuellen .NET Magazin
kurz angesprochen.
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Salomon
Salomon

Registriert seit: 9. Jun 2002
453 Beiträge
 
#7

Re: ADO Datum Parameter wird falsch interpretiert

  Alt 19. Okt 2007, 12:15
Hí,
das ganze könnte doch so einfach sein wenn der MSSQL Server auch einzelne Datentypen Date & Time hätte.

Jetzt muss ich wie ich euch verstanden habe quasi 15.10.2007 00:00:00 mit genau 15.10.2007 00:00:00 vergleichen um einen Treffer zu erhalten.


Den Cast kennt mein DB Server nicht... Meldung: Der Date-Typ ist kein definierter Systemtyp.

Daher werde ich wohl das Datum vorher entsprechend formatieren.
01001000 01100001 01101100 01101100 01101111
01010111 01100101 01101100 01110100 00100001

http://www.it-adviser.net
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: ADO Datum Parameter wird falsch interpretiert

  Alt 19. Okt 2007, 13:43
Hallo Marcus,

SQL Server und Delphi verwenden eine um 24 Stunden voneinander abweichende Datumsbasis. Unabhängig davon solltest du dich nicht um das interne Speicherformat von DateTime-Werten im Server kümmern. Deine Schnittstelle sollte auf den ANSI-Formaten beruhen, das interne Format dient nur der vereinfachten Datums- und Zeit-Arithmetik.

Grüße vom marabu
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#9

Re: ADO Datum Parameter wird falsch interpretiert

  Alt 19. Okt 2007, 15:02
Ich hab lange nicht mehr mit reinen Datumswerten (DATE-Datentyp in SQL) gearbeitet, weil ich mir bei der ersten Berührung damit so dermaßen die Finger verbrannt (sprich: Müll fabriziert) habe, das ich seitdem nur noch den TDatetime-Typ auf Delphi-Seite und den DATETIME (oder SMALLDATETIME) - Wert auf SQL-Seite verwende. Damit habe ich keine Probleme.

Datumswerte nativ zu formatieren ist nicht trivial, weil man immer davon ausgehen muss, einen tschetschenischen SQL-Server mit Sanskrit-Codepage vor sich zu haben.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  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 08:15 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