Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
PRIKOL
0 / 0 / 0
Регистрация: 18.11.2009
Сообщений: 64
1

Фильтрация в таблицах БД

28.11.2010, 21:32. Просмотров 1019. Ответов 1
Метки нет (Все метки)

Помогите пожалуста. Буду очень благодарен. Не могу довести до ума, а нужно срочно.
Предположим я создал две таблицы на Database Desktop
Таблица 1:
kompania (компания)
Поля:
Название поля - Тип поля
ID_Kompania - + (Auto increment)
Kompania - тип Alpha
и т.д.

Таблица 2:
tarif (тариф)
Поля:
Название поля - Тип поля
ID_Tarif - + (Auto increment)
Name - тип Alpha
Kompania_ID - тип Number
Stoim_tarifa - тип Money
и т.д.

в одной компании получается много тарифов
ID_Kompania -> Kompania_ID


Ind_Kompania



Теперь собственно о Delphi. Кидаю на datamodule: два Table, два DataSourse и 2 Query- один для сортировки и другой для фильтрации, а также 2 DataSourse для Qeury1 и Query2. Для каждой из таблиц, ну и т.д. ставлю на форму два DBGrid , в первом у меня выводятся все компании, а во втором мне надо чтоб отображались для конкретного компании только его тарифы(то есть для кокретного выделенного в DBGrid1 компании на DBGrid2 отображались только его тарифы)- это сделал с помощью связи таблиц, но вот как сделать чтоб сортировка тарифов и фильтрация тарифов бралась именно для конкректной компании, а не всех компаний? и чтоб после сортировки и фильтрации можно было переходить на DBGrid1 и DBGrid2 - и чтоб там правильно отображались данные ?
например в DBGrid1 записаны 3 компании:
1компания) К1
2) К2
3) К3
а в DBGrid2 записаны тарифы этих компаний:
в К1(первой компании) 3 тарифа с названиями:
1) a
2) b
3) c
в К2(второй компании) 4 тарифа с названиями:
1) z
2) x
3) a
4) d
в К3(третьей компании) 2 тарифа с названиями:
1) r
2) t
предположим произвошу фильтрацию во второй компании(К2) в DBGrid2 и ввожу вLabeledEdit15 тариф "a", нажимаю на кнопку фильтра и в DBGrid2 появляется "а" и "а", тоесть берутся данные и из К1, а должны браться только из К2 - как это испарвить?

предположим произвошу сортировку во второй компании(К2) в DBGrid2 и выбираю в RadioGroup3 сортировкать по "Name" и по "Desc", нажимаю на кнопку "сортировать" и в DBGrid2 появляется не только тарифы второй компании(К2), но и тарифы К1 и К3,тоесть данные берутся из всех 3-1х компаний, адолжны браться только из К2 - как это испарвить?

Помогите пожалуста. Буду очень благодарен.
Код вот такой:
Фильтрация по наименованию:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
begin
with DataModule3.Query2 do
begin
SQL.Clear();
//if StrToInt(DataModule3.Tarif.FieldValues['Kompania_ID'])=StrToInt(DataModule3.Kompania.FieldValues['ID_kompania']) then
SQL.Add('SELECT * From "Tarif.db" WHERE (Name=:Name)');
Params[0].AsString:=LabeledEdit15.Text;
ExecSQL();
Active:=true;
end;
DBGrid2.DataSource:=DataModule3.DataSource2;
end;
Фильтрация по стоимости:
Delphi
1
2
3
4
5
6
7
8
9
10
11
begin
with DataModule3.Query2 do
begin
SQL.Clear();
SQL.Add('SELECT * From "Tarif.db" WHERE (Stoim_tarifa=:Stoim_tarifa)');
Params[0].AsInteger:=StrToInt(LabeledEdit16.Text);
ExecSQL();
Active:=true;
end;
DBGrid2.DataSource:=DataModule3.DataSource2;
end;
Сортировка:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
begin
     case RadioGroup3.ItemIndex of
            0: Col:='Name';
            1: Col:='Stoim_tarifa';
    end;
    case RadioGroup4.ItemIndex of
    0: Dir:='Asc';
    1: Dir:='Desc';
  end;
with DataModule3.Query1 do
begin
SQL.Clear();
SQL.Add('SELECT * FROM "Tarif.db" ORDER BY '+Col+' '+Dir);
ExecSQL();
Active:=true;
end;
DBGrid2.DataSource:=DataModule3.DataSource1;
DBNavigator2.DataSource:=DataModule3.DataSource1;
end;
Помогите пожалуста. Буду очень благодарен.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.11.2010, 21:32
Ответы с готовыми решениями:

Фильтрация в таблицах
Надо сделать так что при выборе должности (к примеру водитель,красным на рисунке) в 1 таблице...

Синхронное передвижение в таблицах
Привет всем! Ребята есть 2 таблицы DBGrid, использую 3 компонента DataSource, AdoQuery и...

Перенос полей в таблицах
проблема заключается в том что при создании БД в Access были созданы и связи между таблицами,...

Combobox в связанных таблицах
Господа, подскажите есть два комбобокса, в один из них загоняются значения полей из таблицы 1,...

Фильтр в связанных таблицах
Есть две таблицы - Сотрудники и Трудовая книжка.Связь один-ко-многим. Нужно осуществить поиск в...

1
SAMZ
1261 / 704 / 61
Регистрация: 21.12.2009
Сообщений: 2,255
29.11.2010, 11:38 2
Из твоих странноватых тексттов и пожеланий я понял, что тебе надо отображать два набора, связанных по принципу мастер - деталь (1:N). Причем, если в первом наборе выбрана некотороая запись, то второй (дочерний) набор должен содержать только записи, относящиеся к выбранной записи мастер таблицы. Далее, насколько можно понять используешь ты парадокс. Я с ним лет 10 не работал, поэтому вопрос Number - это целое или вещественное число. Если вещественное, то описание поля Kompania_ID меняй, оно должно бфть целым.
Далее, забудь про привычку задавать текст SQL на этапе исполнения. Это прием можно использовать, когда это действительно необходимо. Здесь такого не вижу. Поэтому на этапе разработки задаешь тексты SQL. Для первого (мастер) набора
SQL
1
2
SELECT * FROM kompania K
ORDER BY K.Kompania
Для второго набора задаешь
SQL
1
2
SELECT * FROM Tarif.db T
WHERE T.Kompania_ID  = :Kompania_ID
Параметр Kompania_ID описываешь также на этапе разработки в редакторе параметров.
Далее объекты TQuery, содержащие селективные запросы открываешь методом Open, а не ExecSQL
Для первого запроса пишешь обработчик события AfterScrool, в котором задаешь значение параметра второго набора и переоткрываешь его
Delphi
1
2
3
Query2.ParamByName('Kompania_ID').AsInteger := Query1.FieldByName('ID_Kompania ').AsInteger;
Query2.Close;
Query2.Open;
В первом приближении так!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.11.2010, 11:38

Создание связей в таблицах
Как связать таблицы в Interbase так чтобы потом при вводе данных в делфи по коду марки выводились...

Заморочки со счетом в таблицах
Добрый день эксперты в делфи! У меня возникла проблемка, не обижайтесь если по вашему мнению буду...

Сохранение значения в таблицах
Добрый день , проблема в том, что при заполнении dbEdit все сохраняется в базе данных, но отчет...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru