Форум: "Начинающим";
Текущий архив: 2014.06.08;
Скачать: [xml.tar.bz2];
Внизпоиск по базе Найти похожие ветки
← →
lancomm © (2013-08-19 21:24) [0]Доброго вечера. Подскажите пожалуйста как совершать поиск по таблице более какого то значения. Есть код
datamodule1.ADOQuery1.Active :=False;
datamodule1.ADOQuery1.SQL.Clear;
datamodule1.ADOQuery1.SQL.Add("SELECT*");
datamodule1.ADOQuery1.SQL.Add("FROM sey1");
datamodule1.ADOQuery1.SQL.Add("WHERE Cena > 31000");
datamodule1.ADOQuery1.Active := true;
form9.ShowModal;
ищет в таблице sey1 в столбце Cena значения больше 31000, если не трудно подскажите синтаксис как искать больше не уже известного значения, а больше введенного например в Edit
← →
Dennis I. Komarov © (2013-08-19 21:49) [1]
datamodule1.ADOQuery1.Active :=False;
datamodule1.ADOQuery1.SQL.Clear;
datamodule1.ADOQuery1.SQL.Add("SELECT*");
datamodule1.ADOQuery1.SQL.Add("FROM sey1");
datamodule1.ADOQuery1.SQL.Add("WHERE Cena > " + TEdit(указатель).Text);
datamodule1.ADOQuery1.Active := true;
form9.ShowModal;
P.S. Только бред это
← →
Dennis I. Komarov © (2013-08-19 21:50) [2]Избавиться от Query и использовать параметры
← →
lancomm © (2013-08-19 21:57) [3]Спасибо, работает, подскажите поподробнее о параметрах, если не трудно, или ссылку где почитать, делаю все по древним методичкам
← →
Dennis I. Komarov © (2013-08-19 22:02) [4]http://docwiki.embarcadero.com/Libraries/XE2/en/Data.Win.ADODB.TParameters
Пойдет?
← →
lancomm © (2013-08-19 22:05) [5]Спасибо еще раз, буду разбираться
← →
megavoid © (2013-08-19 22:39) [6][1] опасно, а если в TEdit(указатель) впишут что-то типа
31000; TRUNCATE TABLE sey1;
?
← →
Юрий Зотов © (2013-08-19 23:21) [7]
> megavoid © (19.08.13 22:39) [6]
Видел забавную картинку: перед ГАИшной камерой едет авто с номерным знаком "Drop Database".
PS
Для двоичных программистов - это на тему внедренного SQL-кода.
PPS
Для супердвоичных программистов - я в курсе, что код не выполнится.
← →
Dennis I. Komarov © (2013-08-19 23:21) [8]megavoid © (19.08.13 22:39) [6]
> [1] опасно
Говорю же, бред...
← →
megavoid © (2013-08-19 23:34) [9][8] Да Dennis I. Komarov-то знает, не сомневаюсь, а вот ТС :))
← →
Dennis I. Komarov © (2013-08-19 23:40) [10]
> megavoid © (19.08.13 23:34) [9]
> [8] Да Dennis I. Komarov-то знает, не сомневаюсь, а вот
> ТС :))
Судя по запросу, оно и не надо - работает и ...
← →
lancomm © (2013-08-20 08:04) [11]я понимаю что вы знаете в чем проблема, но не могли бы вы мне человеческим языком объяснить в чем суть проблемы при
[1] опасно, а если в TEdit(указатель) впишут что-то типа 31000; TRUNCATE TABLE sey1; ?
← →
Anatoly Podgoretsky © (2013-08-20 09:35) [12]Cуть проблемы в "TRUNCATE TABLE sey1;"
← →
lancomm © (2013-08-20 11:17) [13]вписывал 31000 и более, все ок
← →
megavoid © (2013-08-20 11:38) [14]Заменяем всего одно слово, роберта на truncate - и визуальная запоминалка xkcd начинает пробуксовывать, а значит, не столь эффективна :)
[13] Datamodule1.ADOQuery1.SQL.Add формирует SQL запрос, чтобы потом отобразить полученный набор данных куда-нибудь, в dbgrid, например. Если вписать в TEdit обыкновенное число - то запрос к базе получится такой, как и планировался, то бишьSELECT * FROM sey1 WHERE Cena > 31000
Некоторые же персоналии, со зла или по недомыслию, могут попробовать вписать в Edit1 более оригинальный текст, как уже привёл пример:31000; TRUNCATE sey1;
. К чему это приведёт? Получится не один запрос к базе, а два; точка с запятой служит признаком конца запроса для SQL, и база выполнит не только первую команду с селектом, но и вторую, которая стирает все данные из заданной таблицы. Это можно лечить разными способами, можно кавычками, а в данном случае можно и просто заменить Tedit на TSpinEdit, например.
PS гыы, вбил в поиск "adoquery sql injection" - на первом же месте ветка с SQL.ru от 2009 года, где АП с грустью во словах в который раз её объясняет :D
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2014.06.08;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.001 c