![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Parameter bbb_id not found [D7, IB6.x]
Pavlov © (2009-05-12 15:58:00)
with DataModule1.IBQuery do
begin
SQL.Clear;
SQL.Add(' select aaa_id FROM Table1 left join Table2 on Table1.bbb_id= Table2.bbb_ID '+
' where Table2.ccc_id = : ccc_ID and Table2.bbb_id = : bbb_ID');
ParamByName('bbb_ID').AsInteger := 452559; //
ParamByName('ccc_ID').AsInteger := 9958; //
Open;
aaa_ID := FieldByName('aaa_id').AsInteger;
Close;
end;
Почему-то выдает ошибку Parameter bbb_id not found.
Пробовал запрос в IBExpert, там все работает.
Игорь Шевченко (2009-05-13 12:29:00) [1]
> Это ну ОЧЕНЬ вумная СУБД должна быть, чтобы вот так вот
> данный запрос распознать
ничего особо умного не надо - хранится текст запроса и его хеш, при очередном запросе вычисляется его хеш, ищется на совпадение, совпало - сравнивается текст запроса, совпадает - используются результаты разбора сохраненного, не совпадает - разбирается по полной программе.
Ega23 (2009-05-13 10:10:00) [2]
> не всегда проще. в некоторых субд :) запрос кешируется на
> сервере во избежании парсинга и оптимизации, и при явном
> задавании параметров перерасход памяти будет.
Тогда задай текст один раз, создай параметры, выполни ему Prepare, и потом работай, подставляя значения параметров. Нафига каждый раз текст менять?
И, эта... Это ну ОЧЕНЬ вумная СУБД должна быть, чтобы вот так вот данный запрос распознать.
Германн (2009-05-13 01:11:00) [3]Я бы всё-таки обратил ещё раз внимание на первый вопрос от "Ega23 © (12.05.09 17:18) [1]".
Уж очень часто (а я очень редко работаю с БД) возникают такие вопросы.
Игорь Шевченко (2009-05-13 00:51:00) [4]Petr V. Abramov © (13.05.09 00:16) [4]
В Интербейзе вроде не кешируется
Petr V. Abramov (2009-05-13 00:16:00) [5]
> Ega23 © (12.05.09 17:18) [1]
> 3.
да
> 2. А зачем так, если каждый раз один фиг текст запроса задаёшь?
> Не проще ли значение параметра сразу задавать?
не всегда проще. в некоторых субд :) запрос кешируется на сервере во избежании парсинга и оптимизации, и при явном задавании параметров перерасход памяти будет.
Palladin (2009-05-12 19:42:00) [6]Удалено модератором
Ega23 (2009-05-12 17:18:00) [7]1. DataModule1.IBQuery.ParamCheck чему равно?
2. А зачем так, если каждый раз один фиг текст запроса задаёшь? Не проще ли значение параметра сразу задавать?
3. Пока писал, увидел. Перепиши так:
' where Table2.ccc_id=:ccc_ID and Table2.bbb_id=:bbb_ID');
Медвежонок Пятачок (2009-05-12 17:18:00) [8]пробел убери