![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблеммы с запросом ADOQuery с параметрами [D6]
Noir © (2003-11-25 18:34:00)
Вот какая беда тут у меня происходит. Не работает такая вот конструкция? то есть не возвращает результата никакого.
with DataModule2.q_chuser do
begin
if Active then Close;
SQL.Clear;
SQL.Add("Select * from users where nick= :p1");
Parameters[0].DataType:=ftString;
Parameters.ParamValues["p1"] := form2.Edit1.Text;
open;
end;
end;
Хотя следующий вариант работает отлично
with DataModule2.q_chuser do
begin
if Active then Close;
SQL.Clear;
SQL.Add("Select * from users where id_num= :p1");
Parameters[0].DataType:=ftInteger;
Parameters.ParamValues["p1"] := strtoint(form2.Edit1.Text);
open;
end;
end;
При подстановке вместо параметров четких значений в тело самого запроса все срабатывает.
Не подскажите ли в чем может быть моя ошибка?
Заранее благодарен.
D6, Oracle
Noir (2003-11-26 17:37:00) [1]
> sokohigh (26.11.03 17:07) [12]
VarChar2(15) (для полной ясности) :).
А вообще, сдается мне что тут не порядки с настройками подкючения. Без каких либо извращений нормально отрабатывает только выборка по типу Integer. C дробными числами выборку пока не пробовал производить - нет надобности (да и полей в базе дробных нет). А вот что касаемо типов String, Date то здесь только срабатывает при преобразовании к String, в верхний(возможно нижний) регистр с обрезанием всех пробелов.
sokohigh (2003-11-26 17:07:00) [2]
а поле nick - наверное char, а не varchar?
Noir (2003-11-26 16:16:00) [3]
> Shirson © (26.11.03 14:02) [10]
Не спорю. Ответ на вопрос может лежать на поверхности, но пока я его не вижу.
Shirson (2003-11-26 14:02:00) [4]
Странно. Везде срабатывает, а у вас - нет :)
Я таким вариантом и даты ищу, и integer, и string и чёрта в ступе. И всегда находится, что интересно :)
Noir (2003-11-26 12:10:00) [5]
> Shirson © (26.11.03 11:37) [8]
> Для чего удалять гланды ректально? Параметры - вариантовые,
> так используйте это на всё катушку.
Может быть инструмент коротковат, но гланды приходится удалять именно так, а Ваш вариант по непонятной причине не срабатывает.
Shirson (2003-11-26 11:37:00) [6]
Для чего удалять гланды ректально? Параметры - вариантовые, так используйте это на всё катушку.
with DataModule2.q_chuser do
begin
if Active then Close;
SQL.Clear;
SQL.Add("Select * from users where nick= :p1");
// Parameters[0].DataType:=ftString;
Parameters.ParamValues["p1"] := form2.Edit1.Text;
open;
end;
end;
Noir (2003-11-25 18:56:00) [7]
Vlad, большое спасибо. именно так и сработало. а по поводу where id_num= :p1 - это я просто эксперементировал на предмет живости работы с параметрами и вводом в поля числа мне известного.
Еще раз большое спасибо. Работает.
Johnmen (2003-11-25 18:52:00) [8]
>Vlad © (25.11.03 18:47)
Да-да-да... Действительно, там nick, а там id_num :)))))
Не обратил внимания...:)
Vlad (2003-11-25 18:47:00) [9]
А вот это ни на что не навело ? :)
>where id_num= :p1"
Johnmen (2003-11-25 18:45:00) [10]
>Vlad © (25.11.03 18:43) [2]
>Это почему ? :)
Вот это навело на мысль такую
strtoint(form2.Edit1.Text);
Serg (2003-11-25 18:44:00) [11]
так может она и не должна ничего возвращать?
Vlad (2003-11-25 18:43:00) [12]
>А во-вторых, поле nick численное, а не символьное...
Это почему ? :)
а так ?
with DataModule2.q_chuser do
begin
if Active then Close;
SQL.Clear;
SQL.Add("Select * from users where UPPER(RTRIM(LTRIM(nick)))= :p1");
Parameters[0].DataType:=ftString;
Parameters.ParamValues["p1"] := UpperCase(trim(form2.Edit1.Text));
open;
end;
end
Johnmen (2003-11-25 18:40:00) [13]
Во-первых, я бы так написал
Parameters.ParamByName("pl").DataType:=...;
Parameters.ParamByName("pl").Value:=...;
А во-вторых, поле nick численное, а не символьное...