Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Комбо-бокс, значение id 
:(
    Опции темы
nicka
  Дата 28.6.2004, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 11.6.2003

Репутация: нет
Всего: 1



Работаю в Дельфи7

хочу спросить, но для сравнения возьму Access. Там у ComboBox-а есть свойство value, в котором можно хранить id(записи из таблицы), при том это поле в ComboBox - можно закрыть, чтоб не было видно...

Здесь же, у ComboBox есть только свойство Text, допустим я присваиваю ему в ITems значения из таблицы(но куда мне спрятать id записи), оно мне нужно для дальнейшей подстановки выбранной в ComboBox-е записи куда нибудь...........


ДУмаю что кто то уже сталкивлся с подобным...довольно частый случай...подскажите чего делать?
PM MAIL   Вверх
Guest
Дата 28.6.2004, 17:00 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











nicka
А чем не нравиться DBComboBox ?

  Вверх
nicka
Дата 28.6.2004, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 11.6.2003

Репутация: нет
Всего: 1



Цитата
А чем не нравиться DBComboBox ?


нет, мне не нужно постоянное соединение с базой,
и потом мне так легче....

если можно давайте совет имеено по TComboBox smile.gif

PM MAIL   Вверх
Albinos_x
Дата 28.6.2004, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



Цитата
допустим я присваиваю ему в ITems значения из таблицы


Как ты это делаешь?

Говори подгобнее.

Работал с комбобоксом, но id мне не пиходилось прятать, так как и не было видно.


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Guest
Дата 28.6.2004, 21:51 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Код
Procedure get_order_types;
begin
 try
     fm_orders.ord_types.Open;
     while not fm_orders.ord_types.Eof do
     begin
         fm_orders.ord_type.Items.Add(fm_orders.ord_types.FieldByName('ord_type').AsString);
         fm_orders.ord_types.Next;
     end;
     fm_orders.ord_types.Close;   except
   on E: exception do
       begin
           Showmessage(Error: ' + E.message);
           halt;
       end;
   end;
end;

вот так и заполняю....а вот где хранить id записи для дальнейшего использования?
  Вверх
z-END
Дата 28.6.2004, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: 11
Всего: 102



а может создать для этого массив где и хранить их?
и туда записывать значения id, а привязывать по ItemIndex?


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
Albinos_x
Дата 29.6.2004, 01:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



У TTable есть функция RecNo, обозначающая номер записи. Если не собираешся вставлять записи методом Insert (имеется ввиду вставлять в считываемую (fm_orders.ord_types) БД в ComboBox в процедуре использующей RecNo, т.к. номер записи может поменяться, в зависимости от того куда вставляешь, если используешь Append то можно), то в ComboBox свойство ItemIndex будет равно RecNo. Это свойство доступно как для чтения так и для присваивания, т.е. ты можешь как узнать номер активной записи, так и установить указатель на необходимую. Тогда тебе не надо будет хранить id, а считывать их по номеру записи.

Это сообщение отредактировал(а) Albinos_x - 29.6.2004, 02:01


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
nicka
Дата 29.6.2004, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 11.6.2003

Репутация: нет
Всего: 1



Цитата
У TTable есть функция RecNo, обозначающая номер записи. Если не собираешся вставлять записи методом Insert (имеется ввиду вставлять в считываемую (fm_orders.ord_types) БД в ComboBox в процедуре использующей RecNo, т.к. номер записи может поменяться, в зависимости от того куда вставляешь, если используешь Append то можно), то в ComboBox свойство ItemIndex будет равно RecNo. Это свойство доступно как для чтения так и для присваивания, т.е. ты можешь как узнать номер активной записи, так и установить указатель на необходимую. Тогда тебе не надо будет хранить id, а считывать их по номеру записи.


честно говоря не совсем понятно...во первых я не использую TTable , а ипользую TADOQuery, может конечно у него тоже есть RecNo, только я не замечала, чтоб у моего ComboBox ItemIndex совпадал с RecNo запсиси в TADOQuery...???


Цитата
а может создать для этого массив где и хранить их?
и туда записывать значения id, а привязывать по ItemIndex?

вот это думаю можно попробовать, значит создать массив длинной в количество записей у TADOQuery и занести туда ItemIndex (0,1...) и id записи...так?
попробую посмотрим какие еще возникнут проблемы

Хотя странно , что эта проблема(довольно часто нужная в задачах по базам) не как то не удобно решена в Дельфи...

PM MAIL   Вверх
p0s0l
Дата 29.6.2004, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Вместо Items.Add делай Items.AddObject
типа такого будет:
Цитата
Procedure get_order_types;
begin
try
    fm_orders.ord_types.Open;
    while not fm_orders.ord_types.Eof do
    begin
        fm_orders.ord_type.Items.AddObject(fm_orders.ord_types.FieldByName('ord_type').AsString, TObject(fm_orders.ord_types.FieldByName('id').AsInteger));
        fm_orders.ord_types.Next;
    end;
    fm_orders.ord_types.Close;  except
  on E: exception do
      begin
          Showmessage(Error: ' + E.message);
          halt;
      end;
  end;
end;

Если id не integer, то будет посложнее...
Добавлено @ 17:53
Еще забыл сказать, что чтобы получить id i-ого элемента в combobox'е, то так: fm_orders.ord_type.Items.Objects[i]


--------------------
С уважением, г-н Посол.
PM   Вверх
nicka
Дата 29.6.2004, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 11.6.2003

Репутация: нет
Всего: 1



p0s0l, круто, попробую smile.gif

PM MAIL   Вверх
nicka
Дата 30.6.2004, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 11.6.2003

Репутация: нет
Всего: 1



p0s0l
Цитата
fm_orders.ord_type.Items.AddObject(fm_orders.ord_types.FieldByName('ord_type').AsString, TObject(fm_orders.ord_types.FieldByName('id').AsInteger));

это часть работает хорошо...


Цитата
Еще забыл сказать, что чтобы получить id i-ого элемента в combobox'е, то так: fm_orders.ord_type.Items.Objects[i]

а вот эта...не получаеться
вот например мне надо посадить в базу в таблицу значение id выбранной в combobox'е записи...
что мне туда подставить вместо i?

PM MAIL   Вверх
p0s0l
Дата 30.6.2004, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



вместо i надо ставить fm_orders.ord_type.ItemIndex:
Код
var id : integer;
begin
 with fm_orders.ord_type do
   id := integer(Items.Objects[ItemIndex]);
 ... запись в таблицу этого id или какие-там-действия-нужны...
end;



--------------------
С уважением, г-н Посол.
PM   Вверх
nicka
Дата 1.7.2004, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 11.6.2003

Репутация: нет
Всего: 1



p0s0l
Цитата
var id : integer;
begin
with fm_orders.ord_type do
  id := integer(Items.Objects[ItemIndex]);
... запись в таблицу этого id или какие-там-действия-нужны...
end;


попробую, я пробовала без integer, ыи выдавала ошибку не соответствия типов integer и Object...
PM MAIL   Вверх
nicka
Дата 1.7.2004, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 11.6.2003

Репутация: нет
Всего: 1



Цитата
я пробовала без integer


я правда не применяла еще эту функцию,..она что переводит из Object в integer ?
PM MAIL   Вверх
<Spawn>
Дата 1.7.2004, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



nicka Items.Objects[ItemIndex] - это массив указателей на экземпляры классов. В Дельфи при создании экземпляра класса возращается указатель(В Си можно без указателя обойтисьsmile.gif ). В данном случае производится операция явного преобразования типов из типа указателя в integer. Так как указатель занимает 4 байта(столько же занимает и integer), то данная операция вполне уместна. Тем более, что на самом деле там и лежит integer (вставка была такова - TObject(fm_orders.ord_types.FieldByName('id').AsInteger) ), то есть данный указатель не может быть использован по назначению, так как он указывал бы на несуществующие данные.


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0559 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.