Also, ich habe mir gerad zu Testzwecken ein kleines Programm geschrieben, das erzeugt die Datenbank nach folgenden Befehlen:
Delphi-Quellcode:
dsqlDatabase.DatabaseName := 'aktien.db';
dsqlDatabase.CreateDatabase;
dsqlDatabase.Execute16('CREATE TABLE aktienwerte (Datum DATE);');
Jetzt hab ich in den Demos zu der Komponente etwas gefunden, das hab ich mal für meinen Fall umgeschrieben:
Delphi-Quellcode:
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;
Das entspricht doch den Parametern oder?
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:
{ We bind all columns as strings. DISQLite3 will convert them to
integers or floats as appropriate. }
(wobei mein Datum ja trotzdem kein Integer bzw. Float ist)
Jetzt hatte ich ebenfalls probiert, ein Insert über die
Query-Komponente zu versuchen, dabei hatte ich folgendes geschrieben:
Delphi-Quellcode:
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;
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).
Ü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)