![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Chr(39)
VeryLongString © (2007-01-28 12:24:00)Здравствуйте. При помощи ADOCommand1 выполняю запрос в Access базу, но случилась такая проблема. Одна из переменных на добавление (допустим OOthe - Ldb.Other), содержит такой текст: hello i'm a'a'dkfdnfdjfdf;df'dsfee'rrrr'pp2'
И тогда при выполнении запроса получается не приятная ситуация, а именно: Ошибка синтаксиса (пропущен оператор) в выражении запроса...
Можно как-то это исправить? (Исключая замену всех ' в этой переменной)
ADOCommand1.CommandText := 'INSERT INTO Informations ' +
'(OName, OAdministrator, OAdministratorEmail, OOther' +
'...........)' +
' VALUES ' +
Format('(''%s'', ''%s'',''%s'',''%s'',''%s'',''%s'',''%s'',''%s'',''%s'',''%s'',''%s'',''%s'',''%s'',''%s'')',
[
Ldb.Name, Ldb.Administrator, Ldb.Email, Ldb.Other....
]);
ADOCommand1.Execute;
sniknik (2007-01-29 11:17:00) [1]> Поэтому наличие апострофа в строке приводит к вымиранию команды.
можно задублировать кавычки внутри строки, как и в дельфе, тогда все будет нормально...
но к легкости понимания и эффективности кода это не приведет...
меня одно только использование Format в [0] подобном виде коробит просто, ужас какойто... а потом начнут подобное в циклы вставлять на для множественных вставок и "плакать", что медленно работает.
Desdechado (2007-01-29 10:51:00) [2]Olivetti (29.01.07 01:36) [2]
Там и проверять нечего, и так все ясно. Апостроф является ограничителем строковых констант. Поэтому наличие апострофа в строке приводит к вымиранию команды.
ADOCommand1.CommandText := 'INSERT INTO Informations(a,b) VALUES(:P0, :P1)';
ADOCommand1.Parameters.ParamByName('P0').Value:=1;
...
...Execute;
Olivetti (2007-01-29 01:36:00) [3]
ADOCommand1.CommandText := ...;
ShowMessage(ADOCommand1.CommandText); // Посмотри, проверь корректность синтаксиса с точки зрения SQL сервера
ADOCommand1.Execute;
Desdechado (2007-01-28 12:36:00) [4]Уж сколько раз твердили миру...
Параметры использовать. Через них хоть черта протолкнуть можно...