with Query1 do
begin
SQL.Clear;
SQL.Add('insert into t (field1) values (:F)');
Params[0].AsDateTime := <значение>
ExecSQL;
end;
Query
Делаю инсерт в таблицу при помощи компонента 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) А также при смене МДака глючили компоненты АДО.
Заранее всем откликнувшимся спасибо.
Цитата:
Originally posted by GuV
Делаю инсерт в таблицу при помощи компонента TQuery. Напишу вкратце:
Query1.SQL.Clear;
Query1.SQL.Append('insert into t (field1) values (''01.01.2000 18:18:27'')');
Query1.ExecSql;
Делаю инсерт в таблицу при помощи компонента TQuery. Напишу вкратце:
Query1.SQL.Clear;
Query1.SQL.Append('insert into t (field1) values (''01.01.2000 18:18:27'')');
Query1.ExecSql;
Со всех точек зрения правильнее всего сделать так:
Код:
Цитата:
Originally posted by Freeman
Со всех точек зрения правильнее всего сделать так:
Со всех точек зрения правильнее всего сделать так:
Код:
with Query1 do
begin
SQL.Clear;
SQL.Add('insert into t (field1) values (:F)');
Params[0].AsDateTime := <значение>
ExecSQL;
end;
begin
SQL.Clear;
SQL.Add('insert into t (field1) values (:F)');
Params[0].AsDateTime := <значение>
ExecSQL;
end;
Так тоже не годится, потому что я не знаю заранее структуру переданной таблицы и ее поля.
Решалось все банальнее. Свойство ParamCheck=False отключает использование параметров, в результате символ ":" трактуется именно как символ, а не как параметр :)))) Доку не до конца прочитал.