Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 27.09.2011, 09:01
delphicoding delphicoding вне форума
Активный
 
Регистрация: 04.07.2011
Сообщения: 206
Репутация: -461
Вопрос Фильтр выпадающих списков типа ComboBox

Здравствуйте!

Из БД в Dataset приходит некая таблица данных. Есть 3 поля для ввода типа "выпадающий список" - DBLookupCombo, DBComboBox, итд.
Задача - используя 1 Dataset вывести в 3 разных выпадающих списка три разных списка по признакам (с использованием фильтра):
Поле1 все записи где А=1, Поле2 все записи где Б=2, Поле3 все записи где В=3

В настройках данных полей фильтров не нашёл. Подскажите, пожалуйста, как это можно сделать?
Ответить с цитированием
  #2  
Старый 27.09.2011, 09:19
Аватар для Delphist
Delphist Delphist вне форума
Новичок
 
Регистрация: 10.12.2010
Адрес: Курган
Сообщения: 68
Репутация: 6002
По умолчанию

А на Х тебе тогда фильтр понадобился, SQL запрос чего тебе надо.
Ответить с цитированием
  #3  
Старый 27.09.2011, 09:48
chainik chainik вне форума
Начинающий
 
Регистрация: 30.06.2008
Сообщения: 140
Репутация: 8882
По умолчанию

я для себя изобрел процедуру которая принимает SQL запрос и заполняет ComboBox.Items (или любой объект типа TStrings)
у меня это оформлено в виде dll и я просто подключаю ее к проекту
попробуй, может понравится
Код:
{----------------------------------------------------
    процедура заполняет ComboBox.Items,
    DBGrid.PickList
-----------------------------------------------------}
procedure SetItems(IBDB:TIBDataBase;List:TStrings;SQLstr:shortstring);stdcall;
var
IBQ:TIBQuery;
begin
IBQ:=TIBQuery.Create(IBDB.Owner);
IBQ.Database:=IBDB;
with IBQ do    //заполн. PickList
    begin
    SQL.Text:=SQLstr;
    Open;
//    First;
    List.Clear;
    while not eof do
        begin
        if Fields[0].AsString <> '' then
            List.Add(Fields[0].AsString);
        Next;
        end;
    Close;Destroy;
    end;    //with
end;
Ответить с цитированием
  #4  
Старый 27.09.2011, 10:43
delphicoding delphicoding вне форума
Активный
 
Регистрация: 04.07.2011
Сообщения: 206
Репутация: -461
Вопрос

Цитата:
Сообщение от Delphist
А на Х тебе тогда фильтр понадобился, SQL запрос чего тебе надо.
Нельзя поставить SQL запрос в свойства выпадающего списка. Изменять SQL запрос связанного Dataset также нельзя, тк все 3 списка отображаются на одной форме одновременно. Поэтому и нужно нечто вроде фильтра для этих списков...
Цитата:
Сообщение от chainik
я для себя изобрел процедуру которая принимает SQL
Спасибо за пример и код! В данном случае библиотека не нужна, хватит невизуального компонента FIBQuery + половины этого кода.

Может можно как-то всё же с Dataset и фильтром?
Ответить с цитированием
  #5  
Старый 27.09.2011, 10:59
Аватар для Delphist
Delphist Delphist вне форума
Новичок
 
Регистрация: 10.12.2010
Адрес: Курган
Сообщения: 68
Репутация: 6002
По умолчанию

ты что то дружок паришся вокруг трех сосен, верней трех списков. кинь ты три query и привяжи к каждому, а фильтрация очень тупая вещь)))
Ответить с цитированием
  #6  
Старый 27.09.2011, 11:09
delphicoding delphicoding вне форума
Активный
 
Регистрация: 04.07.2011
Сообщения: 206
Репутация: -461
По умолчанию

Очень тупой это похоже ты.

Вопрос задан как задан, если тебе сказать нечего - не парь своим бредом.
Ответить с цитированием
  #7  
Старый 27.09.2011, 11:36
Аватар для Delphist
Delphist Delphist вне форума
Новичок
 
Регистрация: 10.12.2010
Адрес: Курган
Сообщения: 68
Репутация: 6002
По умолчанию

А вот кто туп, дак это ты с таким вопросам! меняя фильтрацию в одном датасет он поменяет данные во всех боксах! дак то тут своим бредом парит???
Ответить с цитированием
  #8  
Старый 27.09.2011, 12:00
chainik chainik вне форума
Начинающий
 
Регистрация: 30.06.2008
Сообщения: 140
Репутация: 8882
По умолчанию

Трудностей не понял. Моя процедура никак не затрагивает твой запрос поскольку динамически создает свой компонент IBQuery. На экране ничего не изменяется.
Ну не хочешь так- вот второй способ.
Пробегаешь свой запрос и разбрасываешь Items по разным DBComboBox
Впрочем есть и третий-кидаешь на форму 3 IBQuery и привязываешь их к твоим DBComboBox (совет Delphist)

Код:
1:
 {
SetItems(IBDataBase1,DBComboBox1.Items,'SELECT Family WHERE A=1');
SetItems(IBDataBase1,DBComboBox2.Items,'SELECT Family WHERE A=2');
SetItems(IBDataBase1,DBComboBox3.Items,'SELECT Family WHERE A=3');
  }

2:
procedure SetItems;
begin
with Form1,IBQuery1 do
while not Eof do
    begin
        case FieldByName('A').AsInteger of
        1:DBComboBox1.Items.Add(FieldByName('Family').AsString);
        2:DBComboBox2.Items.Add(FieldByName('Family').AsString);
        3:DBComboBox3.Items.Add(FieldByName('Family').AsString);
        end;    //case
    Next
    end;
end;

Последний раз редактировалось chainik, 27.09.2011 в 12:03.
Ответить с цитированием
  #9  
Старый 27.09.2011, 16:47
delphicoding delphicoding вне форума
Активный
 
Регистрация: 04.07.2011
Сообщения: 206
Репутация: -461
По умолчанию

Цитата:
А вот кто туп, дак это ты с таким вопросам! меняя фильтрацию в одном датасет он поменяет данные во всех боксах! дак то тут своим бредом парит???
ОМГ! Не в Datasaet фильтрация нужна, а "отобразить лишь нужные строки из общей таблицы" - то есть фильтр в выпадающем списке, никак не влияющий на Dataset!!!



Ещё мелкий простой вопрос по ходу - как правильно писать строку вида, только универсально для любого числа:
Поле1.Enabled:=Кнопка1.Pressed;
Поле2.Enabled:=Кнопка2.Pressed;
Поле[X].Enabled:=Кнопка[X].Pressed; ?
Поле+[X].Enabled:=Кнопка+[X].Pressed; ?
То есть как в коде использовать в названиях объектов цифры-номера?
Можно ли использовать маски автоподстановки в коде, то есть чтобы для последних двух строк не писать вообще само число, а работало универсально?
Ответить с цитированием
  #10  
Старый 28.09.2011, 13:34
delphicoding delphicoding вне форума
Активный
 
Регистрация: 04.07.2011
Сообщения: 206
Репутация: -461
По умолчанию

Уточните, пожалуйста - Filter в Dataset как работает? Фильтрует ПОЛУЧЕННЫЕ записи, или же строка фильтра добавляется к запросу в БД?
Пример - получил Dataset таблицу данных, применили фильтр, что произошло с данными? все неподходящие под фильтр данные совсем убраны из Dataset или же просто не передаются в DataSource ?
При изменении фильтра будет повторный запрос Select? или будет проведена выборка из первоначальной таблицы данных?
Ответить с цитированием
  #11  
Старый 28.09.2011, 13:36
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

TDataSet их "не пропускает"
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #12  
Старый 28.09.2011, 15:54
delphicoding delphicoding вне форума
Активный
 
Регистрация: 04.07.2011
Сообщения: 206
Репутация: -461
По умолчанию

Кстати, профессионалы, а ведь у DBComboBox за одним из [+] настройки скрывается Filter! Может это то, что нужно???
В связи ч ем возникает вопрос - есть ли какие-либо реальные преимущества у DBLookupCombo который без Filter ???
Ответить с цитированием
  #13  
Старый 28.09.2011, 16:03
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

покажи скрин? и перестань путать DBComboBox и DBLookupCombo.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #14  
Старый 28.09.2011, 16:06
delphicoding delphicoding вне форума
Активный
 
Регистрация: 04.07.2011
Сообщения: 206
Репутация: -461
По умолчанию

Я их не путаю, это 2 разных компонента, только почему-то в проекте использованы оба вперемешку...
http://wiki.delphi-jedi.org/wiki/JVC...ettings.Filter
У этого компонента есть параметры: DataSource и ListSettings -> DataSource, там же и на том же уровне находится и ListSettings -> Filter

Смотрим скрин, удивляемся, офигиваем, благодарим за просвещение
Вложения
Тип файла: zip TJvDBComboBox.zip (27.3 Кбайт, 16 просмотров)

Последний раз редактировалось delphicoding, 28.09.2011 в 16:14.
Ответить с цитированием
  #15  
Старый 28.09.2011, 16:18
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

а..а, уже TJvDBComboBox. пожалуй я не буду смотреть скрин...
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:32.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025