Форум по 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.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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