Конференция "Базы" » SQL-запрос [D7]
 
  • Andrey5 © (23.04.14 19:32) [0]
    Имеется 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(фамилия имя отчество) выдается ошибка Ошибка синтаксиса пропущен оператор. Вводится строка.
  • ухты (23.04.14 21:44) [1]
    эта повесть о том как делать не надо
  • turbouser © (23.04.14 22:50) [2]

    > Andrey5 ©   (23.04.14 19:32)  

    Надо использовать параметры. Можно, конечно, и QuotedStr(Edit1.Text), но лучше параметры.
  • Ega23 © (24.04.14 00:30) [3]

    > QuotedStr(Edit1.Text)


    QuotedStr не спасёт от "д'Артаньяна"
  • Ega23 © (24.04.14 00:32) [4]
    2 ТС:

    ADODataSet.CommandText := 'select * from inf where fio=:fio';
    ADODataSet.ParamByName('fio').AsString := Edit1.Text;

  • Плохиш © (24.04.14 02:07) [5]

    > Ega23 ©   (24.04.14 00:30) [3]
    >
    > > QuotedStr(Edit1.Text)
    >
    >
    > QuotedStr не спасёт от "д'Артаньяна"
    >
    >

    Какой только глупости не прочитаешь на делфимастере.

    PS. хоть бы справку прочитал, раз проверить лень.
  • Плохиш © (24.04.14 02:07) [6]

    > Ega23 ©   (24.04.14 00:30) [3]
    >
    > > QuotedStr(Edit1.Text)
    >
    >
    > QuotedStr не спасёт от "д'Артаньяна"
    >
    >

    Какой только глупости не прочитаешь на делфимастере.

    PS. хоть бы справку прочитал, раз проверить лень.
  • Плохиш © (24.04.14 02:08) [7]

    > Ega23 ©   (24.04.14 00:30) [3]
    >
    > > QuotedStr(Edit1.Text)
    >
    >
    > QuotedStr не спасёт от "д'Артаньяна"
    >
    >

    Какой только глупости не прочитаешь на делфимастере.

    PS. хоть бы справку прочитал, раз проверить лень.
  • Плохиш © (24.04.14 02:08) [8]

    > Ega23 ©   (24.04.14 00:30) [3]
    >
    > > QuotedStr(Edit1.Text)
    >
    >
    > QuotedStr не спасёт от "д'Артаньяна"
    >
    >

    Какой только глупости не прочитаешь на делфимастере.

    PS. хоть бы справку прочитал, раз проверить лень.
  • Ega23 © (24.04.14 07:19) [9]
    Ого, гляди-ка, уже работает. При Сталине такого не было.
  • turbouser © (24.04.14 14:13) [10]

    > Ega23 ©   (24.04.14 07:19) [9]

    ЕМНИП еще в D7 работало
  • Ega23 © (24.04.14 14:33) [11]

    > ЕМНИП еще в D7 работало


    Где-то это дело не работало, точно помню. Как раз на "д'Артаньяне".
    А вот где не работало - не помню, хоть убей.
    Но всё равно надо параметры использовать.
  • Дмитрий (24.04.14 15:16) [12]
    В текст запроса всегда должно подставляться адекватное значение.
    Если текстбокс окаажется пустым, юзер получит устрашающего вида сообщение об ошибке.
    Если речь идет о выборке конкретной записи, и данный датасет всегда будет выдавать именно такой запрос, с отличием только ключевого значения записи,
    тогда нужно как у Ega23
    ADODataSet.CommandText := 'select * from inf where id=:d';
    ADODataSet.ParamByName('id').Value := ЦелоеЧисло;
    В свойствах параметра должен быть указан тип "integer"

    Дополнительное удобство, можно привязать этот датасет к датасорсу другого датасета, который содержит список записей имеющих такое же ключевое поле.
    Тогда при перемещении по списку, обсуждаемый датасет автоматически будет отслеживать запись.
  • Ega23 © (24.04.14 17:18) [13]

    > В свойствах параметра должен быть указан тип "integer"


    Это если ParamCheck = False


    > Тогда при перемещении по списку, обсуждаемый датасет автоматически
    > будет отслеживать запись.


    Не всегда.
  • Дмитрий (24.04.14 20:14) [14]
    При желании можно и... не такое
  • Ega23 © (24.04.14 20:44) [15]

    > При желании можно и... не такое


    При желании можно и этот самый сломать. Был бы этот самый и было бы желание.
 
Конференция "Базы" » SQL-запрос [D7]
Есть новые Нет новых   [118674   +65][b:0][p:0.001]