AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Probleme mit datetime und TSQLQuery
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme mit datetime und TSQLQuery

Ein Thema von toyoman · begonnen am 16. Jun 2008 · letzter Beitrag vom 16. Jun 2008
Antwort Antwort
Seite 1 von 2  1 2      
toyoman

Registriert seit: 2. Jun 2003
323 Beiträge
 
Delphi 2010 Enterprise
 
#1

Probleme mit datetime und TSQLQuery

  Alt 16. Jun 2008, 14:39
Datenbank: Interbase • Version: 7.1 • Zugriff über: DBXpress
Hallo

Habe seit Delphi 2007 folgendes Problem (Programm wurde ursprünglich mit Delphi7 geschrieben).

siehe Code:

Delphi-Quellcode:
   // Mutationsuser und Mutationsdatum eintragen
   wdatum:=strtodatetime(formatdatetime('dd.MM.yyyy hh:nn', now));
   updPersonal.ParamByName('MUTDATUM').AsTime:=wdatum;
   // showmessage(datetimetostr(updPersonal.Params.ParamByName('MUTDATUM').AsTime)); // TEST
   updPersonal.ParamByName('MUTUSER').AsString:=uppercase(username);
updPersonal ist eine TSQLQuery. Mithilfe dieser Komponente wird ein Update auf eine Tabelle durchgeführt. In ein Feld MUTDAUM wird das aktuelle Datum inkl. Uhrzeit eingetragen. Ich weise der Variable wdatum (tdate) das Datum und Zeit zu.
Wenn ich die Variable wdatum auslese oder anzeigen lasse stimmt das Datum auch perfekt. Auch nach der Zuweisung (siehe showmessage Zeile) wird das korrekte Datum angezeigt.

ABER:
in der Tabelle ist nach dem Vorgang folgendes gespeichert: 30.12.1899 13:40:00
Das Datum ist falsch (also wie leer), die Zeit aber stimmt.

Wie kommt sowas?
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Probleme mit datetime und TSQLQuery

  Alt 16. Jun 2008, 14:43
Delphi-Quellcode:
updPersonal.ParamByName('MUTDATUM').AsTime:=wdatum; // Falsch
updPersonal.ParamByName('MUTDATUM').AsDateTime:=Now; // Richtig
Andreas
  Mit Zitat antworten Zitat
toyoman

Registriert seit: 2. Jun 2003
323 Beiträge
 
Delphi 2010 Enterprise
 
#3

Re: Probleme mit datetime und TSQLQuery

  Alt 16. Jun 2008, 14:48
Zitat von shmia:
Delphi-Quellcode:
updPersonal.ParamByName('MUTDATUM').AsTime:=wdatum; // Falsch
updPersonal.ParamByName('MUTDATUM').AsDateTime:=Now; // Richtig
diese Änderung bringt leider nichts. So hatte ich es anfangs in Delphi 7 und auch damals hat das nicht gefunzt, darum hab ich es dann umgebaut mit dieser formatdatetime Geschichte.
Resultat wenn ich deine "richtige" Variante einbaue:
30.12.1899 14:45:39
-> Zeit korrekt, Datum nicht

showmessage(datetimetostr(now)); bringt das korrekte Datum, Zeit...
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: Probleme mit datetime und TSQLQuery

  Alt 16. Jun 2008, 15:09
Was willst Du eigentlich mit der Datumsformatierung erreichen?
Now ist vom Typ TDateTime und das kann man natürlich mit AsDateTime zuweisen.
Und Du MUSST AsDateTime verwenden, wenn Du Datum und zeit haben willst.

Ich tippe eher, dass das DB-Feld nur ein Time-Feld ist und nicht DateTime.

Ein Bisschen mehr Code wäre auch nicht schlecht.
z.B. das, wo Du das Query zusammenbaust.
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

Re: Probleme mit datetime und TSQLQuery

  Alt 16. Jun 2008, 15:22
Zitat von RavenIV:
Ich tippe eher, dass das DB-Feld nur ein Time-Feld ist und nicht DateTime.
Ja, Firebird/Interbase hat hier drei Datentypen: DATE | TIME | TIMESTAMP. Demnach wäre TIMESTAMP wohl richtig.
Andreas
  Mit Zitat antworten Zitat
toyoman

Registriert seit: 2. Jun 2003
323 Beiträge
 
Delphi 2010 Enterprise
 
#6

Re: Probleme mit datetime und TSQLQuery

  Alt 16. Jun 2008, 15:27
du meinst so: updPersonal.ParamByName('MUTDATUM').AsDateTime:=now; wollte ich ursprünglich wie gesagt so machen. Funktioniert aber nicht. Fehlermeldung:
Exception der Klasse EDatabaseError mit der Meldung 'Fehlender Wert für Parameter 'MUTDATUM' aufgetreten. Darum der Handstand mit der Datumsformatierung.

Die Query wird so gefüllt:
Delphi-Quellcode:
// Update Query mit Statement versehen
       queryfuellen(updPersonal,'SQL_UPDATE_PERSONAL_DIVERSE.dat','MAD_PERSONAL');
wobei queryfuellen eine Funktion von mir ist:

Delphi-Quellcode:
procedure QueryFuellen(var queryname: TSQLQuery; prgpath, dateiname, tabellenname : string);
var str:TStringList;
begin
   // SQL Statement einlesen (SQL Strings)
   if fileexists(prgpath+dateiname) then
   begin
       str:=TStringList.Create; // eingebaut aufgrund von Problemen in Delphi 2007 (direkt loadfromfile verwenden hat nicht mehr funktioniert)
       str.LoadFromFile(prgpath+dateiname); // 21.05.2008 nsa

       queryname.SQL.Text:=str.text;
       str.free;
       //TQuery(FindComponent(queryname)).SQL.Text
   end else
   begin
       Application.Messagebox(pchar(tabellenname+': SQL Datei: '+prgpath+dateiname+' nicht gefunden!'),pchar('FEHLER'),MB_OK or MB_ICONWARNING);
   end;
end;
Glaube zwar nicht, dass das weiterhilft. Es ist ein normales befüllen mit einem SQL Statement bei welchem dann die Parameter einzeln zugewiesen werden. Das funktioniert ja auch bei allen anderen Feldern nur bei diesen ERSTELLDATUM und MUTDATUM Feldern, welche in Interbase als DATE Felder definiert sind (Datum und Zeit) nicht mehr.

Wie gesagt vorher in Delphi 7 hat alles gefunzt ohne Codeänderung!

Zitat von RavenIV:
Was willst Du eigentlich mit der Datumsformatierung erreichen?
Now ist vom Typ TDateTime und das kann man natürlich mit AsDateTime zuweisen.
Und Du MUSST AsDateTime verwenden, wenn Du Datum und zeit haben willst.

Ich tippe eher, dass das DB-Feld nur ein Time-Feld ist und nicht DateTime.

Ein Bisschen mehr Code wäre auch nicht schlecht.
z.B. das, wo Du das Query zusammenbaust.
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: Probleme mit datetime und TSQLQuery

  Alt 16. Jun 2008, 15:34
Zitat von toyoman:
Die Query wird so gefüllt:
Delphi-Quellcode:
// Update Query mit Statement versehen
       queryfuellen(updPersonal,'SQL_UPDATE_PERSONAL_DIVERSE.dat','MAD_PERSONAL');
Und was steht in der Datei drin?
Das wäre auch interessant.

Weiterhin kannst Du anstelle von .AsDateTime auch mal .Value versuchen.
Dann sollte "automatisch" der richtige Datentyp genommen werden.
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
toyoman

Registriert seit: 2. Jun 2003
323 Beiträge
 
Delphi 2010 Enterprise
 
#8

Re: Probleme mit datetime und TSQLQuery

  Alt 16. Jun 2008, 15:37
du willst aber auch alles wissen
bitteschön:

SQL-Code:
update mad_personal set
AKTIV='J',MADFIRMA=:MADFIRMA,KURZZ=:KURZZ,PERSONALNR=:PERSONALNR,NAME=:NAME,MITSTATUS=:MITSTATUS,JAHR=:JAHR,
ADRNR=:ADRNR,PERSONAL_ID=:PERSONAL_ID,PERS_TYP=:PERS_TYP,GEBURTSDATUM=:GEBURTSDATUM,
EINTRITT=:EINTRITTSDATUM,AUSTRITT=:AUSTRITTSDATUM,STDSATZ=:STUNDENSATZ,PERSGRUPPE=:PERSONALGRUPPE,BENUTZER=:BENUTZER,
VORNAME=:VORNAME,APPL_SPRACHE=:APPL_SPRACHE,KALENDERDEF_ID=:KALENDER_ID,FUNKTION_ID=:FUNKTIONID,ARBEITSVERTRAG_PROZENT=:ANSTELLUNGSPROZ,
MUTUSER=:MUTUSER,MUTDATUM=:MUTDATUM
where
PERSONALNR = '$NUMMERand MADFIRMA = :MADFIRMA
Zitat von RavenIV:
Zitat von toyoman:
Die Query wird so gefüllt:
Delphi-Quellcode:
// Update Query mit Statement versehen
       queryfuellen(updPersonal,'SQL_UPDATE_PERSONAL_DIVERSE.dat','MAD_PERSONAL');
Und was steht in der Datei drin?
Das wäre auch interessant.

Weiterhin kannst Du anstelle von .AsDateTime auch mal .Value versuchen.
Dann sollte "automatisch" der richtige Datentyp genommen werden.
  Mit Zitat antworten Zitat
toyoman

Registriert seit: 2. Jun 2003
323 Beiträge
 
Delphi 2010 Enterprise
 
#9

Re: Probleme mit datetime und TSQLQuery

  Alt 16. Jun 2008, 15:40
Zitat von RavenIV:
Weiterhin kannst Du anstelle von .AsDateTime auch mal .Value versuchen.
Dann sollte "automatisch" der richtige Datentyp genommen werden.
bei Verwendung von .value krieg ich folgende Exception:
SQL error code = -303
conversion error from string "39615.65138888889 " aufgetreten
  Mit Zitat antworten Zitat
toyoman

Registriert seit: 2. Jun 2003
323 Beiträge
 
Delphi 2010 Enterprise
 
#10

Re: Probleme mit datetime und TSQLQuery

  Alt 16. Jun 2008, 15:52
Funktioniert nun:

updPersonal.ParamByName('MUTDATUM').asString:=form atdatetime('dd.MM.yyyy hh:nn', now);

ist mir zwar nicht klar warum aber wenn ich das als String zuweise gehts....
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 01:21 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