Entwickler-Ecke

Datenbanken - [firebird] INSERT von Datum schlägt fehl :(


jo-freaky - Di 27.06.06 17:45
Titel: [firebird] INSERT von Datum schlägt fehl :(
Hi,

habe mal wieder ein kleines Problemchen:
DB: Firebird Embedded 1.5

Ich will ein Datum in eine Tabelle einfügen und dachte mir das ungefähr so:

Insert into TABLE (DATUM) VALUES (12.12.2001); // In IBExpert funktioniert's

das hat leider nicht funktioniert, hab' auch schon Insert into TABLE (DATUM) VALUES (12.12.2001 AS DATE); versucht - fehlanzeige.

Danke im Vorraus!

Gruß
Johannes


mkinzler - Di 27.06.06 17:52

Ich kann mir nicht vorstellen, das es ohen Quotes funktioniert.

SQL-Anweisung
1:
Insert into TABLE (DATUM) VALUES ('12.12.2001');                    


jo-freaky - Di 27.06.06 19:17

Mhrm das hatte ich auch schon alle versucht, dann müsste das ja so aussehen oder?


Delphi-Quelltext
1:
ReCreateQ.SQL.Add('INSERT INTO RECHNUNGEN (REDAT) Values ('12.12.2001')');                    


dann muckt allerdings der compiler:

Operator oder Semikolon fehlt.


Gruß
Johannes


matze - Di 27.06.06 19:34

du musst das auch dementsprechend formatieren:

Delphi-Quelltext
1:
2:
3:
4:
function DateTimetoSQL(DateTime:TDateTime):string;
begin
     result := formatdatetime('yyyy-mm-dd hh:nn:ss',DateTime);
end;


und wenn du IN einem String ein einfaches Anführungszeichen haben willst musst du es verdoppeln: ''


jasocul - Di 27.06.06 19:38


Delphi-Quelltext
1:
ReCreateQ.SQL.Add('INSERT INTO RECHNUNGEN (REDAT) Values (' + QuotedStr('12.12.2001') + ')');                    

Eine andere Möglichkeit wäre die Nutzung von Parametern.


jo-freaky - Di 27.06.06 20:04

Ich hab's jetzt mal so gemacht wie jascoul:


Delphi-Quelltext
1:
ReCreateQ.SQL.Add('INSERT INTO RECHNUNGEN (KDNR,REDAT) Values ('+QuotedStr('424')+',' + QuotedStr('12.12.2001') + ');');                    


Der Compiler meckert nichtmehr jedoch kriege ich jetzt folgende Exception:

Exception der Klasse EZSQLException, 'Cannot retrieve Resultset data'.

Verwendete Komponenten: ZeosLib


Thx

Gruß
Johannes


mkinzler - Di 27.06.06 20:22

Hast du Query.Open; gemacht? Ein Insert liefert keinen ResultSet. Du mußt query.ExecSQL; ausführen


jo-freaky - Di 27.06.06 20:43

Vielen Dank!

Genau das wars!
Wo kann ich den Unterschied zwischen .Open und ExecSQL nachlesen?

Gruß
Johannes


mkinzler - Di 27.06.06 20:47

.Open wird nur bei Select-Statements verwendet; es wird ein Ergebnis zurückgeliefert. .ExecSQL wird für alle Abfrage verwendet, welche kein Ergebnis zurückliefern.


jo-freaky - Di 27.06.06 21:33

Dann lag ich mit meiner Vermutung also richtig.

Vielen Dank für eure prompte kompetente Hilfe!!!!

Gruß
Johannes