Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.04.13;
Скачать: [xml.tar.bz2];

Вниз

Вопрос про 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.075 c
15-1204040112
@!!ex
2008-02-26 18:35
2008.04.13
Почему данные не уходят через WinSock.Send?


15-1204193130
Kerk
2008-02-28 13:05
2008.04.13
Google Sites


15-1204272184
-=Le][=-
2008-02-29 11:03
2008.04.13
Blackfish SQL в Code Gear RAD Studio


2-1205950865
Alex_C
2008-03-19 21:21
2008.04.13
Сохранение св-ва компонента


15-1204204156
dr_creigan
2008-02-28 16:09
2008.04.13
DDK XP





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский