Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Aktuelles Datum in die DB speichern? (https://www.delphipraxis.net/173501-aktuelles-datum-die-db-speichern.html)

OrNEC 28. Feb 2013 12:54

Datenbank: SQLite • Version: 3 • Zugriff über: SimpleDelphi-Wrappers von Tim Anderson

Aktuelles Datum in die DB speichern?
 
Hallo,

ich versuche schon seit einer Stunde das aktuelle Datum in die DB zu speichern aber es gelingt mir irgendwie nicht. Hier der Code:

Delphi-Quellcode:
    // Tabelle media füllen
    sSQL := 'INSERT INTO media(mediatitle, description, status, isbn, publicationyear, insertdate,';
    sSQL := sSQL + 'fk_place_id, fk_publisher_id, fk_author_id, fk_category_id, fk_language_id, fk_entleiher_id, edition) VALUES ("'+TitleEdit.Text+'",';
    sSQL := sSQL + '"'+ DescriptionMemo.Text +'",';
    sSQL := sSQL + '"'+ IntToStr(status) +'",';
    sSQL := sSQL + '"'+ ISBNEdit.Text +'",';
    sSQL := sSQL + '"'+ PublicationyearEdit.Text +'",';
    sSQL := sSQL + '"'+ Date('now') +'",'; // <---- hier der Fehler
    sSQL := sSQL + '"'+ IntToStr(Integer(PlaceComboBox.Items.Objects[PlaceComboBox.ItemIndex])) +'",';
    sSQL := sSQL + '"'+ IntToStr(Integer(PublisherComboBox.Items.Objects[PublisherComboBox.ItemIndex])) +'",';
    sSQL := sSQL + '"'+ IntToStr(Integer(AuthorComboBox.Items.Objects[AuthorComboBox.ItemIndex])) +'",';
    sSQL := sSQL + '"'+ IntToStr(Integer(CategoryComboBox.Items.Objects[CategoryComboBox.ItemIndex])) +'",';
    sSQL := sSQL + '"'+ IntToStr(Integer(LanguageComboBox.Items.Objects[LanguageComboBox.ItemIndex])) +'",';
    sSQL := sSQL + '"'+ IntToStr(Integer(EntleiherComboBox.Items.Objects[EntleiherComboBox.ItemIndex])) +'",';
    sSQL := sSQL + '"'+ EditionEdit.Text +'");';
Hab schon das Datum mit DateToStr konvertiert und alles mögliche versucht, aber es will nicht irgendwie. Kann mir da vllt jemand weiter helfen?

Danke!

Edit:
Die Fehlermeldung lautet: [DCC Fehler] NewMediaForm.pas(333): E2034 Zu viele Parameter

DeddyH 28. Feb 2013 13:00

AW: Aktuelles Datum in die DB speichern?
 
Falls die verwendeten Komponenten/Klassen/Units parametrisierte Statements unterstützen, solltest Du diese nutzen.

OrNEC 28. Feb 2013 13:01

AW: Aktuelles Datum in die DB speichern?
 
Zitat:

Zitat von DeddyH (Beitrag 1205400)
Falls die verwendeten Komponenten/Klassen/Units parametrisierte Statements unterstützen, solltest Du diese nutzen.

Hast du vllt ein Beispiel?

mkinzler 28. Feb 2013 13:01

AW: Aktuelles Datum in die DB speichern?
 
Der Datumsstring hat anscheinend nicht das richtige Format. Ich würde, auch unabhängig von diesem Problem, zum Einsatz von (SQL-)Parametern raten.

OrNEC 28. Feb 2013 13:04

AW: Aktuelles Datum in die DB speichern?
 
Zitat:

Zitat von mkinzler (Beitrag 1205403)
Der Datumsstring hat anscheinend nicht das richtige Format. Ich würde, auch unabhängig von diesem Problem, zum Einsatz von (SQL-)Parametern raten.

Also mit Insert klappt alles wunderbar, hier der Code:

Delphi-Quellcode:
// media Tabelle füllen
sSQL := 'INSERT INTO media(fk_author_id, mediatitle, description, status, isbn,';
sSQL := sSQL + 'edition, publicationyear, insertdate, fk_publisher_id, fk_place_id, fk_category_id, fk_language_id, fk_author_id, fk_entleiher_id) VALUES (1, "Java", "Das ist die Beschreibung!", 1,';
sSQL := sSQL + '"3-3434-78", 3, 2012, Date("now"), 1, 1, 1, 1, 1, 1);';

mkinzler 28. Feb 2013 13:04

AW: Aktuelles Datum in die DB speichern?
 
Zitat:

Zitat von OrNEC (Beitrag 1205402)
Zitat:

Zitat von DeddyH (Beitrag 1205400)
Falls die verwendeten Komponenten/Klassen/Units parametrisierte Statements unterstützen, solltest Du diese nutzen.

Hast du vllt ein Beispiel?

SQL-Code:
INSERT INTO media(mediatitle, description, status, isbn, publicationyear, insertdate,';
    sSQL := sSQL + 'fk_place_id, fk_publisher_id, fk_author_id, fk_category_id, fk_language_id, fk_entleiher_id, edition) VALUES ( :Mediatitle, :description, ... ;
Delphi-Quellcode:
...
Query.ParamByName(':insertdate').Value := Now;
...

OrNEC 28. Feb 2013 13:06

AW: Aktuelles Datum in die DB speichern?
 
Ich arbeite mit SQLite, da ist es nicht so einfach mit den Querys.

Bernhard Geyer 28. Feb 2013 13:08

AW: Aktuelles Datum in die DB speichern?
 
Zitat:

Zitat von OrNEC (Beitrag 1205408)
Ich arbeite mit SQLite, da ist es nicht so einfach mit den Querys.

Ist genau so einfach!
Wenn es nicht einfach ist liegt es an der gewählten und an dieser Stelle unzulänglichen komponenten wenn diese keine parametrisierten Abfragen unterstützt.

Aphton 28. Feb 2013 13:08

AW: Aktuelles Datum in die DB speichern?
 
Benütze bitte Format(), bitte!

Ich hab mich auch vor einiger Zeit damit gequält - deshalb hab ich einfach ne Konvertier Funktion für DateTime geschrieben, die ich dann als String abspeichere!

mkinzler 28. Feb 2013 13:10

AW: Aktuelles Datum in die DB speichern?
 
Zitat:

Zitat von OrNEC (Beitrag 1205408)
Ich arbeite mit SQLite, da ist es nicht so einfach mit den Querys.

Kommt auf die verwendeten Komponenten an. Mit UniDAC sollte es z.B. funktionieren.

Im 2. Fall hast du keine "" um das Datum.

OrNEC 28. Feb 2013 13:11

AW: Aktuelles Datum in die DB speichern?
 
Zitat:

Zitat von Aphton (Beitrag 1205410)
Benütze bitte Format(), bitte!

Du meinst Format(Date("now"))?

Bringt auch nix... :gruebel:

OrNEC 28. Feb 2013 13:12

AW: Aktuelles Datum in die DB speichern?
 
Zitat:

Zitat von mkinzler (Beitrag 1205412)
Zitat:

Zitat von OrNEC (Beitrag 1205408)
Ich arbeite mit SQLite, da ist es nicht so einfach mit den Querys.

Kommt auf die verwendeten Komponenten an. Mit UniDAC sollte es z.B. funktionieren.

Im 2. Fall hast du keine "" um das Datum.

Ich möchte keine zusätzliche Komponenten verwenden.
Was hat UniDAC noch für Vorteile? Ist das Kostenlos?

mkinzler 28. Feb 2013 13:19

AW: Aktuelles Datum in die DB speichern?
 
Zitat:

Zitat von OrNEC (Beitrag 1205414)
Zitat:

Zitat von mkinzler (Beitrag 1205412)
Zitat:

Zitat von OrNEC (Beitrag 1205408)
Ich arbeite mit SQLite, da ist es nicht so einfach mit den Querys.

Kommt auf die verwendeten Komponenten an. Mit UniDAC sollte es z.B. funktionieren.

Im 2. Fall hast du keine "" um das Datum.

Ich möchte keine zusätzliche Komponenten verwenden.

Dann musst du mit dem Problem leben, alles manuell ins erwartete Format zu bringen. Und musst wohl auf sinnvolle Features wie die Parameter usw. verzichten.

Zitat:

Was hat UniDAC noch für Vorteile? Ist das Kostenlos?
Einige. Z.B. ermöglicht es einen datenbankunabhängigen Zugriff. Ist aber nicht kostenlos.

es gibt aber auch kostenlose Lösungen für SQLite wie Zeos oder Synopsis

Aphton 28. Feb 2013 13:44

AW: Aktuelles Datum in die DB speichern?
 
Zitat:

Zitat von OrNEC (Beitrag 1205413)
Zitat:

Zitat von Aphton (Beitrag 1205410)
Benütze bitte Format(), bitte!

Du meinst Format(Date("now"))?

Bringt auch nix... :gruebel:

Nein...
Delphi-Quellcode:
const
  queryInsertMedia =
    'INSERT INTO media (mediatitle, description, status, isbn, publicationyear, insertdate, fk_place_id, fk_publisher_id, fk_author_id, fk_category_id, fk_language_id, fk_entleiher_id, edition) ' +
    'VALUES ("%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s")';

{...}

sSql := Format(queryInsertMedia, [TitleEdit.Text, DescriptionMemo.Text, IntToStr(status), {...}]);
Edit:
Format(Date("now"))
"??
Delphi-Syntax!

Aphton 28. Feb 2013 13:53

AW: Aktuelles Datum in die DB speichern?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Evt. gibts da einen viel einfacheren Weg bzw. die diversen DBS bieten spezielle Funktionalitäten an, jedoch hatte ich damals nichts für SQLite gefunden, womit ich zufrieden war.
Im Anhang ist ne kleine Unit, die DateTime zu nem Integer konvertiert.
aus 28.02.2013 wird 20130228 (yyyymmdd)
aus 14:49:50 wird 144950 (ohne ":")

Delphi-Quellcode:
var
  encodedTime: Int64;
begin
  encodedTime := encodeDateTime(Now); // den Inhalt dieser Variable kannst du einfach in die DB speichern

  ShowMessage(formatDecodedTime(DecodeDateTime_Time(encodedTime)));
  ShowMessage(formatDecodedDate(DecodeDateTime_Date(encodedTime)));
end;

OrNEC 28. Feb 2013 15:32

AW: Aktuelles Datum in die DB speichern?
 
Meinst du das geht irgendwie nicht anders?

Arbeite inzwischen mit Params, aber das hilft auch nicht.

Delphi-Quellcode:
    // Tabelle media füllen
    sSQL := 'INSERT INTO media(mediatitle, description, status, isbn, edition, publicationyear, insertdate,';
    sSQL := sSQL + 'fk_publisher_id, fk_place_id, fk_category_id, fk_language_id,';
    sSQL := sSQL + 'fk_author_id, fk_entleiher_id) VALUES (:mediatitle, :description, :status, :isbn, :edition, :publicationyear, :insertdate, :fk_publisher_id, :fk_place_id, :fk_category_id, :fk_language_id, :fk_author_id, :fk_entleiher_id);';
    db.AddParamText(':mediatitle', TitleEdit.Text);
    db.AddParamText(':description', DescriptionMemo.Text);
    db.AddParamInt(':status', status);
    db.AddParamText(':isbn', ISBNEdit.Text);
    db.AddParamInt(':edition', varedition);
    db.AddParamInt(':publicationyear', varpublicationyear);
    db.AddParamText(':insertdate', Date("now")); // <--- hier immer noch der Fehler
    db.AddParamInt(':fk_publisher_id', Integer(PublisherComboBox.Items.Objects[PublisherComboBox.ItemIndex]));
    db.AddParamInt(':fk_place_id', Integer(PlaceComboBox.Items.Objects[PlaceComboBox.ItemIndex]));
    db.AddParamInt(':fk_category_id', Integer(CategoryComboBox.Items.Objects[CategoryComboBox.ItemIndex]));
    db.AddParamInt(':fk_language_id', Integer(LanguageComboBox.Items.Objects[LanguageComboBox.ItemIndex]));
    db.AddParamInt(':fk_author_id', Integer(AuthorComboBox.Items.Objects[AuthorComboBox.ItemIndex]));
    db.AddParamInt(':fk_entleiher_id', Integer(EntleiherComboBox.Items.Objects[EntleiherComboBox.ItemIndex]));

DeddyH 28. Feb 2013 15:35

AW: Aktuelles Datum in die DB speichern?
 
Was genau soll Date("now") bewirken? Oder meintest Du einfach nur Date?

mkinzler 28. Feb 2013 15:47

AW: Aktuelles Datum in die DB speichern?
 
Gibt es db.AddParamDate()?

OrNEC 28. Feb 2013 15:48

AW: Aktuelles Datum in die DB speichern?
 
Hab mit den Params inzwischen ein anderes Problem, die Strings werden abgeschnitten, es wird nur ca. die Hälfte des Wortes gespeichert. Ich werde verrückt. :roteyes:

OrNEC 28. Feb 2013 15:54

AW: Aktuelles Datum in die DB speichern?
 
Zitat:

Zitat von mkinzler (Beitrag 1205456)
Gibt es db.AddParamDate()?

Leider nicht, aber hab das Problem mit

Delphi-Quellcode:
db.AddParamText(':insertdate', FormatDateTime('dd-mm-yyyy', Now));
gelöst.

Hab aber ein anderes Problem, siehe Post #19 :wall:

Sherlock 28. Feb 2013 16:02

AW: Aktuelles Datum in die DB speichern?
 
Neues Problem neuer Thread. Aber zurück zum Datum. Kennt Deine DB sysdate?

Sherlock

mkinzler 28. Feb 2013 16:09

AW: Aktuelles Datum in die DB speichern?
 
Welche Bibliothek verwendest du für den Zugriff?

Bernhard Geyer 28. Feb 2013 16:12

AW: Aktuelles Datum in die DB speichern?
 
Zitat:

Zitat von mkinzler (Beitrag 1205466)
Welche Bibliothek verwendest du für den Zugriff?

Hat er doch beim Erstellen angegeben: "SimpleDelphi-Wrappers von Tim Anderson"

RWarnecke 28. Feb 2013 16:17

AW: Aktuelles Datum in die DB speichern?
 
Warum wird das Datum nicht als Integer gespeichert ? UnixTimeStamp ? Ich mache das prinzipiell so und es funktioniert einwandfrei.

Bernhard Geyer 28. Feb 2013 16:22

AW: Aktuelles Datum in die DB speichern?
 
Zitat:

Zitat von RWarnecke (Beitrag 1205469)
Warum wird das Datum nicht als Integer gespeichert ? UnixTimeStamp ? Ich mache das prinzipiell so und es funktioniert einwandfrei.

Beschränkte Auflösung (Sekunden), Beschränkter Gültigkeitsbereich, Keine SQL-Abfragen wie between, Datepart, ... möglich

RWarnecke 28. Feb 2013 16:44

AW: Aktuelles Datum in die DB speichern?
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1205471)
Beschränkter Gültigkeitsbereich

Das meinst Du doch aber nur auf das Datum was vor dem 01.01.1970 ist oder ? Wobei hier eine negative Zahl auch funktioniert um ein Datum vor dem 01.01.1970 zu ermitteln.

Zitat:

Zitat von Bernhard Geyer (Beitrag 1205471)
Keine SQL-Abfragen wie between, Datepart, ... möglich

So explizit hat der Threadersteller es nicht gesagt oder beschrieben, deswegen ist meine Variante ja nicht ganz falsch oder ?

Bernhard Geyer 28. Feb 2013 18:25

AW: Aktuelles Datum in die DB speichern?
 
Zitat:

Zitat von RWarnecke (Beitrag 1205475)
Zitat:

Zitat von Bernhard Geyer (Beitrag 1205471)
Beschränkter Gültigkeitsbereich

Das meinst Du doch aber nur auf das Datum was vor dem 01.01.1970 ist oder ? Wobei hier eine negative Zahl auch funktioniert um ein Datum vor dem 01.01.1970 zu ermitteln.

und nach 2038 auf 32-Bit System?

Zitat:

Zitat von Bernhard Geyer (Beitrag 1205471)
Keine SQL-Abfragen wie between, Datepart, ... möglich

So explizit hat der Threadersteller es nicht gesagt oder beschrieben, deswegen ist meine Variante ja nicht ganz falsch oder ?[/QUOTE]
Nicht falsch, aber mann sollte die Einschränkungen kennen/wissen/berücksichtigen.

p80286 28. Feb 2013 22:06

AW: Aktuelles Datum in die DB speichern?
 
Zitat:

Zitat von OrNEC (Beitrag 1205457)
Hab mit den Params inzwischen ein anderes Problem, die Strings werden abgeschnitten, es wird nur ca. die Hälfte des Wortes gespeichert. Ich werde verrückt. :roteyes:

Dann solltest Du
a) über eine andere DB-Verbindungskomponente nachdenken
b) ggf. Ansistrings nutzen.

Gruß
K-H

Medium 28. Feb 2013 22:12

AW: Aktuelles Datum in die DB speichern?
 
Wenn ich in MySQL das aktuelle Datum haben will, nehme ich immer die vom DBMS gestellte Funktion NOW(). Vorteil: Es ist egal was auf den (prinzipiell ja unverlässlichen) Clients für ein Datum eingestellt ist, und das Format passt in jedem Fall. Ich kenne SQLite jedoch nicht, aber da müsste es doch was ähnliches geben.

Bernhard Geyer 28. Feb 2013 22:45

AW: Aktuelles Datum in die DB speichern?
 
Zitat:

Zitat von p80286 (Beitrag 1205523)
Zitat:

Zitat von OrNEC (Beitrag 1205457)
Hab mit den Params inzwischen ein anderes Problem, die Strings werden abgeschnitten, es wird nur ca. die Hälfte des Wortes gespeichert. Ich werde verrückt. :roteyes:


Da Tippe ich drauf das die Version der Unit nicht D2009+-Kompatible ist bzw. korrekt angepasst wurde.

OrNEC 28. Feb 2013 22:51

AW: Aktuelles Datum in die DB speichern?
 
Zitat:

Zitat von p80286 (Beitrag 1205523)
Zitat:

Zitat von OrNEC (Beitrag 1205457)
Hab mit den Params inzwischen ein anderes Problem, die Strings werden abgeschnitten, es wird nur ca. die Hälfte des Wortes gespeichert. Ich werde verrückt. :roteyes:

Dann solltest Du
a) über eine andere DB-Verbindungskomponente nachdenken

Welche gibt's den noch?

Hansa 1. Mär 2013 01:14

AW: Aktuelles Datum in die DB speichern?
 
Trigger

DeddyH 1. Mär 2013 08:11

AW: Aktuelles Datum in die DB speichern?
 
Zitat:

Zitat von OrNEC (Beitrag 1205532)
Zitat:

Zitat von p80286 (Beitrag 1205523)
Dann solltest Du
a) über eine andere DB-Verbindungskomponente nachdenken

Welche gibt's den noch?

Zitat:

Zitat von Hansa (Beitrag 1205533)
Trigger

:gruebel:

mkinzler 1. Mär 2013 08:49

AW: Aktuelles Datum in die DB speichern?
 
Er meint wohl zum automatischen Setzen eines Timestamps beim Einfügen; also als Antwort auf den Betreff der Frage und nicht als Antwort auf die ursprüngliche Frage noch der Nachfrage im Beitrag vor ihm.

DeddyH 1. Mär 2013 09:57

AW: Aktuelles Datum in die DB speichern?
 
Das kann man doch dazuschreiben. Ich hatte mich gewundert, was denn ein Trigger an der Tatsache, dass Daten nur zur Hälfte gespeichert werden, ändern sollte.


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