-
Имеется 2 запроса:
Код Delphi
1
FORM2.ADOQuery1.SQL.Add('SELECT * FROM inf WHERE id='+Edit1.Text+';');
При вводе id(счетчик) в edit1 выдается вся информация. Вводится число.
Код Delphi
1
FORM2.ADOQuery1.SQL.Add('SELECT * FROM inf WHERE fio='+Edit1.Text+';');
При вводе fio(фамилия имя отчество) выдается ошибка Ошибка синтаксиса пропущен оператор. Вводится строка.
-
эта повесть о том как делать не надо
-
> Andrey5 © (23.04.14 19:32)
Надо использовать параметры. Можно, конечно, и QuotedStr(Edit1.Text), но лучше параметры.
-
> QuotedStr(Edit1.Text)
QuotedStr не спасёт от "д'Артаньяна"
-
2 ТС:
ADODataSet.CommandText := 'select * from inf where fio=:fio';
ADODataSet.ParamByName('fio').AsString := Edit1.Text;
-
> Ega23 © (24.04.14 00:30) [3]
>
> > QuotedStr(Edit1.Text)
>
>
> QuotedStr не спасёт от "д'Артаньяна"
>
>
Какой только глупости не прочитаешь на делфимастере.
PS. хоть бы справку прочитал, раз проверить лень.
-
> Ega23 © (24.04.14 00:30) [3]
>
> > QuotedStr(Edit1.Text)
>
>
> QuotedStr не спасёт от "д'Артаньяна"
>
>
Какой только глупости не прочитаешь на делфимастере.
PS. хоть бы справку прочитал, раз проверить лень.
-
> Ega23 © (24.04.14 00:30) [3]
>
> > QuotedStr(Edit1.Text)
>
>
> QuotedStr не спасёт от "д'Артаньяна"
>
>
Какой только глупости не прочитаешь на делфимастере.
PS. хоть бы справку прочитал, раз проверить лень.
-
> Ega23 © (24.04.14 00:30) [3]
>
> > QuotedStr(Edit1.Text)
>
>
> QuotedStr не спасёт от "д'Артаньяна"
>
>
Какой только глупости не прочитаешь на делфимастере.
PS. хоть бы справку прочитал, раз проверить лень.
-
Ого, гляди-ка, уже работает. При Сталине такого не было.
-
> Ega23 © (24.04.14 07:19) [9]
ЕМНИП еще в D7 работало
-
> ЕМНИП еще в D7 работало
Где-то это дело не работало, точно помню. Как раз на "д'Артаньяне".
А вот где не работало - не помню, хоть убей.
Но всё равно надо параметры использовать.
-
В текст запроса всегда должно подставляться адекватное значение.
Если текстбокс окаажется пустым, юзер получит устрашающего вида сообщение об ошибке.
Если речь идет о выборке конкретной записи, и данный датасет всегда будет выдавать именно такой запрос, с отличием только ключевого значения записи,
тогда нужно как у Ega23
ADODataSet.CommandText := 'select * from inf where id=:d';
ADODataSet.ParamByName('id').Value := ЦелоеЧисло;
В свойствах параметра должен быть указан тип "integer"
Дополнительное удобство, можно привязать этот датасет к датасорсу другого датасета, который содержит список записей имеющих такое же ключевое поле.
Тогда при перемещении по списку, обсуждаемый датасет автоматически будет отслеживать запись.
-
> В свойствах параметра должен быть указан тип "integer"
Это если ParamCheck = False
> Тогда при перемещении по списку, обсуждаемый датасет автоматически
> будет отслеживать запись.
Не всегда.
-
При желании можно и... не такое
-
> При желании можно и... не такое
При желании можно и этот самый сломать. Был бы этот самый и было бы желание.