Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как получить список уникальных значений поля БД ?


Алексей ©   (2003-07-25 15:38:00) 

Имеется в виду, что некое поле БД содержит различные значения (например: а б а и к е е в а б к) и надо в комбо-бокс засунуть список этих значений (каждого по 1-му: а б в е и к)... Что-то вроде того, как это сделано в TDBLookupXXXXX. В исходнике этого самого лукапа я этот момент найти не смог :(

ЗЫ: Это нужно для того, чтобы сделать что-то вроде TDBFilterComboBox- если для этого можно использовать какой-либо стандартный DB контрол, то хотелось бы узнать какой именно и как ?


Алексей   (2003-07-27 20:24:00) [1]


> VAleksey © (25.07.03 18:16)
> Через фильтр ты не сделаешь.

Имелось ввиду, что выбранное в боксе значение будет использоваться для создания фильтра :)

> KDS ©

Т.е. только полным перебором всех значений ? А побыстрее никак ?

Оки, спс :)


KDS   (2003-07-25 18:20:00) [2]

не через вильтр, а вручную... Типа этого
procedure TEngineDM.ReloadMakers(var cbx: TComboBox);
var FirstVal,CurVal:AnsiString;
begin
if LoadMakersIBQ.Active then LoadMakersIBQ.Refresh
else LoadMakersIBQ.Open;
LoadMakersIBQ.First; cbx.Clear;
FirstVal:=LoadMakersIBQ.FieldByName(""dm_name"").AsString;
while not LoadMakersIBQ.Eof do begin
CurVal:=LoadMakersIBQ.FieldByName(""dm_name"").AsString
( CurVal)

не через вильтр, а вручную... Типа этого
procedure TEngineDM.ReloadMakers(var cbx: TComboBox);
var FirstVal,CurVal:AnsiString;
begin
if LoadMakersIBQ.Active then LoadMakersIBQ.Refresh
else LoadMakersIBQ.Open;
LoadMakersIBQ.First; cbx.Clear;
FirstVal:=LoadMakersIBQ.FieldByName(""dm_name"").AsString;
while not LoadMakersIBQ.Eof do begin
CurVal:=LoadMakersIBQ.FieldByName(""dm_name"").AsString
if FirstVal<>CurVal then cbx.Items.Add(CurVal);
FirstVal:=CurVal;
LoadMakersIBQ.Next;
end;
cbx.ItemIndex:=0;
end;

только НД должен быть отсортирован по полю "dm_name"


VAleksey   (2003-07-25 18:16:00) [3]


> Алексей © (25.07.03 17:54)

Через фильтр ты не сделаешь.
А в комбобокс легко.


procedure TForm1.Button1Click(Sender: TObject);
var t:TStringList;
begin
t := TStringList.Create;
t.Sorted := true;
t.Duplicates := dupIgnore;
t.AddStrings(ComboBox1.Items);
ComboBox1.Items.Clear;
ComboBox1.Items.AddStrings(t);
t.Free;
end;


Алексей   (2003-07-25 17:54:00) [4]

Нету TQuery для TinyDB... Посему и надо через Filter делать. :(


KDS   (2003-07-25 15:58:00) [5]

к TDBLookupCombobox привяжи не TTable, а TQuery, где в SQL
select distinct... from ...


Наверх

Титульная страница Поиск, карта сайта Написать письмо