Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Преобразование форматной строки 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


Наверх

Титульная страница Поиск, карта сайта Написать письмо