Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2014.08.24;
Скачать: CL | DM;

Вниз

Как использовать строковую переменную в SQL-запросе?   Найти похожие ветки 

 
Novicer   (2014-01-25 19:45) [0]

Здравствуйте! Можно обойтись без ParamByName или нет в Firebird используя IbQuery? Пробовал использовать стр.переменные всяко-разно получаю то ошибку синтаксиса, то ошибку выполнения запроса :(


 
clickmaker ©   (2014-01-25 19:53) [1]

можно.

> Пробовал использовать стр.переменные всяко-разно получаю
> то ошибку синтаксиса, то ошибку выполнения запроса

значит неправильно пробовал


 
RWolf ©   (2014-01-25 20:23) [2]

а зачем обходиться без ParamByName, если есть возможность его использовать?


 
Novicer   (2014-01-25 21:24) [3]

Хочу без указания параметров передавать через переменные требуемые данные прямо в запрос. Покажите плиз на примере как это можно сделать?


 
Inovet ©   (2014-01-25 21:32) [4]

> [3] Novicer   (25.01.14 21:24)
> через переменные

Через какие такие переменные? Параметры и есть переменные.


 
ухты   (2014-01-25 22:13) [5]

прямо не получается, подскажите как криво делать


 
Novicer   (2014-01-25 22:31) [6]

Строковые переменные


 
Novicer   (2014-01-25 23:02) [7]

Прямо получается, хочу уменьшить количество строк в программе. Слышал что без ParamByName можно обойтись используя переменные в запросе.


 
Юрий Зотов ©   (2014-01-25 23:13) [8]

> Novicer   (25.01.14 23:02) [7]

Можно. Но не нужно.

var
 S: string;

S := "Значение";
SQL := "select * from Table where Field = """ + S + """";

Только не говорите, что я Вам это посоветовал. Наоборот, советую все же использовать параметры.


 
Иксик ©   (2014-01-25 23:31) [9]

Классика :)
s := "x or 1=1; delete from table_name..." :)


 
Novicer   (2014-01-25 23:48) [10]

>Юрий Зотов Все работает, спасибо большое! Если можно расскажите о плюсах ParamByName. Зачем перед каждым запросом писать лишние строчки с параметрами, если их можно указать прямо в запросе?


 
Novicer   (2014-01-25 23:55) [11]

У меня почему-то после выполнения пару одинаковых запросов подряд вылетает ошибка параметра, хотя он указан перед выполнением запроса:
IBQuery1.Close;
if not IBQuery1.Prepared then IBQuery1.Prepare;
IBQuery1.ParamByName("Name_param").Value := "значение";
IBQuery1.SQL.Text := "SELECT * FROM MAINLIST WHERE (ZNAME CONTAINING :Name_param)";
IBQuery1.Open;
Mainlist - имя таблицы, zname - ее колонка. код прописан на OnClick кнопки


 
Иксик ©   (2014-01-25 23:56) [12]

Проверка типов в ParamByName есть? Ну и главное:  см. SQL Injection.


 
Иксик ©   (2014-01-25 23:57) [13]

[12] было к [10]


 
clickmaker ©   (2014-01-25 23:58) [14]

а ParamByName и SQL.Text не надо местами поменять?
да и какой смысл делать IBQuery1.Prepare до того как задал текст запроса?


 
Novicer   (2014-01-26 00:12) [15]

>Иксик DataType - ftString, ParamType - ptInput
Ошибка из-за неправильной последовательности строк?


 
Плохиш ©   (2014-01-26 00:34) [16]


> Юрий Зотов ©   (25.01.14 23:13) [8]

О, а как же Д"Артаньян?

> Novicer   (26.01.14 00:12) [15]

Ты б почитал всë-таки об основах.


 
Novicer   (2014-01-26 00:37) [17]

>Плохиш Начал читать, пока слабоват в SQL   :(


 
ухты   (2014-01-26 00:47) [18]

а при чем тут SQL?


 
Novicer   (2014-01-26 00:53) [19]

>ухты ?


 
Inovet ©   (2014-01-26 13:11) [20]

> [7] Novicer   (25.01.14 23:02)
> хочу уменьшить количество строк в программе.

Это самоцель?


 
Novicer   (2014-01-26 14:33) [21]

>Inovet Если можно обойтись без ParamByName,зачем применять? Где-то вычитал, что чем меньше играться с параметрами, тем стабильнее работает код... Ваше мнение?


 
Германн ©   (2014-01-26 14:38) [22]


> Где-то вычитал, что чем меньше играться с параметрами, тем
> стабильнее работает код... Ваше мнение?

С программами вообще играться не надо. Их надо делать грамотно. :)


 
RWolf ©   (2014-01-26 14:44) [23]

без параметров серверу придётся каждый раз делать Prepare запросу.


 
Inovet ©   (2014-01-26 16:13) [24]

> [21] Novicer   (26.01.14 14:33)
> Если можно обойтись без ParamByName,зачем применять?

Причём тут ParamByName, речь о параметрах, а не способе доступа к ним в Делфи.


 
Inovet ©   (2014-01-26 16:14) [25]

> [21] Novicer   (26.01.14 14:33)
> Где-то вычитал, что чем меньше играться с параметрами, тем
> стабильнее работает код... Ваше мнение?

Вычитать можно много всякого, и, что интересно, больше вычитывается глупостей.


 
Кшиштоф Маннергейм   (2014-01-26 21:40) [26]

S := "Значение";

SQL := "select * from Table where Field = " + QuotedStr(s);

Дело в том, что если значение s  не дай бог содержит одиночную кавычку, то при иных подходах могут возникнуть серьезные проблемы.

Хотя согласен с Зотовым, лучше приучить себя пользоваться параметрами.


 
ухты   (2014-01-26 21:45) [27]


> Field = " + QuotedStr(s);
и зачем все стараються кавычить значение?
на тип надо поля смотреть.. разные они и не всегда кастинг пройдет как надо


 
clickmaker ©   (2014-01-26 22:01) [28]

> [27] ухты   (26.01.14 21:45)

собственно, для этого и придумали параметры...


 
ухты   (2014-01-26 22:18) [29]


> clickmaker ©   (26.01.14 22:01) [28]
[5], а [27] уже так.. для разнообразия :)


 
Novicer   (2014-01-26 23:02) [30]

Видно сразу что мастера! Убедили, буду использовать параметры. Все-таки хочется писать правильные программы :) Можно пример в пару строк с применением параметров в запросе?


 
Плохиш ©   (2014-01-26 23:38) [31]

Чем пример из справки не устраивает?



Страницы: 1 вся ветка

Текущий архив: 2014.08.24;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.013 c
15-1390656072
Jimmy
2014-01-25 17:21
2014.08.24
Карточные игры


11-1251813475
AndreyRus
2009-09-01 17:57
2014.08.24
Нужна ли FileClose в KOL?


11-1205861966
Vinum
2008-03-18 20:39
2014.08.24
Сделать кучу форм


11-1251010071
Dy1
2009-08-23 10:47
2014.08.24
базы данных


2-1380744070
Антипов В.А.
2013-10-03 00:01
2014.08.24
Проблема с поддержкой латышских букв в программе