Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Query

2.1K
25 апреля 2005 года
GuV
13 / / 30.05.2003
Проблема такая.
Делаю инсерт в таблицу при помощи компонента TQuery. Напишу вкратце:
Query1.SQL.Clear;
Query1.SQL.Append('insert into t (field1) values (''01.01.2000 18:18:27'')');
Query1.ExecSql;

Вываливается ошибка. При анализе выяснилось следующее чудо.
Значение Query1.Sql[0] равно '01.01.2000 18:18:27' (как и положено быть).
Значение Query1.Text равно '01.01.2000 18? (а тут фигня полная).

При замене символов ":" на другие, все нормально проходит.
При чем не все символы ":" так преображаются странно, но некоторые заменяются на "?" и все дальнейшие символы либо пропадают вовсе, либо идут через символы перевода строки $D$A, что естественно вызывает ошибку при вставке в БД.
Я так понимаю, что символы ":" трактуются Query как параметры, что как будь-то это параметризованный запрос. Как тогда указать, чтобы символ ":" воспринимался именно как обычный символ , а не управляющий символ?

P.S: при переходе на ADOQuery такого косяка не наблюдается. Только не надо советовать переходить на АДО, т.к.:
1) при работе с АДО встречался с проблемой, когда строковые поля усекаются до 8 символов при выборке из БД по непонятным причинам. При чем делаю запрос к одной таблице - получаю нормальные строки, при обращении к другой - усеченные. Поля в таблице имеют одинаковый тип данных.
2) А также при смене МДака глючили компоненты АДО.
Заранее всем откликнувшимся спасибо.
10
25 апреля 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by GuV
Делаю инсерт в таблицу при помощи компонента TQuery. Напишу вкратце:
Query1.SQL.Clear;
Query1.SQL.Append('insert into t (field1) values (''01.01.2000 18:18:27'')');
Query1.ExecSql;


Со всех точек зрения правильнее всего сделать так:

 
Код:
with Query1 do
begin
  SQL.Clear;
  SQL.Add('insert into t (field1) values (:F)');
  Params[0].AsDateTime := <значение>
  ExecSQL;
end;
2.1K
26 апреля 2005 года
GuV
13 / / 30.05.2003
Цитата:
Originally posted by Freeman
Со всех точек зрения правильнее всего сделать так:
 
Код:
with Query1 do
begin
  SQL.Clear;
  SQL.Add('insert into t (field1) values (:F)');
  Params[0].AsDateTime := <значение>
  ExecSQL;
end;



Так тоже не годится, потому что я не знаю заранее структуру переданной таблицы и ее поля.
Решалось все банальнее. Свойство ParamCheck=False отключает использование параметров, в результате символ ":" трактуется именно как символ, а не как параметр :)))) Доку не до конца прочитал.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог