Delphi обновляет столбец DateTime в SQL Server 2008 R2 - PullRequest
3 голосов
/ 20 января 2012

Я пытаюсь опубликовать дату в столбце dateTime в базе данных SQL Server 2008 R2, но у меня возникло много проблем, которые я не знаю, каковы причины.

Сначала я использовалэтот код, но я получил ошибку: невозможно преобразовать строку в дату.

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

Во-вторых, я использовал параметры:

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;

Но я получил ошибку: Параметр (demande_client) нетнайдено.

Я погуглил эту проблему и нашел предложение Embarcadero о том, что параметры должны быть созданы перед вызовом ADOQuery, например:

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;

Точно удалил соединение. Сохранять информацию о безопасностино всегда одна и та же проблема.Пожалуйста, любые предложения.

ИНФОРМАЦИЯ: Я использую MICROSOFT OLE DB Provider для SQL Server.

Ответы [ 3 ]

5 голосов
/ 20 января 2012

в вашем первом примере используйте

FormatDateTime('YYYYMMDD hhmmss',demandeClient.DateTime)

вместо

DateTimeToStr(demandeClient.DateTime)

Это потому, что DateTimeToStr без форматирования использует ваши локализованные настройки компьютера, и вашей базе данных может просто или не понравиться формат,Использование FormatDateTime также избавляет от неясностей: рассмотрим 01.02.03, для некоторых людей в мире это 2 января 2003 года, а для других 1 февраля 2003 года, и даже некоторые скажут 2001, 3 февраля.ГГГГММДД универсален.20030201 всегда 1 февраля 2003 года.

2 голосов
/ 20 января 2012

Это может зависеть от того, как вы подключаетесь к своей БД (драйверам).
Вы можете попытаться явно указать, что вы используете дату:

ADOOF.Parameters.ParamByName('demande_client').DataType:= ftDateTime;
ADOOF.Parameters.ParamByName('demande_client').AsDateTime:= demandeClient.Date;
1 голос
/ 20 января 2012
  1. Я настоятельно рекомендую использовать собственный клиент SQL 11 при работе с SQL Server 2008 R2.Новые типы данных SQL Server 2008 (включая DATE, TIME, DATETIME2 и DATETIMEOFFSET) не поддерживаются поставщиком OLEDB для SQL Server 2000.
  2. Ваш второй пример кода должен работать.Убедитесь, что у вас есть TADOQuery. ParamCheck = True.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...