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

Вниз

Как использовать строковую переменную в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.003 c
15-1390768202
Юрий
2014-01-27 00:30
2014.08.24
С днем рождения ! 27 января 2014 понедельник


15-1390669236
antonn
2014-01-25 21:00
2014.08.24
немного кривой order by в mssql


11-1252421746
varag
2009-09-08 18:55
2014.08.24
Работа с ListView


2-1380565915
zibert
2013-09-30 22:31
2014.08.24
pred


2-1380422621
Коля
2013-09-29 06:43
2014.08.24
Узнать заводской номер жёсткого диска





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский