Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.022 c
1-1106146280
lamo
2005-01-19 17:51
2005.01.30
Ошибка String or Integer


1-1105774192
Phantomouse
2005-01-15 10:29
2005.01.30
Как отследить закрытие программы


3-1103878442
Xattab
2004-12-24 11:54
2005.01.30
База данных про вычисление квартала, тек месяца


3-1103965097
Russko
2004-12-25 11:58
2005.01.30
Проблема с кирилицей


1-1105603401
DelphiN!
2005-01-13 11:03
2005.01.30
Сортировка, с приоритетом на другие буквы




   Наверх