Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Probleme mit ADO und timestamp (https://www.delphipraxis.net/166653-probleme-mit-ado-und-timestamp.html)

willyxv 23. Feb 2012 11:44

Datenbank: Postgre • Version: 9 • Zugriff über: ADO

Probleme mit ADO und timestamp
 
Hallo,

ich möchte gerne Daten von einem Meßgerät in meine Datenbank schreiben. Hierbei ist bei mir folgendes Problem aufgetreten:

Ich verwende einen Timer welcher alle 30 Sek den wert in die Datenbank schreiben soll.
Die Datenbank hat 3 Spalten:
- id (bigserial)
- value (real)
- obtime (timestamp without timezone)

Delphi-Quellcode:
procedure TForm1.timerTimer(Sender: TObject);
var  H,M,S,ms : Word;
      aktzeit : ttime;
      aktdatetime : tdatetime;
begin

// auf 30 Sekunden runden
  Decodetime(now, H, M, S, ms);
    S := (S div 30) * 30;
    aktzeit := Encodetime(H, M, S, ms);
  aktdatetime := strtodatetime(datetostr(now) + ' ' + timetostr(aktzeit));

// In Datenbank speichern
  sql.SQL.Clear;
    sql.SQL.Text := 'INSERT INTO "' + SQLtabelle + '" ("obtime", "value") VALUES (:obtime, :value);';
    sql.Parameters.ParamByName('obtime').Value := aktdatetime;
    sql.Parameters.ParamByName('value').Value := aktwert;
  sql.ExecSQL;

end;
nun erhalte ich die Fehlermeldung: "Typname ist ungültig"

Wenn ich den sql Befehl nur mit value ausführe, funktioniert es.

Ich bin für jede Hilfe sehr dankbar.

MfG Willy

haentschman 23. Feb 2012 11:54

AW: Probleme mit ADO und timestamp
 
Hallo...
Delphi-Quellcode:
Decodetime(now, H, M, S, ms);
S := (S div 30) * 30;
aktdatetime := Encodetime(H, M, S, ms);
... würde das nicht reichen ? EncodeTime gibt ja einen DateTime zurück :zwinker:

generic 23. Feb 2012 12:22

AW: Probleme mit ADO und timestamp
 
Delphi-Quellcode:
 sql.SQL.Text := 'INSERT INTO "' + SQLtabelle + '" ("obtime", "value") VALUES :obtime, :value);';
Hinter Values fehlt eine Klammer-Auf "(".

willyxv 23. Feb 2012 12:27

AW: Probleme mit ADO und timestamp
 
Zitat:

Zitat von generic (Beitrag 1152511)
Delphi-Quellcode:
 sql.SQL.Text := 'INSERT INTO "' + SQLtabelle + '" ("obtime", "value") VALUES :obtime, :value);';
Hinter Values fehlt eine Klammer-Auf "(".

Ja, aber das ist leider nur ein übertragungsfehler im Programm stehts richtig drinne.

Iwo Asnet 23. Feb 2012 12:51

AW: Probleme mit ADO und timestamp
 
Woher weiß ADO, das es sich bei 'obtime' um einen Timestamp (=Datetime) handelt? So schlau ist es nicht; Du solltest den Parameter noch Datentypen spendieren.

Bernhard Geyer 23. Feb 2012 13:02

AW: Probleme mit ADO und timestamp
 
Zitat:

Zitat von Iwo Asnet (Beitrag 1152521)
Woher weiß ADO, das es sich bei 'obtime' um einen Timestamp (=Datetime) handelt? So schlau ist es nicht; Du solltest den Parameter noch Datentypen spendieren.

Das kann ADO schon ganz gut.

Kann es aber sei das Value ein SQL-Schlüsselwort ist? Bennen mal deinen zweiten Parameternamen um.

haentschman 23. Feb 2012 13:04

AW: Probleme mit ADO und timestamp
 
Vieleicht ist ja das hilfreich...
http://entwickler-forum.de/archive/i...p/t-12791.html...ADO und Parameter
Zitat:

Bevor die Parameter-Werte übergeben werden dürfen, muss die Parameter-Kollektion gefüllt werden, damit das ADO-Objekt die Datentypen kennt.
:hi:

willyxv 23. Feb 2012 15:08

AW: Probleme mit ADO und timestamp
 
Ok hab jetzt den Parameter definiert, es funktioniert aber immer noch nicht.

Delphi-Quellcode:
procedure TForm1.timerTimer(Sender: TObject);
var aktdatetime : tdatetime;
begin

  aktdatetime := now;

// In Datenbank speichern
  sql.SQL.Clear;
    sql.SQL.Text := 'INSERT INTO "' + SQLtabelle + '" ("obtime", "value") VALUES (:obtime, :value);';
    sql.Parameters.CreateParameter('obtime', ftdatetime, pdinput, 8, '');
    sql.Parameters.ParamByName('obtime').Value := formatdatetime('yyy-mm-dd hh:nn:ss', aktdatetime);
    sql.Parameters.ParamByName('value').Value := aktwert;
  sql.ExecSQL;

end;
Nun erscheint die Fehlermeldung: "Die anwendung verwendet für den aktuellen vorgang einen Wert vom falschen Typ."

Verwende ich statt ftdatetime, fttimestamp kommt die fehlermeldung : Parameter falsch definiert.

ich hab es auch mit formatdatetime('yyy-mm-dd hh:nn:ss', aktdatetime) schon versucht aber es funktioniert nicht.

Welchen typ muss aktdatetime haben?

haentschman 23. Feb 2012 15:11

AW: Probleme mit ADO und timestamp
 
probiere nochmal deine Varianten ohne als Parameter das Wort "Value" zu benutzen... wie Bernhard schon sagte :zwinker:
Delphi-Quellcode:
VALUES (:obtime, :aValue)
...z.B
Nachtrag: der Feldname heißt auch Value :shock: Ohne es genau zu wissen... das ist bestimmt ein reserviertes Wort und damit als Feldname unbrauchbar. Den problematischen Feldnamen zu quoten könnte die Eselsbrücke sein...

willyxv 23. Feb 2012 15:13

AW: Probleme mit ADO und timestamp
 
geht auch nicht :(

Delphi-Quellcode:
procedure TForm1.timerTimer(Sender: TObject);
var aktdatetime : tdatetime;
begin

  aktdatetime := now;

// In Datenbank speichern
  sql.SQL.Clear;
    sql.SQL.Text := 'INSERT INTO "' + SQLtabelle + '" ("obtime") VALUES (:obtime);';
    sql.Parameters.CreateParameter('obtime', ftdatetime, pdinput, 8, '');
    sql.Parameters.ParamByName('obtime').Value := aktdatetime;
  sql.ExecSQL;

end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:14 Uhr.
Seite 1 von 2  1 2      

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