![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как заполнить список ListBox-а значениями двух полей...??? [D5, Oracle]
Бульбаш © (2002-04-05 19:22:00)Хочу использовать ListBox для выбора значений поля. Можно ли забить Items значениями двух полей другой базы: ключевого, которое будет вносится в текущую базу при выборе значения из списка, и просмотрового, которое будет отображаться непосредственно при открытии списка. Если возможно то прошу плиз приблизительный набросок кода.
И еще вопрос: хочу попробовать ODAC 3.6. Наш адинистратор предупредил, что некорректно отрабатывает oratable (в эмуляции запроса не проставляется где-то пробел). Если кто столкнулся с этой проблемой, подскажите как решить???
Леха (2002-04-10 15:27:00) [1]Есть такой набор компонент Rx, в них RxDBLookupCombo, RxLookupEdit, ... - все реализуется. Если интересно - могу выслать дистрибутивы.
ne (2002-04-10 05:39:00) [2]я делал проще
1. обявлял наследника от Tobject
2. прописывал там нужные мне поля
3. перед вставкой инит объекта
4. вставляешь обЪект
5. по итеминдекс возвращаешь обект и читаешь данные
Леха (2002-04-09 12:11:00) [3]Странно что у тебя не работает комбобокс я для этих целей пользуюсь такой фунцией попробуй
function GetObj(CB:TComboBox):integer;
begin
Result:=-1000;
if CB.ItemIndex<>-1 then Result:=integer(CB.Items.Objects[CB.ItemIndex]);
end;
wicked в клиент-сервере зачастую действительно выгоднее прочитать данные и пользоваться ими чем использовать Data Aware компоненты и гадать в какой трансакции они будут работать и чего заблокируют
Lusha (2002-04-09 12:08:00) [4]>Бульбаш
Используйте CachedUpdates...
wicked (2002-04-09 12:06:00) [5]твоё дело... с oracle я не работал...
но вот еще способ - для простого combobox"а завести массив ключей где-нибудь отдельно и при выборе элемента из combobox"а брать соответствующий элемент из массива... например, я использовал в качестве массива TList - он хранит pointer"ы, но нам никто не мешает хранить там integer"ы, главное - не забывать об этом... заполнять их надо вместе при активизации формы - для того случая, если данные справочника поменяются во время выполнения программы... и не вздумай сортировать items"ы combobox"а после заполнения...
надеюсь, детали сам продумаешь...
Бульбаш (2002-04-09 11:51:00) [6]Как раз таки на лукапах у меня сейчас все и построено, но хочу отойти от локальных методов ( из-за блокировок таблиц).Задумка такая: Все данные ввести в edit и combobox, а затем снять значения в качестве параметров запросов insert или update. Сам понимаю, что гиморно, а как можно по другому. Не давать же .Edit или .Insert. Это же все-таки клиент-серверная технология.
wicked (2002-04-09 10:22:00) [7]2 Бульбаш ©
> Я понимаю, что извернуться можно крупно, но есть ли какой-нибудь
> простой и действенный способ заставить combobox вернуть
> нужное мне значение???
есть... называется TDBLookupComboBox...
Johnmen (2002-04-09 09:25:00) [8]Вообще непонятно, зачем так гиморроить, когда есть специальные Data-Aware компоненты, напр. DBComboBox и куча др. !
Бульбаш (2002-04-09 09:06:00) [9]Я понимаю, что извернуться можно крупно, но есть ли какой-нибудь простой и действенный способ заставить combobox вернуть нужное мне значение???
dymka (2002-04-08 22:02:00) [10]Я долго не думал в подобной ситуации - написал наследника для TComboBox, куда по тупому загонял оба поля, определив внутри еще Keys: TStringList :) Задача была точно такая же... Естественно, у меня ComboBox инициализировался только спец методом и не отображал актуальных данных (мне это было не нужно :).
Бульбаш (2002-04-08 21:55:00) [11]Спасибо, попробовал сделать - вылезла проблема: в listbox все нормально, а в combobox не могу выцепить значение ключевого поля.
код приблизительно такой:
DBKuz.Items.AddObject(DM.KuzovNAIM.asString, pointer(DM.KuzovKOD.AsInteger));
Значение пытюсь получить так:
kz:=integer(Avto.DBKuz.Items.Objects[DBKuz.ItemIndex]);
В итоге значение всегда одно и тоже, а нужно использовать именно combobox. Не подскажете, в чем дело???
Alexander Vasjuk (2002-04-05 19:36:00) [12]Index := Items.Add("Отображаемое значение");
Items.Objects[Index] := Pointer(Key); // Key: Integer
-----------------------------------------------------
Key := Integer(Items.Objects[ListBox.ItemIndex])