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 |
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. |
Re: Datum inkl. Uhrzeit in DATE - Feld
Füge mit:
Delphi-Quellcode:
oben genanntes Datumsformat ein.
INSERT INTO TABELLE DATUM VALUES(''' + Datum + ''');
Gruss Holger |
Re: Datum inkl. Uhrzeit in DATE - Feld
Delphi-Quellcode:
So in der Art geht das mit Parametern.
Query.SQL.Text := 'INSERT INTO TABELLE(DATUM) VALUES(:datum);';
Query.ParamByName('datum').AsDateTime := now; |
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:
machen, und das Datum inkl. Uhrzeit ist auf der Datenbank vorhanden ? Weil Datum ja eine String-Variable ist.
INSERT INTO TABELLE(DATUM) VALUES(:datum);
Gruss Holger |
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.
|
Re: Datum inkl. Uhrzeit in DATE - Feld
Und wie gebe ich die Uhrzeit mit, die der Anwender ausgewählt hat ?
Gruss Holger |
Re: Datum inkl. Uhrzeit in DATE - Feld
Hallo,
du musst das Date/Time halt vorher zusammenbauen.
Delphi-Quellcode:
und nu tdtDateTime per AsDateTime über Parameter übergeben, siehe oben
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; Heiko |
Re: Datum inkl. Uhrzeit in DATE - Feld
Delphi-Quellcode:
Zeit := DateTimePicker.Date + StrToTime(Format('%s:%s',[ComboBox1.Items[ComboBox1.ItemIndex],ComboBox2.Items[ComboBox2.ItemIndex]]));
|
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:
Nur so wie oben klappt es nicht.
Datum: TDateTime;
SQLString: String; ... SQLString := 'INSERT INTO TABELLE (DATUM) VALUES (TO_DATETIME(''' + Datum + '''))'; Gruss Holger |
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).
|
Re: Datum inkl. Uhrzeit in DATE - Feld
Und wie ?
|
Re: Datum inkl. Uhrzeit in DATE - Feld
Haben wir doch lang und breit in diesem Thread beschrieben.
|
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:
Gruss
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; Holger |
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.
|
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 |
Re: Datum inkl. Uhrzeit in DATE - Feld
Das muss so in "Werte" stehen: ":datum", also mit vorangestelltem Doppelpunkt, damit es als Parameter erkannt wird.
|
Re: Datum inkl. Uhrzeit in DATE - Feld
Habe es jetzt:
Das hatte ich gesucht:
Delphi-Quellcode:
Gruss
TO_DATE(''' + Datum + ''',''DD.MM.YYYY HH24:MI:SS'')
Holger |
Re: Datum inkl. Uhrzeit in DATE - Feld
Hallo,
dein SQL-Statement ist extrem schwer zu lesen
Delphi-Quellcode:
Wie du siehst, entfallen auch deine '' (OK, QuotedStr würde Abhilfe schaffen).
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; 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 |
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:
3.) Jetzt sollte der Zeitpunkt angezeigt werden, damit man nicht völlig blind programmiert
var
zeitpunkt: TDateTime; begin zeitpunkt:= Int(DatePicker1.Date) + TimePicker1.Time; // die funktion Int() ist ein Bugfix für eine Fehlfunktion im TDateTimePicker
Delphi-Quellcode:
4.) nun muss man den Zeitpunkt irgendwie in eine SQL-Anweisung hineinbekommen.
LabelZeitpunkt.Caption := DateTimeToStr(zeitpunkt)
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; |
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