Вниз
Скачать: CL | DM;

ComboBox и Базы данных   Найти похожие ветки 

 
beglec ©   (2006-04-03 15:57) [0]

Пример:

База данных имеет 10 значений.
Сормировался CB по выборке из базы. Всего 3 значения. Значение формируется сложно Типа: Ф+И+О+кв.+машина+картонка.
Пользователь выбрал какое либо из предложенных значений.

Требуется перейти на нужную запись взависимости от выбранного пункта в CB.

Разбирать обратно сформированное значение долго и глупо!
В данный момент я формирую отдельный массив
Типа
ID - Integer;
Text - String;

string отображаю - а по ID перехожу по записям в таблице
Но это сложно, но легче чем первый вариант, типа создать массив, сформировать, формировать CB, освободить память CB и тд. другие проблемы связанные с этим.

А другой способ, попросче есть?
Типа что то Items[0].Tag  или в таком же духе?
Как можно обыграть такую ситуацию?

P.S. CB- ComboBox


 
Sergey13 ©   (2006-04-03 16:07) [1]

2 beglec ©   (03.04.06 15:57)
Есть еще DBComboBox и DBLookupComboBox. Почему бы ими не воспользоваться?


 
Johnmen ©   (2006-04-03 16:08) [2]

ComboBox.AddItem("xxx",pointer(<тут твой ID для пункта CB>));

А ежели более одной записи по конкретному  Ф+И+О+кв.+машина+картонка ?


 
beglec ©   (2006-04-03 16:16) [3]


> Johnmen ©

не используется по многим соображениям, а главное - нет прямой связи с DB есть только инфа о записи и ее ID


> DBComboBox

одна запись = одной записи
по крайней мере пока так обстоит дело.


ComboBox.AddItem("xxx",pointer(<тут твой ID для пункта CB>));

А как потом от туда читать ?


 
Johnmen ©   (2006-04-03 16:39) [4]


> А как потом от туда читать ?


ComboBox.AddItem + F1


 
Vlad ©   (2006-04-03 16:56) [5]


> beglec ©   (03.04.06 16:16) [3]


Добавить в комбобокс:

var
 P: PInteger;
....

 New(P);
 P^ := <ID_записи_типа_integer>;
 ComboBox.AddItem("Ф+И+О+кв.+машина+картонка", TObject(P));


Считать из комбобокса:

 ID := PInteger(ComboBox.Items.Objects[i])^;

Не забыть при закрытии формы освободить память из-под указателей


 
beglec ©   (2006-04-03 16:58) [6]


> Vlad ©

спасибо
а то я из справки ничего не понял !


 
Johnmen ©   (2006-04-03 17:21) [7]


> Vlad ©   (03.04.06 16:56) [5]


Не, так крутить я бы не стал. Не тот случай...
CB.AddItem("xxx", pointer(ID));
ID:=integer(CB.Items.Objects[i]);


 
Vlad ©   (2006-04-03 17:26) [8]


> Johnmen ©   (03.04.06 17:21) [7]


> pointer(ID)


а что тогда ID в данном случае? Локальная переменная, глобальная или поле класса? Т.е. нужны какие-то гарантии что она не убьется в памяти раньше времени...


 
Johnmen ©   (2006-04-03 17:34) [9]


> Vlad ©   (03.04.06 17:26) [8]
> а что тогда ID в данном случае? Локальная переменная, глобальная
> или поле класса? Т.е. нужны какие-то гарантии что она не
> убьется в памяти раньше времени...


ID - integer переменная.
Её значение, приведённое к поинтеру, записано в поле айтема объекта TStrings.
Убьётся вместе с убиением айтема. Раньше не получится... :)


 
Vlad ©   (2006-04-03 18:00) [10]


> Johnmen ©   (03.04.06 17:34) [9]


А, ну да, ты ж не указатель пишешь а саму переменную. Перепутал.

Зато [5] способ годится не только для Integer, но и для Double и других типов (это я автору) :-)



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.026 c
2-1147368301
Vitalik__
2006-05-11 21:25
2006.05.28
string


2-1147461468
Viconia
2006-05-12 23:17
2006.05.28
Посмотрите, плиз, запрос...


6-1138795143
Phoenix9000
2006-02-01 14:59
2006.05.28
Удаление и копирование файлов на сетевой ресурс


2-1147068883
mctarik
2006-05-08 10:14
2006.05.28
Список служебных слов в Delphi и функция Подсветки синтаксиса!


3-1143869964
Некто
2006-04-01 09:39
2006.05.28
ФИО или Ф, И и О?




   Наверх