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

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.006 c
2-1399593217
Tanya
2014-05-09 03:53
2015.10.04
запрос не получается


4-1273660908
mick912
2010-05-12 14:41
2015.10.04
Защита информации


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


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


2-1400138594
Walter White
2014-05-15 11:23
2015.10.04
Вопрос по работе с Move