Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2011, 14:03   #1
MrMorozko
Форумчанин
 
Регистрация: 19.06.2009
Сообщений: 115
Вопрос Запрос ADOQuery

Всем доброго времени суток. Имеется запрос который компилируется но не проходит, в смысле ошибок не выдает но не работает....уже не знаю в чем косяк...вот собственно листинг
Код:
procedure TForm4.Button1Click(Sender: TObject);
var st1,st2,st3,st4:string;
begin
st3:=Edit1.Text;
st4:=Edit2.Text;

st2:=ComboBox1.Text;
 if st2='Нименование' then begin st2:='name'; end else
 if st2='Цена' then begin st2:='price'; end else
  if st2='Гарантия' then begin st2:='guarantee'; end else
   if st2='Идентификтаор' then begin st2:='iden';
 begin
ADOQuery1.Active:=false;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT * FROM tableA WHERE (:st2_p>:st3_p) and (:st2_p<:st4_p) ');

ADOQuery1.Active:=true;

ADOQuery1.Parameters.ParamByName('st2_p').value := st2;
ADOQuery1.Parameters.ParamByName('st3_p').value := st3;
ADOQuery1.Parameters.ParamByName('st4_p').value := st4;

end;
end;
end;
Запрос должен выполнять по сути фильтрацию от одного значения до другого
MrMorozko вне форума Ответить с цитированием
Старый 25.04.2011, 14:12   #2
OlegVE
Форумчанин
 
Регистрация: 27.09.2010
Сообщений: 376
По умолчанию

Здравствуйте
А если так
Цитата:
Сообщение от MrMorozko Посмотреть сообщение
...
ADOQuery1.SQL.Add('SELECT * FROM tableA WHERE (:st2_p>:st3_p) and (:st2_p<:st4_p) ');

// ADOQuery1.Active:=true;

ADOQuery1.Parameters.ParamByName('s t2_p').value := st2;
ADOQuery1.Parameters.ParamByName('s t3_p').value := st3;
ADOQuery1.Parameters.ParamByName('s t4_p').value := st4;

ADOQuery1.Active:=true;
end;
end;
end;[/CODE]
Запрос должен выполнять по сути фильтрацию от одного значения до другого
До свидания
OlegVE вне форума Ответить с цитированием
Старый 25.04.2011, 14:24   #3
MrMorozko
Форумчанин
 
Регистрация: 19.06.2009
Сообщений: 115
По умолчанию

Даже так) так уже ставил
MrMorozko вне форума Ответить с цитированием
Старый 25.04.2011, 14:58   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

1. попробовать так
Код:
ADOQuery1.SQL.Add('SELECT * FROM tableA WHERE (:st2_p1>:st3_p) and (:st2_p2<:st4_p) ');
ДВА разных параметра для одного поля.

2..Я бы не стал имя поля фильтрации задавать параметром.
Код:
ADOQuery1.Active:=false;
ADOQuery1.SQL..text:='SELECT * FROM tableA'
 if st2='Нименование' then begin adoquery1.SQL.Add('WHERE (name>:st3_p) and (name<:st4_p) ');
Adoquery.parameters.....
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 25.04.2011 в 15:05.
evg_m вне форума Ответить с цитированием
Старый 25.04.2011, 14:58   #5
OlegVE
Форумчанин
 
Регистрация: 27.09.2010
Сообщений: 376
По умолчанию

Цитата:
Сообщение от MrMorozko Посмотреть сообщение
Даже так) так уже ставил
Только так и надо. Параметры меняются также в закрытом запросе. Объясните следующее
Цитата:
(:st2_p>:st3_p) and (:st2_p<:st4_p) ');
Что Вы хотите выбрать?
Добавка
Два ответа одновременно . Учтите при ответе и сообщение от evg_m (я имел ввиду только эту часть "Я бы не стал имя поля фильтрации задавать параметром").
Добавка 2
Думаю Вам надо это
Код:
ADOQuery1.SQL.Add('SELECT * FROM tableA WHERE (' + st2 + '>:st3_p) and (' + st2 + '<:st4_p) ');

Последний раз редактировалось OlegVE; 25.04.2011 в 15:19.
OlegVE вне форума Ответить с цитированием
Старый 25.04.2011, 16:54   #6
MrMorozko
Форумчанин
 
Регистрация: 19.06.2009
Сообщений: 115
По умолчанию

увы....не один из вариантов не проходит
Мне нужно допусти из списка значений1-1000, отфильтровать от 50 до 100
я уже и на прямую пробовал задать запрос...'WHERE (iden>50) and (iden<100) '
MrMorozko вне форума Ответить с цитированием
Старый 25.04.2011, 17:58   #7
OlegVE
Форумчанин
 
Регистрация: 27.09.2010
Сообщений: 376
По умолчанию

1. Исправьте все ошибки. Например
Код:
 if st2='Нименование' then begin st2:='name'; end else
 if st2='Цена' then begin st2:='price'; end else
  if st2='Гарантия' then begin st2:='guarantee'; end else
   if st2='Идентификтаор' then begin st2:='iden';
и поясните чего Вы хотите добиться
2. Разберитесь со всеми Вашими begin и end.
Код:
procedure TForm4.Button1Click(Sender: TObject);
var st1,st2,st3,st4:string;
begin
st3:=Edit1.Text;
st4:=Edit2.Text;

st2:=ComboBox1.Text;
 if st2='Нименование' then begin st2:='name'; end else
 if st2='Цена' then begin st2:='price'; end else
  if st2='Гарантия' then begin st2:='guarantee'; end else
   if st2='Идентификтаор' then begin st2:='iden'; end; // Если Вам так более читаемо, 
//т.к. для подобного этому begin st2:='iden'; end;  begin и end не нужны
// begin
ADOQuery1.Active:=false;
...
ADOQuery1.Active:=true;

// end;
// end;
end;
Вас устраивает что запрос может вообще не обновляться?
3. Попробуйте для проверки такой код
Код:
procedure TForm4.Button1Click(Sender: TObject);
begin
 ADOQuery1.Active:=false;
 ADOQuery1.SQL.Clear;
 ADOQuery1.SQL.Add('SELECT * FROM tableA WHERE (iden>50) and (iden<100);');
 ADOQuery1.Active:=true;
end;
Тогда Вы разберётесь с Вашими if ... else ...
4. Главное. В параметрах передают значения, а не имена полей.
OlegVE вне форума Ответить с цитированием
Старый 25.04.2011, 18:49   #8
Gulik
Холост/Не замужем
Форумчанин
 
Аватар для Gulik
 
Регистрация: 13.11.2007
Сообщений: 283
По умолчанию

Код:
   ADOQuery1.Active := False ;
   ADOQuery1.SQL.Clear ;
   ADOQuery1.SQL.Add('SELECT * FROM tableA LIMIT 0, 30') ;
   ADOQuery1.Active := True ;
ну а параметры сам вставишь
Gulik вне форума Ответить с цитированием
Старый 25.04.2011, 23:36   #9
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

'WHERE (iden>50) and (iden<100)
Какой ТИП поля в БД.(не строковый ли случаем).
сортировка (и порядок для чисел и для строк отличаются).
Есть ли там нужные записи.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ПЕРЕДЕЛАТЬ ЗАПРОС ИЗ ACCESS в ADOQuery cokolik БД в Delphi 2 12.02.2011 18:38
ADOQuery и запрос с Access WALL БД в Delphi 4 25.10.2010 03:25
запрос на Adoquery Ayubkhon БД в Delphi 0 26.05.2010 13:38
Запрос в ADOQuery Jon_1981 БД в Delphi 3 15.06.2007 10:41