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

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

Вопрос простой, аж смешно по DBComboBox


Rule ©   (2004-12-10 16:08:00) 

значит надо такой комбобокс чтобы содержимое его небыло привязнао к источнику БД, а список заполнялся из источника из определенного поля ...
DBComboBox и DBLookupComboBox  это немного другое, в первом случае, содержимое, это из источника, а список выпадающий, статические значения а во втором случае и первое и второе из бд берется ....

конечно есть обходные пути, типа при открытии датасета и при его изменении заливались значения ...

но мож есть другие варианты ?


Submarine   (2004-12-14 08:02:00) [1]

Ну и соответственно вначале обьявить
type
   TIDD = class
   Iobject: integer;
      end;


Submarine   (2004-12-14 08:01:00) [2]

Ну самый простой способ и наиболее рациональный, когда нужно воспользоваться записями помещеными в Combobox, а именно брать не имена а коды этих обьектов (например таблица в нем 2 поля Id, Name), и мы хотим видеть в Combobox Name, а подставлять id, используйте обьекты:
 fmdtmdl.help.sql.Add('Select *');
 fmdtmdl.help.sql.Add('From CATALOGCONTENT');
  irec:=0;
   with fmDTMDL.help do
 begin
   open;
   while not EOF do
   begin
     Combobox1.items.add(FieldByName('name').AsString);
     idd:=tidd.create;
     idd.Iobject := FieldByName('ID').value;
   ComboBox1.Items.Objects[IRec] := idd;
      irec:=irec+1;
     next;
      end;
    end;
А использовать запись, вернее ее код
i1:=Tidd(ComboBox1.Items.Objects[ComboBox1.ItemIndex]).Iobject


ЮЮ   (2004-12-14 05:16:00) [3]

> значения а во втором случае и первое и второе из бд берется

Cм. Vemer ©   (10.12.04 18:50) [7]
Выпадающий список - обязательно, а DataSource и DataField могут ьыть незаполнены, в этом случае получаешь именно то, что тебе надо


Rule   (2004-12-11 12:08:00) [4]

Соловьев ©   (10.12.04 19:01) [8]
так  мне как раз наоборот надо тоесть содержимое не должно быть привязано к бд, тоесть оно мне надо только для анализа, в принципе решение предложено
Vemer ©   (10.12.04 18:50) [7]

2 Dell3r ©   (11.12.04 10:32) [9]
а как же случаи изменения добавления, и редактирования .... не предусмотрено и вот вторая часть как раз не надо чтобы в таблице позиционровалось на записи, просто не нада ...

2 DSKalugin ©   (10.12.04 18:40) [6]
ну это извините прямо в лоб, спасибо конечно за совет, но в принципе до этого так и делал ... хотелось бы более эффективные способы найти ...


Dell3r   (2004-12-11 10:32:00) [5]

Form.OnCreate
with Table2 do
 begin
   Close;
   IndexName:='';
   Open;
   while not EOF do
    begin
     ComboBox1.Items.Add(FieldByName('NameOld').AsString);
// в комбобокс добавляются все записи из колонки NameOld.
     Next;
    end;
   First;
 end;

ComboBox1.OnChange
//для отображения в Гриде записи с номером выбранным в Комбобоксе
 with ComboBox1 do   begin
  if ItemIndex <> -1 then
     if not Table2.Locate('NameOld', Items[ItemIndex], []) then  
    ShowMessage(Items[ItemIndex -1] + 'Последняя запись');  end;


Соловьев   (2004-12-10 19:01:00) [6]

DBComboBox ... это немного другое, в первом случае, содержимое, это из источника, а список выпадающий, статические значения

Нутак и заполни их программно


Vemer   (2004-12-10 18:50:00) [7]

В похожих случаях использую DBLookupComboBoxс незаполненным DataSource и ручками пихаю его .KeyValueкуда надо. Работает на ура.


DSKalugin   (2004-12-10 18:40:00) [8]


Procedure Field2ComboBox(var fld:TFIBStringField; cbm:TComboBox);
var bkm:TBookmark; // (c)DSKalugin
begin
  cbm.Clear;
  bkm:=fld.DataSet.GetBookmark;
  fld.DataSet.DisableControls;
  fld.DataSet.First;
  try
  while not fld.DataSet.EOF do begin
    cbm.Items.Add(fld.AsString);
    fld.DataSet.Next;
  end;
  cbm.ItemIndex:=0;
  fld.DataSet.GotoBookmark(bkm);
  finally
    fld.DataSet.EnableControls;
    fld.DataSet.FreeBookmark(bkm);
  end;
end;

Вызывать так
Field2ComboBox(fmDM.tbSellListSELLER_NAME, cbSellist);


Leksiy   (2004-12-10 16:55:00) [9]

ересь сжечь ... тебе же ответили по человечески заполняй его програмно из одно таблицы что тебя не устраивает ? нормально скажи


Rule   (2004-12-10 16:43:00) [10]

отвечаю всем сразу так как у все ответ одинаковый :)))
и его я написал в воросе
конечно есть обходные пути, типа при открытии датасета и при его изменении заливались значения ...

но если других предложений нет, то проще будет свой комбобокс написать, наследник от TComboBox
:)))
ну в принципе я так и думал


Соловьев   (2004-12-10 16:35:00) [11]

DBComboBox ... это немного другое, в первом случае, содержимое, это из источника, а список выпадающий, статические значения

Нутак и заполни их программно


Dmitriy O.   (2004-12-10 16:35:00) [12]

Tcombobox.item.add()


Johnmen   (2004-12-10 16:30:00) [13]

TComboBox
:)


Наверх

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