Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 623

/ вопрос открыт /

Здравствуйте, уважаемые эксперты!
На форме находятся компоненты Edit1 в нем вводится возраст, Combobox3 сфера деятельности, Combobox1 семейное положение, RadioGroup1 пол. При указание и выборе из списков информацию в таблице при нажатии кнопки должно показывать только тех кто входит в эти параметры. Что я не так делаю? Еще надо что бы фильтрация проходила не только по всем заданым параметрам, но и когда выбираеш только один. Таблица StringGrid. Данные берутся из sql базы.
Вот данные таблицы:
Фамилия
Имя
Отчество
Домашний телефон
Рабочий телефон
Мобильный телефон
Почта
Дата рождения
Семейное положение
Сфера дефтельности
Пол

К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)

Приложение:
  1. unit Unit2;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs, Grids, DBGrids, DBXpress, FMTBcd, DBClient, SimpleDS, DB,
  8. SqlExpr, ExtCtrls, DBCtrls, StdCtrls;
  9.  
  10. type
  11. TForm2 = class(TForm)
  12. SQLConnection2: TSQLConnection;
  13. Q2: TSQLQuery;
  14. StringGrid2: TStringGrid;
  15. ComboBox1: TComboBox;
  16. Label1: TLabel;
  17. Label3: TLabel;
  18. ComboBox3: TComboBox;
  19. Label4: TLabel;
  20. Edit1: TEdit;
  21. Button1: TButton;
  22. RadioGroup1: TRadioGroup;
  23. CheckBox1: TCheckBox;
  24. CheckBox2: TCheckBox;
  25. procedure FormActivate(Sender: TObject);
  26. procedure Button1Click(Sender: TObject);
  27.  
  28.  
  29.  
  30. private
  31. { Private declarations }
  32. public
  33. { Public declarations }
  34. end;
  35.  
  36. var
  37. Form2: TForm2;
  38.  
  39. implementation
  40.  
  41. {$R *.dfm}
  42.  
  43.  
  44. procedure TForm2.FormActivate(Sender: TObject);
  45. var q:integer;
  46.  
  47. begin
  48. try
  49. Q2.Open;
  50. except
  51. on e:exception do showmessage(e.Message)
  52. end;
  53. stringgrid2.Visible:=false;
  54. stringgrid2.RowCount:=2;
  55. q:=1;
  56.  
  57. while not Q2.Eof do
  58. begin
  59. StringGrid2.Cells[0,0]:= 'Ôàìèëèÿ';
  60. StringGrid2.Cells[1,0]:= 'Èìÿ';
  61. StringGrid2.Cells[2,0]:= 'Îò÷åñòâî';
  62. StringGrid2.Cells[3,0]:= 'Äîìàøíèé òåëåôîí';
  63. StringGrid2.Cells[4,0]:= 'Ðàáî÷èé òåëåôîí';
  64. StringGrid2.Cells[5,0]:= 'Ìîáèëüíûé òåëåôîí';
  65. StringGrid2.Cells[6,0]:= 'Ïî÷òà';
  66. StringGrid2.Cells[7,0]:= 'Äàòà ðîæäåíèÿ';
  67. StringGrid2.Cells[8,0]:= 'Ñåìåéíîå ïîëîæåíèå';
  68. StringGrid2.Cells[9,0]:= 'Ñôåðà äåÿòåëüíîñòè';
  69. StringGrid2.Cells[10,0]:= 'Ïîë';
  70.  
  71. stringgrid2.Cells[0,q]:=Q2.fields[0].AsString;
  72. stringgrid2.Cells[1,q]:=Q2.fields[1].AsString;
  73. stringgrid2.Cells[2,q]:=Q2.fields[2].AsString;
  74. stringgrid2.Cells[3,q]:=Q2.fields[3].AsString;
  75. stringgrid2.Cells[4,q]:=Q2.fields[4].AsString;
  76. stringgrid2.Cells[5,q]:=Q2.fields[5].AsString;
  77. stringgrid2.Cells[6,q]:=Q2.fields[6].AsString;
  78. stringgrid2.Cells[7,q]:=Q2.fields[7].AsString;
  79. stringgrid2.Cells[8,q]:=Q2.fields[8].AsString;
  80. stringgrid2.Cells[9,q]:=Q2.fields[9].AsString;
  81. stringgrid2.Cells[10,q]:=Q2.fields[10].AsString;
  82.  
  83.  
  84. Q2.Next;
  85. inc(q);
  86. stringgrid2.RowCount:=q+2;
  87. end;
  88. stringgrid2.Visible:=true;
  89. if Q2.Active then Q2.Close;
  90.  
  91. combobox1.Clear;
  92. Form2.Q2.SQL.Text:='select DISTINCT family_status from owner';
  93. Form2.Q2.Open;
  94. if Form2.Q2.Active then
  95. begin
  96. Form2.Q2.First;
  97. while not q2.Eof do
  98. BEGIN
  99. Form2.ComboBox1.Items.Add(Form2.Q2.FieldByName('family_status').AsString);
  100. Form2.Q2.Next;
  101. END;
  102. q2.Close;
  103. END;
  104.  
  105.  
  106. combobox3.Clear;
  107. Form2.Q2.SQL.Text:='select DISTINCT typeorg from owner where typeorg='+IntToStr(Combobox3.ItemIndex)+'';
  108. Form2.Q2.Open;
  109. if Form2.Q2.Active then
  110. begin
  111. Form2.Q2.First;
  112. while not q2.Eof do
  113. BEGIN
  114. Form2.ComboBox3.Items.Add(Form2.Q2.FieldByName('typeorg').AsString);
  115. Form2.Q2.Next;
  116. END;
  117. q2.Close;
  118. end;
  119.  
  120.  
  121.  
  122.  
  123.  
  124.  
  125. end;
  126.  
  127.  
  128.  
  129.  
  130.  
  131. procedure TForm2.Button1Click(Sender: TObject);
  132. begin
  133. 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);
  134. q2.Open;
  135. form2.FormActivate(Sender);
  136. q2.Close;
  137. end;
  138.  
  139.  
  140.  
  141. end.


slai Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: 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

slai (статус: Посетитель), 1 октября 2010, 06:04 [#2]:

Если не сложно напишите пожалуйста подробнее как должно все это выглядеть в коде.
slai

slai (статус: Посетитель), 1 октября 2010, 08:20 [#3]:

Можно поподробнее это что s:='';?
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 1 октября 2010, 18:03 [#4]:

s - переменная типа string
procedure TForm2.Button1Click(Sender: TObject);
var s:string;
begin
....

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:41
Выполнено за 0.03 сек.