3 Stimmen

Delphi Update DateTime-Spalte in SQL Server 2008 R2

Ich versuche, ein Datum in eine dateTime-Spalte in einer SQL Server 2008 R2-Datenbank zu schreiben, aber ich bin auf viele Probleme gestoßen, von denen ich nicht weiß, was die Ursachen sind.

Zuerst habe ich diesen Code verwendet, aber ich bekam die Fehlermeldung: cannot convert string to date.

ADOOF.SQL.Text:='UPDATE OFTab SET CA='''+ CA.Text + ''', demandeClient=''' + DateTimeToStr(demandeClient.DateTime) + ''' WHERE ID='''+ ADOOF.FieldByName('ID') + '''';
ADOOF.ExecSQL;

Zweitens: Ich habe Parameter verwendet:

ADOOF.SQL.Text:='UPDATE OFTab SET CA='''+ CA.Text + ''', demandeClient=:demande_client WHERE ID='''+ ADOOF.FieldByName('ID') + '''';
ADOOF.Parameters.ParamByName('demande_client').Value:= demandeClient.Date;
ADOOF.ExecSQL;

Aber ich bekam die Fehlermeldung: Parameter (demande_client) nicht gefunden.

Ich habe dieses Problem gegoogelt und einen Vorschlag von Embarcadero gefunden, der besagt, dass die Parameter vor dem Aufruf der ADOQuery wie folgt erstellt werden sollten:

ADOOF.SQL.Text:='UPDATE OFTab SET CA='''+ CA.Text + ''', demandeClient=:demande_client WHERE ID='''+ ADOOF.FieldByName('ID') + '''';
ADOOF.Parameters.ParseSQL(ADOOF.SQL.Text, True);    
ADOOF.Parameters.ParamByName('demande_client').Value:= demandeClient.Date;
ADOOF.ExecSQL;

Fein habe ich die Verbindung Persist Security Info entfernt, aber immer das gleiche Problem. Bitte, irgendwelche Vorschläge.

INFO: Ich verwende MICROSOFT OLE DB Provider For SQL Server.

5voto

Pieter B Punkte 1839

In Ihrem ersten Beispiel verwenden Sie

FormatDateTime('YYYYMMDD hhmmss',demandeClient.DateTime)

anstelle von

DateTimeToStr(demandeClient.DateTime)

Das liegt daran, dass DateTimeToStr ohne Formateinstellungen Ihre lokalisierten Maschineneinstellungen verwendet und Ihre Datenbank das Format möglicherweise nicht mag. Die Verwendung von FormatDateTime beseitigt auch Zweideutigkeiten: z.B. 01/02/03, für einige Menschen auf der Welt ist dies der 2. Januar 2003, für andere der 1. Februar 2003 und sogar einige werden 2001, 3. Februar sagen. JJJJMMTT ist universell. 20030201 ist immer der 1. Februar 2003.

2voto

Francesca Punkte 21286

Es kann davon abhängen, wie Sie sich mit Ihrer DB verbinden (Treiber).
Sie können versuchen anzugeben, dass Sie ein Datum verwenden:

ADOOF.Parameters.ParamByName('demande_client').DataType:= ftDateTime;
ADOOF.Parameters.ParamByName('demande_client').AsDateTime:= demandeClient.Date;

1voto

da-soft Punkte 7550
  1. Ich empfehle dringend, SQL Native Client 11 zu verwenden, wenn Sie mit SQL Server 2008 R2 arbeiten. Neue SQL Server 2008-Datentypen (einschließlich DATE , TIME , DATETIME2 und DATETIMEOFFSET ) werden von dem SQL Server 2000 OLEDB-Anbieter nicht unterstützt.
  2. Ihr zweites Codebeispiel sollte funktionieren. Prüfen Sie, ob Sie TADOQuery . ParamCheck = Wahr.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X