Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datum inkl. Uhrzeit in DATE - Feld (https://www.delphipraxis.net/101685-datum-inkl-uhrzeit-date-feld.html)

HolgerCW 17. Okt 2007 13:34

Datenbank: ORACLE • Version: 9 • Zugriff über: BDE

Datum inkl. Uhrzeit in DATE - Feld
 
Hallo zusammen,

ich habe einen String: Datum := '17.10.2007, 13:35:00'

Wenn ich diesen in die Datenbank in die Spalte DATUM mit der Deklaration DATE packe kommt folgende Fehlermelung:

Datumsformatstruktur endet vor Umwandlung der gesamten Eingabezeichenfolge.

1. Wie muss der String aussehen um in die DATUM - Spalte eingefügt zu werden ?
2. In der DATUM - Spalte sind schon Werte wie z.B.: '17.10.2007 13:30:23'

Gruss

Holger

Bernhard Geyer 17. Okt 2007 13:38

Re: Datum inkl. Uhrzeit in DATE - Feld
 
1, Zeig mal deinen bisherigen Code
2, Schmeiß die BDE weg
2, Datumwerte sollten noch viel mehr (als sonst) per Parametrisierte Abfragen in die Datenbank geschrieben werden um den Problem mit unterschiedlichen Datumsformaten aus dem Weg zu gehen.

HolgerCW 17. Okt 2007 13:49

Re: Datum inkl. Uhrzeit in DATE - Feld
 
Füge mit:

Delphi-Quellcode:
INSERT INTO TABELLE DATUM VALUES(''' + Datum + ''');
oben genanntes Datumsformat ein.

Gruss

Holger

DeddyH 17. Okt 2007 13:56

Re: Datum inkl. Uhrzeit in DATE - Feld
 
Delphi-Quellcode:
Query.SQL.Text := 'INSERT INTO TABELLE(DATUM) VALUES(:datum);';
Query.ParamByName('datum').AsDateTime := now;
So in der Art geht das mit Parametern.

HolgerCW 17. Okt 2007 14:00

Re: Datum inkl. Uhrzeit in DATE - Feld
 
Nur ist folgendes:

Ich hole mir das Datum aus einem Datetimepicker, die stunde aus einer Combobox und die minuten auch.

Baue die in einem string zusammen, der dann so aussieht: Datum : = '17.10.2007 13:55:00'

Muss ich dann also nur

Delphi-Quellcode:
INSERT INTO TABELLE(DATUM) VALUES(:datum);
machen, und das Datum inkl. Uhrzeit ist auf der Datenbank vorhanden ? Weil Datum ja eine String-Variable ist.

Gruss

Holger

DeddyH 17. Okt 2007 14:08

Re: Datum inkl. Uhrzeit in DATE - Feld
 
Sieh Dir mein Beispiel noch einmal an. Du übergibst dem Parameter keinen String, sondern einen TDateTime (z.B. aus dem DateTimePicker). Das Parsen in das richtige Format übernimmt das Framework für Dich.

HolgerCW 17. Okt 2007 14:09

Re: Datum inkl. Uhrzeit in DATE - Feld
 
Und wie gebe ich die Uhrzeit mit, die der Anwender ausgewählt hat ?

Gruss

Holger

hoika 17. Okt 2007 14:11

Re: Datum inkl. Uhrzeit in DATE - Feld
 
Hallo,

du musst das Date/Time halt vorher zusammenbauen.

Delphi-Quellcode:
var
  tdtDateTime: TDateTime;
  tdtTime   : TDateTime;
begin
  tdtDateTime:= DateOf(DateTimePicker.Date) ; // DateOf aus jedi, oder Trunc nehmen
  tdtTime:= StrToTime(ComboBox.Items[ComboBox.ItemIndex]); // tja, weiss nicht, wie es drinsteht
 
  tdtDateTime:= tdtDateTime+tdtTime;
und nu tdtDateTime per AsDateTime über Parameter übergeben, siehe oben


Heiko

DeddyH 17. Okt 2007 14:13

Re: Datum inkl. Uhrzeit in DATE - Feld
 
Delphi-Quellcode:
Zeit := DateTimePicker.Date + StrToTime(Format('%s:%s',[ComboBox1.Items[ComboBox1.ItemIndex],ComboBox2.Items[ComboBox2.ItemIndex]]));

HolgerCW 17. Okt 2007 14:42

Re: Datum inkl. Uhrzeit in DATE - Feld
 
Hi,

kann ich die Parametrisierung auch im SQL -String durchführen ?

Benutze nämlich eine Funktion zum einfügen von Datensätzen. Müsste die sonst kommplett umschrieben.

Vielleicht so:

Delphi-Quellcode:
Datum: TDateTime;
SQLString: String;

...

SQLString := 'INSERT INTO TABELLE (DATUM) VALUES (TO_DATETIME(''' + Datum + '''))';
Nur so wie oben klappt es nicht.

Gruss

Holger

DeddyH 17. Okt 2007 14:45

Re: Datum inkl. Uhrzeit in DATE - Feld
 
Natürlich kannst Du es da auch machen (aber die Konvertierung im SQL-String fällt dann weg).

HolgerCW 17. Okt 2007 14:47

Re: Datum inkl. Uhrzeit in DATE - Feld
 
Und wie ?

DeddyH 17. Okt 2007 14:49

Re: Datum inkl. Uhrzeit in DATE - Feld
 
Haben wir doch lang und breit in diesem Thread beschrieben.

HolgerCW 17. Okt 2007 14:51

Re: Datum inkl. Uhrzeit in DATE - Feld
 
Hier mal mein komplettes Problem:
So sieht alles aus, und nur das DATUM lässt sich nciht einfügen.

Delphi-Quellcode:
procedure Einfuegen();
var
 Datum: String;
 Zeit: TDateTime;
begin

Zeit := DTP_Sigma_Erfassung_Datum.Date + StrToTime(Format('%s:%s',[CB_Sigma_Erfassung_Stunde.Items[CB_Sigma_Erfassung_Stunde.ItemIndex],CB_Sigma_Erfassung_Minute.Items[CB_Sigma_Erfassung_Minute.ItemIndex]]));

Datum := datetimetostr(Zeit);

Datensatz_insert ('''' + Stoer_Art_ID + ''',''' + Anwender_ID + ''', ''' + Datum + ''', ''' + ED_Sigma_Erfassung_Melder.text + ''', ''' + Ort_ID + ''', ''' + ED_Sigma_Erfassung_Strasse.text + ''', ''' + ED_Sigma_Erfassung_Hausnr.text + ''', ''' + ED_Sigma_Erfassung_Hinweis.text + ''', ''' + Bemerkung + ''', '''', ''' + abschliessen + ''', ''' + ED_Sigma_Erfassung_AN.text + ''', ''' + ED_Sigma_Erfassung_TBesitzer.text + ''', ''' + ED_Sigma_Erfassung_Telefon.text + ''', ''' + ED_Sigma_Erfassung_Telefon2.text + '''', 'STOER_ART_ID,ANWENDER_ID, DATUM, MELDER, ORT_ID, STRASSE,HAUS_NR, STOER_HINWEIS, BEMERKUNG, GISREFERENZ,OHNE_AUFTRAG, ISU_ANLAGE,NAME,VORWAHL,NACHWAHL', 'SYSDBP.DBP_ERFASSUNG');

end;

procedure Datensatz_insert (Werte:String; Spalten:String; Tabelle:String);
begin

 with DM_Query_Termas do
 begin
  QueryInsert.Close;
  QueryInsert.SQL[0] := 'INSERT INTO ' + Tabelle + '';
  QueryInsert.SQL[1] := '(' + Spalten + ')';
  QueryInsert.SQL[2] := 'VALUES(' + Werte + ')';
  //QueryInsert.ParamByName('DATUM').AsDateTime := now;
  QueryInsert.ExecSQL;
 end;

 DM_Query_TerMaS.QueryCommit.ExecSQL;

end;
Gruss

Holger

DeddyH 17. Okt 2007 14:56

Re: Datum inkl. Uhrzeit in DATE - Feld
 
Das ist so natürlich ein Problem, da man ja nicht im Voraus weiß, was in der Variablen "Werte" steht.

HolgerCW 17. Okt 2007 14:59

Re: Datum inkl. Uhrzeit in DATE - Feld
 
Aber auch, wenn ich jetzt davon ausgehe, das die Spalte DATUM mit in der Variable Werte ist, kommt der Fehler:

Parameter 'DATUM' nicht gefunden.

Gruss

Holger

DeddyH 17. Okt 2007 15:01

Re: Datum inkl. Uhrzeit in DATE - Feld
 
Das muss so in "Werte" stehen: ":datum", also mit vorangestelltem Doppelpunkt, damit es als Parameter erkannt wird.

HolgerCW 17. Okt 2007 15:15

Re: Datum inkl. Uhrzeit in DATE - Feld
 
Habe es jetzt:

Das hatte ich gesucht:

Delphi-Quellcode:
TO_DATE(''' + Datum + ''',''DD.MM.YYYY HH24:MI:SS'')
Gruss

Holger

hoika 17. Okt 2007 15:47

Re: Datum inkl. Uhrzeit in DATE - Feld
 
Hallo,

dein SQL-Statement ist extrem schwer zu lesen

Delphi-Quellcode:
with Query do
begin
  SQL.Add('Insert Into Personal(Id,Name,BirthDay)');
  SQL.Add('Values(:Id,:Name,:BirthDay);
  ParamByName('Id').AsInteger:= theId; // Integer
  ParamByName('Name').AsString:= theName; // String
  ParamByName('BirtDay').AsDateTime:= theBirthDay; // TDateTime
  ExecSQL;
end;
Wie du siehst, entfallen auch deine '' (OK, QuotedStr würde Abhilfe schaffen).
Ausserdem ist der Code leichter lesbar.
Weiterhin kannst du, falls der Code in einer Schleife,
vorher ein Prepare machen,
dann ist die Query sehr viel schneller.

Für dich das wichtigste,
Das AsDateTime formt den "theBirtDay" so um,
wie Oracle es haben will.


Heiko

shmia 17. Okt 2007 16:00

Re: Datum inkl. Uhrzeit in DATE - Feld
 
Hier scheint mir etwas Chaos vorzuliegen, deshalb hier Schritt für Schritt die Lösung:
1.) Das Datum steht in einem TDateTimePicker, die Uhrzeit in einem 2. TDateTimePicker (Kind = dtkTime)
2.) nun muss Datum & Uhrzeit in einer einzige Variablen zusammengefasst werden:
Delphi-Quellcode:
var
  zeitpunkt: TDateTime;
begin
  zeitpunkt:= Int(DatePicker1.Date) + TimePicker1.Time;
  // die funktion Int() ist ein Bugfix für eine Fehlfunktion im TDateTimePicker
3.) Jetzt sollte der Zeitpunkt angezeigt werden, damit man nicht völlig blind programmiert
Delphi-Quellcode:
  LabelZeitpunkt.Caption := DateTimeToStr(zeitpunkt)
4.) nun muss man den Zeitpunkt irgendwie in eine SQL-Anweisung hineinbekommen.
Das ist gar nicht so einfach, da fast jede Datenbank sein eigenes Format hat :-(
Nicht ohne Grund wurde hier mehrfach die Verwendung von Parametern empfohlen.
Wenn du Parameter nimmst, bist du jetzt fast fertig.
Du verwendest die Oracle Datenbank.
5.) Also ist der nächste Schritt: Studium der Oracle Syntax
http://download-east.oracle.com/docs...a90125/toc.htm
Anscheinend kann man ein Datum im Ansi-Format '2007-10-17' angeben.
Wie das mit der Uhrzeit geht -> selber rausfinden
6.) schlussendlich braucht man dann eine Funktion, die ein TDateTime nach Oracle-Syntax wandelt.
Ungefähr so:
Delphi-Quellcode:
function DateTime2Oracle(value:TDateTime):string;
begin
  if value <= 0.0 then
    result := 'NULL'
  else
    result := QuotedStr(FormatDateTime('yyyy-mm-dd hh:nn:ss', [value]));
end;

HolgerCW 17. Okt 2007 16:03

Re: Datum inkl. Uhrzeit in DATE - Feld
 
Vielen dank für die ganzen Tips,

in Zukunft weiss ich jetzt eine Menge mehr

Gruss

Holger


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:37 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