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

Вниз

запрос не получается   Найти похожие ветки 

 
Tanya   (2014-05-09 03:53) [0]

На форме у меня расположено три компонента ADO: Query, Connection, и Data Source. В свойстве SQL прописала так
SELECT x, Lx
FROM Таблица
WHERE x=:xv AND x=:xv+n
xv, n -это параметры. То есть в итоге я должна получить значения -два столбца x, Lx и две строки значения.
В коде на кнопку прописала
ADOQuery1.Close;
ADOQuery1.Parameters.ParamByName("xv").Value:=Edit1.text;
ADOQuery1.Parameters.ParamByName("n").Value:=Edit2.text;
ADOQuery1.Open;
DataSource1.DataSet:=ADOQuery1;
И тут у меня ошибка с параметром возникла не находит Параметр  n как это исправить??


 
Tanya   (2014-05-09 05:06) [1]

а ну  DBGrid


 
turbouser ©   (2014-05-09 05:09) [2]

WHERE x=:xv AND x=:xv+n
тут ошибка.
если n - это должен быть параметр, тогда
WHERE x=:xv AND x=:xv+:n
но!
такой запрос при n<>0 не вернет ничего


 
turbouser ©   (2014-05-09 05:18) [3]

вместо AND должен быть OR, если уж
> в итоге я должна получить значения -два столбца x, Lx и
> две строки значения


 
Tanya   (2014-05-09 05:24) [4]

Спасибо вам   сейчас попробую


 
Tanya   (2014-05-09 05:31) [5]

Все равно не находит параметр n ((


 
Tanya   (2014-05-09 05:45) [6]


> но!такой запрос при n<>0 не вернет ничего

то есть n больше, меньше 0? не поняла эту запись


 
Tanya   (2014-05-09 05:50) [7]

а знак равносильности.   Исправила не получается.Может у меня все дело в параметрах ?


 
Tanya   (2014-05-09 06:57) [8]

Если убрать второй параметр вообще, то с легкостью работает :(


 
sms   (2014-05-09 11:01) [9]

что такое n?


 
Inovet ©   (2014-05-09 12:43) [10]

> [0] Tanya   (09.05.14 03:53)
> xv, n -это параметры. То есть в итоге я должна получить
> значения -два столбца x, Lx и две строки значения.

Точно? Не диапазон (x-n, x+n)?


 
turbouser ©   (2014-05-09 13:33) [11]

Долго можно гадать :)

> Tanya

Текст ошибки сюда скопируй


 
Tanya   (2014-05-09 18:41) [12]

только зашла
Поясняю значит, я хочу чтобы в результате моего запроса отображалась два поля x и Lx, в первой строке отображалось значение  поля Lх по х столбцу, с введенным параметром  x=:xv, а во второй строке значение  поля Lх по х с веденным параметром x=:xv+:n, где xv и n параметрические переменные введенные в edit-ах. Например отображается x и Lx при х=40 и х=40+10 то есть 50.
Текст ошибки: Project1.exe raised exception class EDatabase Error with message "ADOQuery1: Parameter "n" not found. Process stoped.


 
turbouser ©   (2014-05-09 20:27) [13]


> Tanya   (09.05.14 18:41) [12]


>  "ADOQuery1: Parameter "n" not found. Process stoped.

Зайди еще раз в список параметров ADOQuery1. Бывает что после изминения запроса не схватывает.


 
Дмитрий   (2014-05-12 16:08) [14]


> SELECT x, Lx FROM Таблица WHERE x=:xv AND x=:xv+nxv, n -
> это параметры. То есть в итоге я должна получить значения
> -два столбца x, Lx и две строки значения.В коде на кнопку
> прописала ADOQuery1.Close;ADOQuery1.Parameters.ParamByName("xv").
> Value:=Edit1.text;ADOQuery1.Parameters.ParamByName("n").
> Value:=Edit2.text;

У вас в запросе параметр ":xv" используется дважды.
Параметр "n" - ни разу, т.к. не обозначен двоеточием.
Поэтому, при подстановке,  "n" не будет найден вообще,
":xv" будет присвоен только один раз, поскольку будет воспринят парсером как два параметра с одинаковым именем.
Для него либо используйте два разных имени передавая одну величину, либо ищите в цикле все параметры с названием "xv".


 
Дмитрий   (2014-05-12 16:16) [15]

SELECT x, Lx
FROM Таблица
WHERE x=:xv1 or x=:xv2 + :n
ADOQuery1.Parameters.ParamByName("xv1").Value:= Edit1.text;
ADOQuery1.Parameters.ParamByName("xv2").Value:= Edit1.text;
ADOQuery1.Parameters.ParamByName("n").Value:= Edit2.text;

Однако, подставлять напрямую текст из боксов чревато запустить юзерскую ошибку, либо sql-инъекцию от злоумышленника.
Хотя бы проводите преобразование к нужному типу данных во избежание.


 
sniknik ©   (2014-05-12 16:47) [16]

> либо sql-инъекцию от злоумышленника.
sql-инъекция через параметры запроса не возможна. только при сборке запроса из частей.


 
Ega23 ©   (2014-05-13 10:10) [17]


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


Не болтайте ерундой.


 
Дмитрий   (2014-05-13 16:18) [18]

Вы хотите сказать, что и пользовательская ошибка не возможна?


 
Inovet ©   (2014-05-13 16:37) [19]

> [18] Дмитрий   (13.05.14 16:18)

Какая именно?


 
Дмитрий   (2014-05-13 16:43) [20]

любая
текст вместо числа


 
turbouser ©   (2014-05-13 16:48) [21]


> Дмитрий   (13.05.14 16:43) [20]
>
> любая
> текст вместо числа

Ну, попробуй :)


 
Дмитрий   (2014-05-13 17:14) [22]

Я пробовал
Раньше


 
sniknik ©   (2014-05-14 08:00) [23]

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

а вот теперь говорю -
что страшного в пользовательской ошибке? они всегда ошибаются, и что? обработанная ошибка от ввода юзера это нормально. на каком этапе ее обработать... да плевать, пусть будет самим присвоением параметров. допустим это выполняется в try except (а даже и нет его)  введут число текстом в числовой параметр будет приведение типа (само без ваших действий), запрос сработает как задумывалось, будет текст символами, а не число (а тип переменной число) будет юзеру сообщение о неправильно введенном параметре... повторюсь, и что? разве это неправильное поведение программы, разве не у всех так?

> Хотя бы проводите преобразование к нужному типу данных во избежание.
я бы тебе советовал, не писать о том в чем не разбираешься, во избежание.


 
Дмитрий   (2014-05-14 16:16) [24]

развейте мои заблуждения


 
Inovet ©   (2014-05-14 16:31) [25]

> [24] Дмитрий   (14.05.14 16:16)
> развейте мои заблуждения

Параметр :Prm1 не то же самое, что замена в тексте запроса куска ":Prm1" на текст присваиваемого значения.


 
Inovet ©   (2014-05-14 16:32) [26]

> [25] Inovet ©   (14.05.14 16:31)
> Параметр :Prm1

Присвоение значения параметру :Prm1


 
Дмитрий   (2014-05-14 16:47) [27]

Где у меня написано про замену параметра куском текста?
У меня написано конкретно: в тексте запроса параметр "n" не обозначен двоеточием, поэтому не обнаруживается и генерит ошибку.
Соответствующий пример изменения текста запроса у меня дан.


 
sniknik ©   (2014-05-14 17:37) [28]

не переводи "стрелки". тебя исправляли по "sql-инъекции" (и продолжают про него) и по необходимости "приведения типа" вместо access-а. про параметр "n" никто не "заикался", все верно по нему написано.


 
Дмитрий   (2014-05-14 20:38) [29]

Удалено модератором
Примечание: Правила читаем и уважаем


 
Кщд   (2014-05-15 10:51) [30]

>Дмитрий   (14.05.14 20:38) [29]
sql-injection при работе с параметрами невозможна
то, что Вы не умеете признать свою ошибку, Ваша и только Ваша проблема


 
Дмитрий   (2014-05-15 16:18) [31]

Если вы перечитаете, то про SQL-инъекцию я не настаиваю.


 
Дмитрий   (2014-05-15 16:18) [32]

В смысле, инъекцию через параметры.



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

Форум: "Начинающим";
Текущий архив: 2015.10.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.002 c
2-1400138594
Walter White
2014-05-15 11:23
2015.10.04
Вопрос по работе с Move


4-1273682403
zamtmn
2010-05-12 20:40
2015.10.04
в SysTreeView32 не приходит WM_CONTEXTMENU


15-1422180830
AndrewAndrey
2015-01-25 13:13
2015.10.04
Ошибка при запуске приложения 0xc0000005


15-1423949475
Юрий
2015-02-15 00:31
2015.10.04
С днем рождения ! 15 февраля 2015 воскресенье


15-1423863064
Юрий
2015-02-14 00:31
2015.10.04
С днем рождения ! 14 февраля 2015 суббота





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