![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Преобразование форматной строки SQL-запроса
kai © (2005-01-15 21:40:00)пишу форматную строку:
Format('UPDATE Dates SET Name = ''%s'' WHERE ID = %s',
[_Caption, GUIDToString(_ID)]));
если в строке _Caption встречаются форматные символы, например, апостроф, %s, %d, etc, то, естественно, получается ошибка.
есть ли стандартные функции по преобразованию строк-полей в строки, отличные от форматных?
Спасибо.
sniknik (2005-01-16 00:06:00) [1]VMcL © (15.01.05 23:18) [10]
не поможет. без параметров используя логику как в [0] вставляя строку прямо в запрос, не поможет.
QuotedStr это же просто обрамление кавычками (будто их в [0] нет...), и в чем разница если такая же кавычка но в середину строки затесалась? в результирующем(то что в движок уйдет) получим
UPDATE Dates SET Name = 'а это наша с'трока, типа caption' ....
(или тоже но с " вместо ')
это уже в движке ексепт вызовет, а вот параметру пофигу.
VMcL (2005-01-15 23:18:00) [2]>> kai © (15.01.05 21:40)
Запоздало, но отвечу.
> если в строке _Caption встречаются форматные символы, например, апостроф,
QuotedStr(), AnsiQuotedStr()
kai (2005-01-15 22:30:00) [3]спасибо большое! :beer: :beer:
sniknik (2005-01-15 22:23:00) [4]kai © (15.01.05 22:15) [4]
> ...
kai © (15.01.05 22:17) [5]
> или можно тот же recordset взять из ADOQuery?
легко и аналогично из ADOCommand, можно даже без промежуточного сохранения рекордсета.
чтото вроде
DatArray := ADOCommand.Execute.GetRows(...);
kai (2005-01-15 22:21:00) [5]спасибо за консультации. получается. я пока в бд чайник.
sniknik (2005-01-15 22:19:00) [6]ну вот любят люди себе на голову геморой искать... ;), ну что стоит положить компонент? он же ничего не добавит (даже размера) т.к. все одно неявно создается...
> где параметры задавать?
попробуй в событии onWillExecute когда Command уже сформирован.
p.s. в отличии от > Palladin © (15.01.05 22:08) [3] я сторонник "естественных" компонент ADOCommand и ADODataSet в отличии от "искуственных" (для совмещения со старыми) ADOQuery и ADOTable, их и советую использовать.
kai (2005-01-15 22:17:00) [7]или можно тот же recordset взять из ADOQuery?
kai (2005-01-15 22:15:00) [8]я быструю выборку получаю таким способом (как на королевстве описано):
RecordSet := ADOConnection.Execute(...);
DatArray := Recordset.GetRows(...);
ну и VarArrayGet для получ. значения....
а через query такой высокой скорости не удается добиться...
вот и хотел узнать, либо как параметры задать, либо как строку специальным образом форматнуть.
Palladin (2005-01-15 22:08:00) [9]нигде, используй TADOQuery, он наследник TCustomADODataSet... если выставишь свойство Prepared, то выполнение будет еще быстрее...
kai (2005-01-15 22:04:00) [10]спасибо.
а если я пользуюсь TADOConnection.Execute - где параметры задавать?
Palladin (2005-01-15 21:52:00) [11]для TQuery см. свойство Params, для наследника TCustomADODataSet см. свойство Parameters