Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.30;
Скачать: CL | DM;

Вниз

Преобразование форматной строки SQL-запроса   Найти похожие ветки 

 
kai ©   (2005-01-15 21:40) [0]

пишу форматную строку:
Format("UPDATE Dates SET Name = ""%s"" WHERE ID = %s",
       [_Caption, GUIDToString(_ID)]));
если в строке _Caption встречаются форматные символы, например, апостроф, %s, %d, etc, то, естественно, получается ошибка.
есть ли стандартные функции по преобразованию строк-полей в строки, отличные от форматных?
Спасибо.


 
Palladin ©   (2005-01-15 21:52) [1]

для TQuery см. свойство Params, для наследника TCustomADODataSet см. свойство Parameters


 
kai ©   (2005-01-15 22:04) [2]

спасибо.
а если я пользуюсь TADOConnection.Execute - где параметры задавать?


 
Palladin ©   (2005-01-15 22:08) [3]

нигде, используй TADOQuery, он наследник TCustomADODataSet... если выставишь свойство Prepared, то выполнение будет еще быстрее...


 
kai ©   (2005-01-15 22:15) [4]

я быструю выборку получаю таким способом (как на королевстве описано):

RecordSet := ADOConnection.Execute(...);
DatArray := Recordset.GetRows(...);
ну и VarArrayGet для получ. значения....

а через query такой высокой скорости не удается добиться...
вот и хотел узнать, либо как параметры задать, либо как строку специальным образом форматнуть.


 
kai ©   (2005-01-15 22:17) [5]

или можно тот же recordset взять из ADOQuery?


 
sniknik ©   (2005-01-15 22:19) [6]

ну вот любят люди себе на голову геморой искать... ;), ну что стоит положить компонент? он же ничего не добавит (даже размера) т.к. все одно неявно создается...

> где параметры задавать?
попробуй в событии onWillExecute когда Command уже сформирован.

p.s. в отличии от > Palladin ©   (15.01.05 22:08) [3] я сторонник "естественных" компонент ADOCommand и ADODataSet в отличии от "искуственных" (для совмещения со старыми) ADOQuery и ADOTable, их и советую использовать.


 
kai ©   (2005-01-15 22:21) [7]

спасибо за консультации. получается. я пока в бд чайник.


 
sniknik ©   (2005-01-15 22:23) [8]

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:30) [9]

спасибо большое! :beer: :beer:


 
VMcL ©   (2005-01-15 23:18) [10]

>>kai ©  (15.01.05 21:40)

Запоздало, но отвечу.

>если в строке _Caption встречаются форматные символы, например, апостроф,

QuotedStr(), AnsiQuotedStr()


 
sniknik ©   (2005-01-16 00:06) [11]

VMcL ©   (15.01.05 23:18) [10]
не поможет. без параметров используя логику как в [0] вставляя строку прямо в запрос, не поможет.
QuotedStr это же просто обрамление кавычками (будто их в [0] нет...), и в чем разница если такая же кавычка но в середину строки затесалась? в результирующем(то что в движок уйдет) получим
UPDATE Dates SET Name = "а это наша с"трока, типа caption" ....
(или тоже но с " вместо ")
это уже в движке ексепт вызовет, а вот параметру пофигу.



Страницы: 1 вся ветка

Текущий архив: 2005.01.30;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.033 c
8-1098346166
Ricko
2004-10-21 12:09
2005.01.30
Как перенаправить сигнал со входа звуковой карты на выход?


1-1105299352
chir
2005-01-09 22:35
2005.01.30
OnChange - игнор


14-1105268110
Kerk
2005-01-09 13:55
2005.01.30
distributed.net


6-1099636036
_intruder
2004-11-05 09:27
2005.01.30
Отправка смс (МегаСлон, МТС, БиЛайн из программы Делфи


1-1105950102
andrey__
2005-01-17 11:21
2005.01.30
Преобразование ANSI строку в ASCII строку