23 / 23 / 9
Регистрация: 24.04.2010
Сообщений: 220
1

Фильтрация через Combobox

14.05.2010, 10:03. Показов 8705. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здраствуйте, помогите пожалуйста решить следующую задачу. Есть поле со списком должностей например: менеджер, бухгалтер, финансист. Нужно чтобы при выборе одной из должностей в ComboBox, в DBGrid выводились сотрудники только этой должности(т.е происходила филтрация). Компоненты база Access, ADOConnection, ADOTable, DataSourse.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.05.2010, 10:03
Ответы с готовыми решениями:

Фильтрация через ComboBox
Подскажите пожалуйста. Проблема в том, что когда открываешь программу и делаешь фильтрацию, то все...

Как сделать несколько фильтрация(поиск) через ComboBox?
Доброго времени суток. Хотел бы узнать как сделать фильтрацию, либо поиск по 2 Combobox? В моем...

Фильтрация БД с combobox
Делаю фильтрацию по этому видео уроку ...

Фильтрация в Combobox-е
Доброго времени суток. Подскажите пожалуйста есть ли возможность реализовать такую вещь? Есть...

14
714 / 402 / 33
Регистрация: 04.10.2009
Сообщений: 1,686
14.05.2010, 10:32 2
черех SQL-запрос.
Выложите базу - сформируем
0
Тимуровец
445 / 285 / 50
Регистрация: 10.09.2009
Сообщений: 963
14.05.2010, 10:40 3
Вот примерчик со стандартной демо базой:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 337
  ClientWidth = 635
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object DBLookupComboBox1: TDBLookupComboBox
    Left = 482
    Top = 13
    Width = 145
    Height = 21
    KeyField = 'EmpNo'
    ListField = 'FirstName'
    ListSource = DataSource1
    TabOrder = 0
  end
  object DBGrid1: TDBGrid
    Left = 8
    Top = 40
    Width = 619
    Height = 289
    DataSource = DataSource2
    TabOrder = 1
    TitleFont.Charset = DEFAULT_CHARSET
    TitleFont.Color = clWindowText
    TitleFont.Height = -11
    TitleFont.Name = 'Tahoma'
    TitleFont.Style = []
  end
  object ADOConnection1: TADOConnection
    Connected = True
    ConnectionString = 
      'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\dbdemos.mdb;Pers' +
      'ist Security Info=False'
    LoginPrompt = False
    Mode = cmShareDenyNone
    Provider = 'Microsoft.Jet.OLEDB.4.0'
    Left = 48
    Top = 16
  end
  object ADOQuery1: TADOQuery
    Active = True
    Connection = ADOConnection1
    CursorType = ctStatic
    Parameters = <>
    SQL.Strings = (
      'select * from Employee')
    Left = 136
    Top = 16
  end
  object DataSource1: TDataSource
    DataSet = ADOQuery1
    Left = 136
    Top = 64
  end
  object ADOQuery2: TADOQuery
    Active = True
    Connection = ADOConnection1
    CursorType = ctStatic
    DataSource = DataSource1
    Parameters = <
      item
        Name = 'EmpNo'
        Attributes = [paNullable]
        DataType = ftInteger
        NumericScale = 255
        Precision = 255
        Value = 2
      end>
    SQL.Strings = (
      'select * from Orders where EmpNo=:EmpNo')
    Left = 216
    Top = 16
  end
  object DataSource2: TDataSource
    DataSet = ADOQuery2
    Left = 216
    Top = 64
  end
end
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, ADODB, Grids, DBGrids, DBCtrls;
 
type
  TForm1 = class(TForm)
    ADOConnection1: TADOConnection;
    ADOQuery1: TADOQuery;
    DataSource1: TDataSource;
    DBLookupComboBox1: TDBLookupComboBox;
    DBGrid1: TDBGrid;
    ADOQuery2: TADOQuery;
    DataSource2: TDataSource;
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
end.
0
23 / 23 / 9
Регистрация: 24.04.2010
Сообщений: 220
14.05.2010, 10:50  [ТС] 4
Я знаю какой будет текст запроса(таблица всего одна), но не знаю как связать ComboBox и AdoQuery.... Всмысле как это прописать чтобы при выборе в определенного значения в Combobox он ссылался на ранее записанный мной запрос
0
23 / 23 / 9
Регистрация: 24.04.2010
Сообщений: 220
14.05.2010, 11:08  [ТС] 5
Вот база
Вложения
Тип файла: rar на отправку.rar (328.7 Кб, 214 просмотров)
0
912 / 877 / 62
Регистрация: 06.01.2010
Сообщений: 2,367
Записей в блоге: 6
14.05.2010, 11:16 6
Цитата Сообщение от Mogul-kan Посмотреть сообщение
Я знаю какой будет текст запроса(таблица всего одна), но не знаю как связать ComboBox и AdoQuery.... Всмысле как это прописать чтобы при выборе в определенного значения в Combobox он ссылался на ранее записанный мной запрос
TComboBox имеет событие OnChange - создайте обработчик на него.
Если юзер что-то выберет в комбике - сработает обработчик.
В нем вы должны либо наложить фильтр в самом датасете, либо закрыть запрос, переписать SQL с наложением внутреннего фильтра, и открыть запрос вновь.
0
714 / 402 / 33
Регистрация: 04.10.2009
Сообщений: 1,686
14.05.2010, 11:18 7
1. запрос для заполнения комбобокса (можно при прорисовке формы или еще где)
SQL
1
2
3
4
SELECT Kadr.Должность
FROM Kadr
GROUP BY Kadr.Должность
ORDER BY Kadr.Должность;
2-ой запрос по OnChange для комбобокса
SQL
1
2
3
4
SELECT Kadr.Фамилия, Kadr.Имя, Kadr.Отчество, Kadr.Должность
FROM Kadr
WHERE (((Kadr.Должность)="'+form1.combobox1.text+'"))
ORDER BY Kadr.Фамилия, Kadr.Имя, Kadr.Отчество;
Добавлено через 52 секунды
это 2 разных объекта TADOQuery (ADOQuery1 и ADOQuery2)
0
23 / 23 / 9
Регистрация: 24.04.2010
Сообщений: 220
14.05.2010, 11:21  [ТС] 8
2-ой запрос по OnChange для комбобокса, это понятно.... а первый запрос на фому под каким событием прописать?
0
714 / 402 / 33
Регистрация: 04.10.2009
Сообщений: 1,686
14.05.2010, 11:22 9
да хоть OnPaint)
0
Тимуровец
445 / 285 / 50
Регистрация: 10.09.2009
Сообщений: 963
14.05.2010, 11:23 10
Нафига использовать ComboBox если есть уже готовый DBLookupComboBox. Вы хоть пример мой смотрели? Там вообще ничего писать не надо, все работает автоматом.
ПС: ComboBox или DBComboBox принято использовать в случае создания динамического или экзотического списка, когда их из БД взять нельзя. В противном случае это ошибка.
0
714 / 402 / 33
Регистрация: 04.10.2009
Сообщений: 1,686
14.05.2010, 11:27 11
DBLookupComboBox имеет дурную привычку делать сначала поле с текстом пустым...
а ComboBox можно указать
Delphi
1
form1.ComboBox1.itesm.itemindex:=1
или
Delphi
1
form1.ComboBox1.text:='Бухгалтер'
и он сразу обработает свой обработчик. Это просто удобно

Добавлено через 1 минуту
в DBLookupComboBox нельзя добавить пункт "Показать всех", а в ComboBox1 моно
0
23 / 23 / 9
Регистрация: 24.04.2010
Сообщений: 220
14.05.2010, 11:28  [ТС] 12
Ну чтож.... пойду попробую
0
Тимуровец
445 / 285 / 50
Регистрация: 10.09.2009
Сообщений: 963
14.05.2010, 11:31 13
Цитата Сообщение от Андрей Борисови Посмотреть сообщение
DBLookupComboBox имеет дурную привычку делать сначала поле с текстом пустым...
а ComboBox можно указать
Delphi
1
form1.ComboBox1.itesm.itemindex:=1
или
Delphi
1
form1.ComboBox1.text:='Бухгалтер'
и он сразу обработает свой обработчик. Это просто удобно
Конечно будет пустым, ведь таблица приемник не задана и следовательно найти текущую запись автоматом нельзя, но кто мешает обработать эту ситуацию? Это всяко лучше, чем гонять данные из базы в память и обратно, да еще обработчики свои писать.
0
714 / 402 / 33
Регистрация: 04.10.2009
Сообщений: 1,686
14.05.2010, 11:36 14
Цитата Сообщение от Страдалецъ Посмотреть сообщение
но кто мешает обработать эту ситуацию?
ни кто. вот мы и обработали её в ComboBox1.


Добавлено через 1 минуту
шучу. Просто я привык пользоваться ComboBox-ами. т.к. доп. визуальные компоненты на них не замудряюся. А использовать на красивой форме некрасивый стандартный DBLookupComboBox - не стильно
1
Тимуровец
445 / 285 / 50
Регистрация: 10.09.2009
Сообщений: 963
14.05.2010, 11:45 15
Ну видимо это вопрос привычки, а чтобы небыло пустым значение делается просто:
Delphi
1
2
3
4
procedure TForm1.FormActivate(Sender: TObject);
begin
 DBLookupComboBox1.KeyValue := DBLookupComboBox1.ListSource.DataSet.Fields[0].AsInteger
end;
1
14.05.2010, 11:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.05.2010, 11:45
Помогаю со студенческими работами здесь

фильтрация с combobox
Всем приветик! Возникла проблемка..надеюсь что поможете решить Есть dGrid и combobox, который...

ComboBox и фильтрация записей
Здравствуйте, покажите пожалуйста, как сделать фильтрацию в зависимости от комбобокса. Т.е....

Фильтрация ComboBox + RadioButton
У меня есть 7 RadioButton для выбора дня недели, по выбору фильтруются таблица procedure...

Фильтрация с использованием ComboBox и CheckBox.
Помогите сделать фильтрацию с использованием ComboBox и CheckBox - Delphi БД


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru