Entwickler-Ecke

Datenbanken - Zeitformat unter Access


t.norge - Mi 12.05.04 18:06
Titel: Zeitformat unter Access
Hallo Zusammen,
ich habe eine Tabelle erstellt die unter anderem eine Spalte Zeitstempel enthält, diesen habe ich als Standarddatum mit dem Standardwert Jetzt() festgelegt.

Das sieht unter Access wie folgt aus: 12.05.2004 17:53:19

Ich habe ein Problem beim Update, ich weiß nicht wie ich das Datum richtig anzusprechen habe. Beim probieren habe ich herausgefunden, dass man ein Datum mit #05/12/2004# ansprechen kann. bei der zeit habe ich nichts herausfinden können. Mein Versuch war bislang:



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
...
with ADOQuery
 do 
  begin
   with SQL
    do
     begin
      clear;
      add('Update Segment');
      add('set Kategorie = 4'); //Alle Zeilen die nach dem 12.05.2004 um 17:53:19 geschrieben wurden 
      add('where TimeStamp > #05/12/2004 17:57:33#');// sollen geändert werden
     end//END DO
   execsql;
  end//END WITH
...


und was dabei rauskommt ist eine Fehlermeldung:

Ein Parameter ist nicht ordnungsgemäß definiert. Inkonsistente oder unvollständige Informationen wurden angegeben.

Als ich die Spalten für Testzwecke umdefiniert hatte (nur Datum), gab es die Fehlermeldung nicht, es muß also mit der Konvertierung zu tun haben, speziell mit der Zeit, schätze ich.

kann mir da jemand weiterhelfen?

Schöner Gruß

Torge Wendt


MSCH - Mi 12.05.04 19:21

Vorsicht!: In solchen Queries bedeutet der Doppelpunkt ":" ein Parameter, sprich, deine Query sucht nach den Parametern: :57 und :33.

Versuchs mal so:
Zitat:
where TimeStamp>:ParameterTimeStamp;


und in deiner SQL-Query:

Delphi-Quelltext
1:
Qerry.ParamMeters.ParamByName('ParameterTimeStamp').Value:= {TDatetime-Wert}                    

grez
msch


t.norge - Do 13.05.04 09:27

Erstmal vielen Dank!

...aber jetzt gibt es leider eine neue Fehlermeldung:

ADOQuery: Parameter 'ParameterTimestamp' nicht gefunden

Muß ich noch was ändern oder einstellen?


t.norge - Do 13.05.04 09:52

Habe es nun doch noch hinbekommen:


habe alles beibehalten, wie es zunächst war, nur die Where-Klausel in der SQL-Abfrage verändert


Quelltext
1:
2:
...
where Timestamp > datevalue("{DatetimeString}");


Trotzdem vielen Dank der Mühen!


schöner Gruß

Torge


t.norge - Do 13.05.04 14:25

Habe jetzt leider doch nochmal eine Frage, habe mich jetzt doch dazu entschlossen es mit der Parameter-version zu versuchen, nur bekomme ich jetzt so 'ne Fehlermeldung:

ADOQuery: Parameter 'Timestamp' nicht gefunden.

muß ich den noch irgendwie/irgendwo deklarieren?

Die ganz oben genannte SQL-Abfrage ist unter Access möglich, aus Delphi heraus an Access gesandt leider nicht... kann mir bitte jemand helfen, ich verbringe nun schon fast den ganzen Tag mit dieser einen b... Anweisung :cry:

Schöner Gruß

torge


t.norge - Do 13.05.04 17:09

So, jetzt klappts denn doch wirklich, habe folgenden Code hier im Forum finden können und den auf mein Projekt umgebastelt, es tuts...



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
var 
  qry: TADOQuery; 

begin 

  qry := TADOQuery.Create(nil
  qry.Connection := YourADOConnection; 

  qry.SQL.Text := 'UPDATE info SET ws = :WS WHERE datum = :DATUM '
  qry.Parameters.ParamByName('WS').DataType := ftInteger; 
  qry.Parameters.ParamByName('WS').Value := 4
  qry.Parameters.ParamByName('WS').DataType := ftDate; 
  qry.Parameters.ParamByName('WS').Value := Now; 
  qry.ExecSQL; 

  qry.Free;


Danke dem Verfasser


smiegel - Fr 14.05.04 07:29

Hallo,

@t.norge

Die ist da ein kleiner Fehler unterlaufen:

Statt

Delphi-Quelltext
1:
2:
  qry.Parameters.ParamByName('WS').DataType := ftDate;  
  qry.Parameters.ParamByName('WS').Value := Now;

müsste es doch

Delphi-Quelltext
1:
2:
  qry.Parameters.ParamByName('DATUM').DataType := ftDate;  
  qry.Parameters.ParamByName('DATUM').Value := Now;

heissen? Oder?


t.norge - Fr 14.05.04 09:20

Ja, da hast Du recht!

Habe ich aber in meinem Programm auch so geschrieben, der Source da oben war nur eine kopie eines Fundstückes aus dem Netz. Habe den auf mein Programm angepasst.

*Sich natürlich dennoch über die Resonance (wenn man's so schreibt) freut*

Schöner Gruß

Torge