Текущий архив: 2008.04.13;
Скачать: CL | DM;
Вниз
Вопрос про TADODataset.ParamCheck Найти похожие ветки
← →
Германн © (2008-03-14 01:36) [0]Обсуждение http://delphimaster.net/view/2-1205258821/
закрыто. (По каким причинам - это не моё дело).
Но хочу повторить свой вопрос. Меня заинтересовало упомянутое Ega23 © свойство TADODataset.ParamCheck. Справку по нему я не понял. (Читал справку из Д6 и из BDS2006). Может кто-нибудь пояснит, чем отличаются значения True/False для данного свойства, при вводе текста запроса в рантайме?
← →
GanibalLector © (2008-03-14 01:45) [1]Вероятно, при ParamCheck=False невозможно будет выполнить запрос с параметрами.
← →
sniknik © (2008-03-14 01:48) [2]True
при внесении запроса автоопределение параметров. создает само.
False
придется самому (ну к примеру если в запросе путь к файлу таблици, то чтобы не восприняло :\папка\таблица.dbf как параметр)
← →
sniknik © (2008-03-14 01:50) [3]> невозможно будет выполнить запрос с параметрами.
с чего это?
все что программист отключил, он же завсегда и включить может... даже не трогая "рубильника".
← →
GanibalLector © (2008-03-14 02:00) [4]> с чего это?
Ну...вот только что проверил на 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
то все Ок.
Разве я не прав ???
← →
Германн © (2008-03-14 02:06) [5]
> 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:19) [6]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:47) [7]
> GanibalLector © (14.03.08 02:19) [6]
>
> 2 Германн © (14.03.08 02:06) [5]
>
> Может это из за Id_Dev (есть же уже CX.Id_Dev). Попробуйте
> заменить на hId_Dev
>
>
Не знаю. Может из-за. Но "оч сильно сумлеваюсь". Бо эти две сущности относятся к (и рассматриваются) двум/я разным/и сущностям/и.
Пробовать лень, тем более, что работа уже сдана и без претензий. И деньги уже получены. Сей вопрос был "так, на всякий будущий случай!".
Поскольку он был про "непонятку" в справке.
← →
sniknik © (2008-03-14 08:25) [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));
дальше можно и как обычно по имени к этому параметру обращаться
← →
Ega23 © (2008-03-14 09:51) [9]Насколько я понял, ParamCheck то-ли только в design-time работает, то-ли как-то совсем криво.
Но чисто опытным путём было выявлено следующее поведение:
1. ParamCheck не отрабатывает при отсутствии ADOConnection (Connection=nil)
2. Какая-то непонятная кривизна при сметне текста запроса.
Поскольку в большинстве случаев я в design-time ещё не имею адекватного коннекта, то всегда параметры создавал ручками (либо в дизайнере параметров в design-time, либо как sniknik © (14.03.08 08:25) [8])
← →
sniknik © (2008-03-14 10:33) [10]> то-ли только в design-time работает
как раз таки наоборот, предназначено для рантайм, как в хелпе написано.
> 1. ParamCheck не отрабатывает при отсутствии ADOConnection (Connection=nil)
пытается из коннекта определить тип параметра... и -> nil ... ?
хотя вообще то должен просто поставить тип "неопределен".
> 2. Какая-то непонятная кривизна при сметне текста запроса.
?
а поконкретнее - условия выполнения, как/что задается, в чем "кривизна"?
сколько работаю ни разу ни видел, всегда адекватно, или объяснимо.
← →
Плохиш © (2008-03-14 10:51) [11]ParamCheck = true - говорит о том, что компонент, при изменении текста запроса, должен сам инициировать коллекцию Parameters на основе запроса.
ParamCheck = false - при изменении текста запроса коллекция Parameters не будет изменена и программист должен сам позаботиться о соответствии.
Нормальными словами :-)
ParamCheck = true - я вальнул тебе запросик, а ты уж там разберись с ним сам как-нибуть.
ParamCheck = false - так, значится, я самый умный записал тебе запрос, а ты его как я скажу и отправишь серверу, и не отнимай драгоценных тиков процессора.
← →
Германн © (2008-03-14 16:03) [12]Спасибо всем принявшим участие.
← →
Ega23 © (2008-03-14 16:07) [13]
> ParamCheck = true - говорит о том, что компонент, при изменении
> текста запроса, должен сам инициировать коллекцию Parameters
> на основе запроса.
Вот только если в момент изменения CommandText отсутствует ADOConnection, то у парсера параметров происходит затык, ибо он не понимает, какого типа будут добавляемые параметры.
← →
Anatoly Podgoretsky © (2008-03-14 17:05) [14]
> Использовал 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:\....."
← →
Anatoly Podgoretsky © (2008-03-14 17:07) [15]Ну или когда запрос сгенерирован кривым генератором, который включает комментарии типа
-- .... 18:30:47
Подобные вопросы мелькали по форуму
Страницы: 1 вся ветка
Текущий архив: 2008.04.13;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.006 c