![]() |
Re: Werte im DBGrid ändern
Laß diesen Browser mal außen vor...
Nimm eine zusätzliche Query für das "befüllen" dazu das INSERT mit Parametern. |
Re: Werte im DBGrid ändern
Oder wenn es eben mit diesem Browser sein muss, dann im vorgegebenen Format.
SQL-Code:
INSERT INTO Tabelle(Datum) VALUES('2010-01-01')
|
Re: Werte im DBGrid ändern
Also, ich habe mir gerad zu Testzwecken ein kleines Programm geschrieben, das erzeugt die Datenbank nach folgenden Befehlen:
Delphi-Quellcode:
Jetzt hab ich in den Demos zu der Komponente etwas gefunden, das hab ich mal für meinen Fall umgeschrieben:
dsqlDatabase.DatabaseName := 'aktien.db';
dsqlDatabase.CreateDatabase; dsqlDatabase.Execute16('CREATE TABLE aktienwerte (Datum DATE);');
Delphi-Quellcode:
Das entspricht doch den Parametern oder? :|
procedure TfmDate.btInsertClick(Sender: TObject);
const InsertSQL = 'INSERT INTO aktienwerte (Datum) VALUES (?);'; var Datum: string; Stmt: TDISQLite3Statement; begin Datum := '2010-12-01'; Stmt := dsqlDatabase.Prepare16(InsertSQL); try Stmt.Bind_Str16(1, Datum); Stmt.Step; finally Stmt.Free; end; end; Dennoch speichere ich im Moment das Datum ebenfalls als String ab (oder?), allerdings gibt es auch keine Stmt.Bind_Date Funktion in der Demo hatte ich allerdings zu dem Punkt folgendes Zitat gefunden: Zitat:
Jetzt hatte ich ebenfalls probiert, ein Insert über die Query-Komponente zu versuchen, dabei hatte ich folgendes geschrieben:
Delphi-Quellcode:
Dabei bekomm ich aber immer den Fehler, dass 2010-12-01 kein gültiges Datum ist. (ich hatte ebenfalls "20101201", 2010.12.01, "2010,12,01" und 2010/12/01 versucht -> überall der gleiche Fehler).
procedure TfmDate.btInsert2Click(Sender: TObject);
begin dsqlQuery.InsertSQL := 'INSERT INTO aktienwerte (Datum) VALUES (:Datum);'; dsqlQuery.Params.ParamByName('Datum').Value := StrtoDate('2010/12/01'); dsqlQuery.Insert; end; Über die erste Insert-Methode konnte ich Werte in die Datenbank schreiben (auch wenn ich das Datum als String speichere), wenn ich die gespeicherten Werte nun anzeigen möchte, wird mir in dem DBGrid nur "2010" angezeigt. (bei Interesse kann ich auch gern den ganzen Code posten bzw. hochladen) |
Re: Werte im DBGrid ändern
mach mal...ich hab heute Zeit. Und das nagt an meiner Ehre :zwinker:
...ohne Schießgewähr :stupid: |
Re: Werte im DBGrid ändern
Funktioniert das Statement von oben denn im DB-Browser?
Zitat:
|
Re: Werte im DBGrid ändern
Zitat:
Ich hab gerad nochmal folgendes gemacht:
Delphi-Quellcode:
(danach habe ich "dsqlQuery.FieldByName('Datum').AsString in die Watchliste getan und auf das obere einen Haltepunkt gesetzt (auch wenn es keinen Effekt hat))
procedure TfmDate.dsqlQueryAfterOpen(DataSet: TDataSet);
begin dsqlQuery.FieldByName('Datum').AsString; end; Die Watchliste zeigt mir nur "2010" an, ich versteh einfach nicht, wo der Rest von dem Datum bleibt. Edit: Zitat:
|
Re: Werte im DBGrid ändern
schau dir mal in der Zwischenzeit
![]() |
Re: Werte im DBGrid ändern
Zitat:
Delphi-Quellcode:
Hab AFieldDef.DataType in die Watchliste getan und Haltepunkte gesetzt, AFieldDef ist vorher ein ftFloat, das erklärt wieso aus
procedure TfmDate.dsqlQueryInitFieldDef(const AColumn: TDISQLite3Column;
const AFieldDef: TFieldDef); begin if AColumn.ColumnName = 'Datum' then AFieldDef.DataType := ftDate; end; 2010,04,02 -> 2010,04 2010-04-02 -> 2010 usw. wird. Nachdem ich den Feldtypen auf ftDate umgewandelt hab, bekomm ich den Fehler, dass "-1710415.0" kein gültiger "timestamp" ist, liegt das an der Formatierung? (das werd ich gleich mal testen) Edit: Also, ich hab das Datum mal ohne Trennzeichen formatiert 20100201 (für den 2010.02.01 -> 01.02.2010). Das Ergebnis ist, dass mein DBGrid nun 06.12.50320 anzeigt, dass erinnert mich wieder an das, was eine Freundin gesagt hat: Zitat:
Edit2: Hab gerad nochmal nachgeschaut, hat das was mit dem "30.12.1899" zu tun? Ich begeb mich mal an das Umrechnen. |
Re: Werte im DBGrid ändern
Liste der Anhänge anzeigen (Anzahl: 1)
aaalsooo...
Ich habe jetzt 1,5 Stunden gebraucht um das Datum darzustellen. Dabei hab ich mit keinem vernünftigen SQL mit Parametern den Wert in die DB bekommen. Nach Studium der Demo DateTime und abschreiben ist es mir dennoch gelungen. Fazit zu SQLite3 (mein persönliches): - keine Vernünftige Query, wo man nur einfach ein Insert ausführen kann. (Bei der Zuweisung des SQLInsert Strings Fehlermeldung SQL is Empty :gruebel: ) - Die Query kann nicht direkt an eine Datasource gebunden werden -> Fehlermeldung - für mich persönlich unübersichtlich bis unlogisch - das ist für jeden selbst die Entscheidung ob er damit arbeitet. Im Anhang dein Testprojekt zurück: - Entschuldige die Unordnung, stammt vom vielen herumprobieren. Es funktioniert: - DB Erstellen - der Feldtyp für ein Datumsfeld muß REAL sein :gruebel: wie unlogisch mit DATE geht´s in die Hose - Insert 3 - im SQL muß der Datumswert (String) in der Form yyyy-mm-dd vorliegen. Alles andere geht daneben. Gleichzeitig muß der String innerhalb des SQL noch mit der Funktion julianday umgewandelt werden. - im Feld Init muß dann der Feldtyp auf ftDate gestellt werden. --> Dann wird das Datum im Grid als dd.mm.yyyy angezeigt. ...was ein Krampf. :roll: Tip: Da du mit Aktien und Kursen arbeitest, dieses dann vieleicht noch auswerten willst lege ich dir, wenn es kostenlos sein soll, Firebird in Verbindung mit Zeos ans Herz. Unkompliziert, Volles SQL mit gescheiten Parametern, übersichtlich. Ich kann nicht sehen, wenn sich jemand quält. Frage nach, wenn du das in Betracht ziehst. Jetzt stehst du noch am Anfang da ist der Einstieg leicht. Die einfachen Sachen wird man mit SQLite machen können. Wenn es aber komplizierter wird, die SQL´s komplexer bist du ohne vernünftige Parameterverarbeitung erschossen. PS: meine Platte hat das ganze wieder los :cheer: |
Re: Werte im DBGrid ändern
Zitat:
Ich hatte mich für SQLite und DISQLite3 Personal entschieden, da ich so meinem Vater (für den ich das Programm schreibe) lediglich die .exe mitgeben muss (nicht mal eine .dll) und nichts extra installieren muss. Von Firebird gibt es doch eine embedded-Version oder? (das werd ich mir morgen genauer anschauen, vielleicht auch jetzt gleich noch, will aber noch ein Buch auslesen ;)). Zitat:
Ich danke Dir für Deine Hilfsbereitschaft! Zitat:
Ich danke Dir und DeddyH für Eure Hilfsbereitschaft! :cheers: (geht leider nur virtuell (das Anstoßen) ;)) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:02 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-2025 by Thomas Breitkreuz