Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > поиск данных из Edit


Автор: INeo 22.3.2011, 12:02
Всем привет. Помогите разобраться с поиском значений которые будут вводится в edit. Нужно по средствам запроса брать значения из таблицы, которые будут вводится в edit. И по ходу дела с фильтрацией помогите. Как это реализовать в компоненте adotable знаю, а вот с компонентом adoquery сложновато дается.  Ниже предоставляю само приложение в котором все это хочу реализовать. Пжл, помогите.

Автор: superVad 22.3.2011, 15:01
Попробуй еще раз сформулировать.

Автор: Данкинг 22.3.2011, 15:14
Цитата(INeo @  22.3.2011,  12:02 Найти цитируемый пост)
Нужно по средствам запроса брать значения из таблицы, которые будут вводится в edit. 

Сам понял, что написал?
Цитата(INeo @  22.3.2011,  12:02 Найти цитируемый пост)
а вот с компонентом adoquery сложновато дается. 

Делай запрос с условием "where...".
Цитата(INeo @  22.3.2011,  12:02 Найти цитируемый пост)
Пжл, помогите. 

Я, кажется, догадался: надо выбирать из таблицы строки, где значение какого-то поля равно значению Edit? 

Автор: INeo 22.3.2011, 16:05
=)  я понимаю вам смешно =) Я просто в панике щас. В общем нужно реализовать такое дело. Пользователь будет набирать в edit например, инвентарный номер компа, далее жмет по кнопке найти и комп с указанным номером должен отобразится

Добавлено через 2 минуты и 5 секунд
Цитата(Данкинг @ 22.3.2011,  15:14)
Я, кажется, догадался: надо выбирать из таблицы строки, где значение какого-то поля равно значению Edit?


Вот то, что я имею ввиду =)

Автор: Данкинг 22.3.2011, 16:40
Ну, используй locate в простейшем случае.

Автор: INeo 22.3.2011, 16:46
Цитата(Данкинг @ 22.3.2011,  16:40)
Ну, используй locate в простейшем случае.

Хотелось бы узнать как сделать с запросом

Добавлено через 2 минуты и 26 секунд
Я пробывал так

procedure TfMain.Button1Click(Sender: TObject);
begin  
 fDM.QMainComp.Active := false;
  fDM.QMainComp.SQL.Clear;
  fDM.QMainComp.SQL.Add('SELECT *');
  fDM.QMainComp.SQL.Add('FROM MainComp');
  fDM.QMainComp.SQL.Add('WHERE InvNum LIKE'''+'%'+Edit1.text+'%''');
  fDM.QMainComp.Active := true

Жмешь найти и не чего не происходит. Даже ошибку не выдает 

Автор: Данкинг 22.3.2011, 17:26
Цитата(INeo @  22.3.2011,  16:46 Найти цитируемый пост)
Жмешь найти и не чего не происходит.

А если * вместо % ?

Автор: INeo 22.3.2011, 17:58
Цитата(Данкинг @ 22.3.2011,  17:26)
Цитата(INeo @  22.3.2011,  16:46 Найти цитируемый пост)
Жмешь найти и не чего не происходит.

А если * вместо % ?

пробывал *, но тоже безрезультатно.

еще вот так попробывал 

procedure TfMain.Button1Click(Sender: TObject);
begin
  with fdm.QMainComp do begin
    close;
    sql.Clear;
    sql.Add('SELECT * FROM MainComp WHERE InvNum=:pInvNum');
    Parameters.ParamByName('pInvNum').Value := Edit1.Text;
    open;

  end;

тот же эффект что и в первый раз. Жмешь НАйти и не чего, 0 внимания.

Автор: Данкинг 22.3.2011, 18:02
Во-первых, попробуй выполнить запрос в самом Access'е. Во-вторых, попробуй trim(Edit1.Text) взять.

Автор: Antimol 22.3.2011, 18:17
может DBGrid не связан с fdm.QMainComp

 smile 

Так и есть у тебя связь:

DBGrid1 -> fDM.DSQMainComp -> TMainComp 

при изменении данных в Edit1 выполняется запрос в QMainComp

просто измени источник данных в DBGrid1 на DSQMainComp

И код можно проще написать на событие onChange для Edit1

Код

procedure TfMain.Edit1Change(Sender: TObject);
begin
  fDM.QMainComp.SQL.Text:='SELECT * FROM MainComp WHERE InvNum LIKE :Param';
  fDM.QMainComp.Parameters.ParamByName('Param').Value:='%'+Edit1.text+'%';
  fDM.QMainComp.Open;
end;

Автор: INeo 22.3.2011, 20:00
Цитата(Antimol @ 22.3.2011,  18:17)
может DBGrid не связан с fdm.QMainComp

 smile 

Так и есть у тебя связь:

DBGrid1 -> fDM.DSQMainComp -> TMainComp 

при изменении данных в Edit1 выполняется запрос в QMainComp

просто измени источник данных в DBGrid1 на DSQMainComp

И код можно проще написать на событие onChange для Edit1

Код

procedure TfMain.Edit1Change(Sender: TObject);
begin
  fDM.QMainComp.SQL.Text:='SELECT * FROM MainComp WHERE InvNum LIKE :Param';
  fDM.QMainComp.Parameters.ParamByName('Param').Value:='%'+Edit1.text+'%';
  fDM.QMainComp.Open;
end;

Antimol, огромнейшее тебе СПАСИБО!!! Все работает отлично!!! Ура!!!Конечно Всем кто отвечал спасибо! Как хорошо что есть такие профессионалы и хорошие люди как Antimol! Все разжевал и четко объяснил, профессионально! Еще раз спасибо!!! Очень благодарен! =)

Автор: Antimol 23.3.2011, 13:20
Пожалуйста. Старался  smile  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)