![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос про TADODataset.ParamCheck [D6, D7, D2005]
Германн © (2008-03-14 01:36:00)Обсуждение http://www.delphimaster.ru/cgi-bin/forum.pl?id=1205258821&n=18
закрыто. (По каким причинам - это не моё дело).
Но хочу повторить свой вопрос. Меня заинтересовало упомянутое Ega23 © свойство TADODataset.ParamCheck. Справку по нему я не понял. (Читал справку из Д6 и из BDS2006). Может кто-нибудь пояснит, чем отличаются значения True/False для данного свойства, при вводе текста запроса в рантайме?
Anatoly Podgoretsky (2008-03-14 17:07:00) [1]Ну или когда запрос сгенерирован кривым генератором, который включает комментарии типа
-- .... 18:30:47
Подобные вопросы мелькали по форуму
Anatoly Podgoretsky (2008-03-14 17:05:00) [2]
> Использовал TADODataset с CommandText набранный в рантайме
> так:
> CommandText:='SELECT Count(CX.ID_Card) AS CC FROM
> CARDIDX CX '+
> 'WHERE CX.Id_Dev = :Id_Dev';
> ADODataSet2.Parameters.ParamByName('Id_Dev').Value:
> =StrToInt(Dev);
>
>
> Получил ругань примерно как в упомянутом сабже. (Parameter
> ':data1' not found)
Очень мало информации, но
Command.Text и ADODataSet2. это могут быть разные вещи, я бы понял тебя если бы далее было Parameters.ParamByName или до ADODataSet2.CommandText
Параметра :data1 в запросе действительно нет, видимо он создан где то в дизайн тайм. Кроме того я бы предварительно, принудительно закрыл бы запрос, смотри пукт 1, непонятно что именно закрывать.
Короче тут налицо недостаток информации, про Connection тебе уже написали и налицо программная ошибка.
ParamCheck в таких простых случаях работает правильно, обычно его надо отключать только в неодназначных случаях, например FROM "C:\....."
Ega23 (2008-03-14 16:07:00) [3]
> ParamCheck = true - говорит о том, что компонент, при изменении
> текста запроса, должен сам инициировать коллекцию Parameters
> на основе запроса.
Вот только если в момент изменения CommandText отсутствует ADOConnection, то у парсера параметров происходит затык, ибо он не понимает, какого типа будут добавляемые параметры.
Германн (2008-03-14 16:03:00) [4]Спасибо всем принявшим участие.
Плохиш (2008-03-14 10:51:00) [5]ParamCheck = true - говорит о том, что компонент, при изменении текста запроса, должен сам инициировать коллекцию Parameters на основе запроса.
ParamCheck = false - при изменении текста запроса коллекция Parameters не будет изменена и программист должен сам позаботиться о соответствии.
Нормальными словами :-)
ParamCheck = true - я вальнул тебе запросик, а ты уж там разберись с ним сам как-нибуть.
ParamCheck = false - так, значится, я самый умный записал тебе запрос, а ты его как я скажу и отправишь серверу, и не отнимай драгоценных тиков процессора.
sniknik (2008-03-14 10:33:00) [6]> то-ли только в design-time работает
как раз таки наоборот, предназначено для рантайм, как в хелпе написано.
> 1. ParamCheck не отрабатывает при отсутствии ADOConnection (Connection=nil)
пытается из коннекта определить тип параметра... и -> nil ... ?
хотя вообще то должен просто поставить тип "неопределен".
> 2. Какая-то непонятная кривизна при сметне текста запроса.
?
а поконкретнее - условия выполнения, как/что задается, в чем "кривизна"?
сколько работаю ни разу ни видел, всегда адекватно, или объяснимо.
Ega23 (2008-03-14 09:51:00) [7]Насколько я понял, ParamCheck то-ли только в design-time работает, то-ли как-то совсем криво.
Но чисто опытным путём было выявлено следующее поведение:
1. ParamCheck не отрабатывает при отсутствии ADOConnection (Connection=nil)
2. Какая-то непонятная кривизна при сметне текста запроса.
Поскольку в большинстве случаев я в design-time ещё не имею адекватного коннекта, то всегда параметры создавал ручками (либо в дизайнере параметров в design-time, либо как sniknik © (14.03.08 08:25) [8])
sniknik (2008-03-14 08:25:00) [8]> Ну...вот только что проверил на TIBQuery и TIBSQL.
...
> Получил ругань примерно как в упомянутом сабже. (Parameter ':data1' not found)
форма запроса меняется, : это указатель для парсера в дельфе это следом параметр.
CommandText:='SELECT Count(CX.ID_Card) AS CC FROM CARDIDX CX WHERE CX.Id_Dev = ?';
Parameters.CreateParameter('Id_Dev', ftInteger, pdInput, 0, StrToInt(Dev));
дальше можно и как обычно по имени к этому параметру обращаться
Германн (2008-03-14 02:47:00) [9]
> GanibalLector © (14.03.08 02:19) [6]
>
> 2 Германн © (14.03.08 02:06) [5]
>
> Может это из за Id_Dev (есть же уже CX.Id_Dev). Попробуйте
> заменить на hId_Dev
>
>
Не знаю. Может из-за. Но "оч сильно сумлеваюсь". Бо эти две сущности относятся к (и рассматриваются) двум/я разным/и сущностям/и.
Пробовать лень, тем более, что работа уже сдана и без претензий. И деньги уже получены. Сей вопрос был "так, на всякий будущий случай!".
Поскольку он был про "непонятку" в справке.
GanibalLector (2008-03-14 02:19:00) [10]2 Германн © (14.03.08 02:06) [5]
Может это из за Id_Dev (есть же уже CX.Id_Dev). Попробуйте заменить на hId_Dev
CommandText:='SELECT Count(CX.ID_Card) AS CC FROM CARDIDX CX '+
'WHERE CX.Id_Dev = :hId_Dev';
ADODataSet2.Parameters.ParamByName('hId_Dev').Value:=StrToInt(Dev);
Германн (2008-03-14 02:06:00) [11]
> sniknik © (14.03.08 01:48) [2]
>
> True
> при внесении запроса автоопределение параметров. создает
> само.
>
Хм.
Использовал TADODataset с CommandText набранный в рантайме так:
CommandText:='SELECT Count(CX.ID_Card) AS CC FROM CARDIDX CX '+
'WHERE CX.Id_Dev = :Id_Dev';
ADODataSet2.Parameters.ParamByName('Id_Dev').Value:=StrToInt(Dev);
Получил ругань примерно как в упомянутом сабже. (Parameter ':data1' not found)
GanibalLector (2008-03-14 02:00:00) [12]> с чего это?
Ну...вот только что проверил на TIBQuery и TIBSQL.
При IBQuery1.ParamCheck:=False; запрос не выполняется. Parameter "DD" not found.
// IBQuery1.ParamCheck:=False; так запрос не выполнится
IBQuery1.Close;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Add('select * from clitab where N>:DD');
IBQuery1.ParamByName('DD').AsInteger:=15;
IBQuery1.Open;
Если же запрос без параметров...например такой
select * from clitab where N>15
то все Ок.
Разве я не прав ???
sniknik (2008-03-14 01:50:00) [13]> невозможно будет выполнить запрос с параметрами.
с чего это?
все что программист отключил, он же завсегда и включить может... даже не трогая "рубильника".
sniknik (2008-03-14 01:48:00) [14]True
при внесении запроса автоопределение параметров. создает само.
False
придется самому (ну к примеру если в запросе путь к файлу таблици, то чтобы не восприняло : \папка\таблица.dbfкак параметр)
GanibalLector (2008-03-14 01:45:00) [15]Вероятно, при ParamCheck=False невозможно будет выполнить запрос с параметрами.