![]() |
Datenbank: Interbase • Version: 7.1 • Zugriff über: DBXpress
Probleme mit datetime und TSQLQuery
Hallo
Habe seit Delphi 2007 folgendes Problem (Programm wurde ursprünglich mit Delphi7 geschrieben). siehe Code:
Delphi-Quellcode:
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.
// 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); 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? |
Re: Probleme mit datetime und TSQLQuery
Delphi-Quellcode:
updPersonal.ParamByName('MUTDATUM').AsTime:=wdatum; // Falsch
updPersonal.ParamByName('MUTDATUM').AsDateTime:=Now; // Richtig |
Re: Probleme mit datetime und TSQLQuery
Zitat:
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... |
Re: Probleme mit datetime und TSQLQuery
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. |
Re: Probleme mit datetime und TSQLQuery
Zitat:
|
Re: Probleme mit datetime und TSQLQuery
du meinst so:
Delphi-Quellcode:
wollte ich ursprünglich wie gesagt so machen. Funktioniert aber nicht. Fehlermeldung:
updPersonal.ParamByName('MUTDATUM').AsDateTime:=now;
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:
wobei queryfuellen eine Funktion von mir ist:
// Update Query mit Statement versehen
queryfuellen(updPersonal,'SQL_UPDATE_PERSONAL_DIVERSE.dat','MAD_PERSONAL');
Delphi-Quellcode:
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.
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; Wie gesagt vorher in Delphi 7 hat alles gefunzt ohne Codeänderung! Zitat:
|
Re: Probleme mit datetime und TSQLQuery
Zitat:
Das wäre auch interessant. Weiterhin kannst Du anstelle von .AsDateTime auch mal .Value versuchen. Dann sollte "automatisch" der richtige Datentyp genommen werden. |
Re: Probleme mit datetime und TSQLQuery
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 = '$NUMMER' and MADFIRMA = :MADFIRMA Zitat:
|
Re: Probleme mit datetime und TSQLQuery
Zitat:
SQL error code = -303 conversion error from string "39615.65138888889 " aufgetreten |
Re: Probleme mit datetime und TSQLQuery
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.... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:44 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