|
Вопрос # 4 623/ вопрос открыт / |
|
Здравствуйте, уважаемые эксперты!
На форме находятся компоненты Edit1 в нем вводится возраст, Combobox3 сфера деятельности, Combobox1 семейное положение, RadioGroup1 пол. При указание и выборе из списков информацию в таблице при нажатии кнопки должно показывать только тех кто входит в эти параметры. Что я не так делаю? Еще надо что бы фильтрация проходила не только по всем заданым параметрам, но и когда выбираеш только один. Таблица StringGrid. Данные берутся из sql базы.
Вот данные таблицы:
Фамилия
Имя
Отчество
Домашний телефон
Рабочий телефон
Мобильный телефон
Почта
Дата рождения
Семейное положение
Сфера дефтельности
Пол
К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)
Приложение: Переключить в обычный режим- unit Unit2;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, Grids, DBGrids, DBXpress, FMTBcd, DBClient, SimpleDS, DB,
- SqlExpr, ExtCtrls, DBCtrls, StdCtrls;
-
- type
- TForm2 = class(TForm)
- SQLConnection2: TSQLConnection;
- Q2: TSQLQuery;
- StringGrid2: TStringGrid;
- ComboBox1: TComboBox;
- Label1: TLabel;
- Label3: TLabel;
- ComboBox3: TComboBox;
- Label4: TLabel;
- Edit1: TEdit;
- Button1: TButton;
- RadioGroup1: TRadioGroup;
- CheckBox1: TCheckBox;
- CheckBox2: TCheckBox;
- procedure FormActivate(Sender: TObject);
- procedure Button1Click(Sender: TObject);
-
-
-
- private
- { Private declarations }
- public
- { Public declarations }
- end;
-
- var
- Form2: TForm2;
-
- implementation
-
- {$R *.dfm}
-
-
- procedure TForm2.FormActivate(Sender: TObject);
- var q:integer;
-
- begin
- try
- Q2.Open;
- except
- on e:exception do showmessage(e.Message)
- end;
- stringgrid2.Visible:=false;
- stringgrid2.RowCount:=2;
- q:=1;
-
- while not Q2.Eof do
- begin
- StringGrid2.Cells[0,0]:= 'Ôàìèëèÿ';
- StringGrid2.Cells[1,0]:= 'Èìÿ';
- StringGrid2.Cells[2,0]:=
'Îò÷åñòâî';
- StringGrid2.Cells[3,0]:=
'Äîìàøíèé
òåëåôîí';
- StringGrid2.Cells[4,0]:= 'Ðàáî÷èé
òåëåôîí';
- StringGrid2.Cells[5,0]:=
'Ìîáèëüíûé
òåëåôîí';
- StringGrid2.Cells[6,0]:= 'Ïî÷òà';
- StringGrid2.Cells[7,0]:= 'Äàòà
ðîæäåíèÿ';
- StringGrid2.Cells[8,0]:=
'Ñåìåéíîå
ïîëîæåíèå';
- StringGrid2.Cells[9,0]:= 'Ñôåðà
äåÿòåëüíîñòè';
- StringGrid2.Cells[10,0]:= 'Ïîë';
-
- stringgrid2.Cells[0,q]:=Q2.fields[0].AsString;
- stringgrid2.Cells[1,q]:=Q2.fields[1].AsString;
- stringgrid2.Cells[2,q]:=Q2.fields[2].AsString;
- stringgrid2.Cells[3,q]:=Q2.fields[3].AsString;
- stringgrid2.Cells[4,q]:=Q2.fields[4].AsString;
- stringgrid2.Cells[5,q]:=Q2.fields[5].AsString;
- stringgrid2.Cells[6,q]:=Q2.fields[6].AsString;
- stringgrid2.Cells[7,q]:=Q2.fields[7].AsString;
- stringgrid2.Cells[8,q]:=Q2.fields[8].AsString;
- stringgrid2.Cells[9,q]:=Q2.fields[9].AsString;
- stringgrid2.Cells[10,q]:=Q2.fields[10].AsString;
-
-
- Q2.Next;
- inc(q);
- stringgrid2.RowCount:=q+2;
- end;
- stringgrid2.Visible:=true;
- if Q2.Active then Q2.Close;
-
- combobox1.Clear;
- Form2.Q2.SQL.Text:='select DISTINCT family_status from owner';
- Form2.Q2.Open;
- if Form2.Q2.Active then
- begin
- Form2.Q2.First;
- while not q2.Eof do
- BEGIN
- Form2.ComboBox1.Items.Add(Form2.Q2.FieldByName('family_status').AsString);
- Form2.Q2.Next;
- END;
- q2.Close;
- END;
-
-
- combobox3.Clear;
- Form2.Q2.SQL.Text:='select DISTINCT typeorg from owner where
typeorg='+IntToStr(Combobox3.ItemIndex)+'';
- Form2.Q2.Open;
- if Form2.Q2.Active then
- begin
- Form2.Q2.First;
- while not q2.Eof do
- BEGIN
- Form2.ComboBox3.Items.Add(Form2.Q2.FieldByName('typeorg').AsString);
- Form2.Q2.Next;
- END;
- q2.Close;
- end;
-
-
-
-
-
-
- end;
-
-
-
-
-
- procedure TForm2.Button1Click(Sender: TObject);
- begin
- q2.SQL.Text:='select * from owner where DateDiff(year,date_of_birth,GetDate())='+Edit1.Text+' and
family_status ='+char(39)+Combobox1.Text+char(39)+' and TypeOrg =
'+char(39)+Combobox3.Text+char(39)+' and sex='+inttostr(RadioGroup1.Itemindex);
- q2.Open;
- form2.FormActivate(Sender);
- q2.Close;
- end;
-
-
-
- end.
 |
Вопрос задал: slai (статус: Посетитель)
Вопрос отправлен: 30 сентября 2010, 11:19
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Мережников Андрей
Здравствуйте, slai!
для того, чтобы показать какой параметр использовать при фильтрации, а какой нет - поставьте рядом с ними CheckBox-ы. При формировании строки запроса используйте их. Примерно так:
s:='';
if CheckBox1.checked
then begin
s:='(DateDiff(year,date_of_birth,GetDate())='+Edit1.Text+')';
end;
if CheckBox2.checked
then begin
if (s='')
then s:='('+family_status ='+char(39)+Combobox1.Text+char(39)+')';
else s:='and('+family_status ='+char(39)+Combobox1.Text+char(39)+')';
end;
и так далее
 |
Ответ отправил: Мережников Андрей (статус: Абитуриент)
Время отправки: 1 октября 2010, 05:50
Оценка за ответ: 5
Комментарий к оценке: Я новечок подскажите пожалуйста куда именно вставлять это в код ?
|
Мини-форум вопроса
Всего сообщений: 4; последнее сообщение — 1 октября 2010, 18:03; участников в обсуждении: 2.
30 сентября 2010, 19:51: Вопрос перемещён из тематического раздела Delphi » Общие вопросы по программированию в раздел Delphi » Программирование баз данных (БД) модератором Ерёмин А.А.
|
Мережников Андрей (статус: Абитуриент), 1 октября 2010, 06:00 [#1]:
лучше оставить формирование запроса только в одном месте - по нажатию кнопки Button1, иначе программа "сойдет с ума", реагируя на каждый "тык" пользователя по элементам управления. О том куда вставить: сначала формируете текст запроса в переменной, затем значение этой переменной присваиваете q2.SQL.text:=s;
|
|
slai (статус: Посетитель), 1 октября 2010, 06:04 [#2]:
Если не сложно напишите пожалуйста подробнее как должно все это выглядеть в коде.
|
|
slai (статус: Посетитель), 1 октября 2010, 08:20 [#3]:
Можно поподробнее это что s:='';?
|
|
Мережников Андрей (статус: Абитуриент), 1 октября 2010, 18:03 [#4]:
s - переменная типа string
procedure TForm2.Button1Click(Sender: TObject);
var s:string;
begin
....
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|