Форум: "Основная";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];
ВнизПреобразование форматной строки 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.04 c