Форум: "Базы";
Текущий архив: 2006.05.28;
Скачать: [xml.tar.bz2];
Вниз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 вся ветка
Форум: "Базы";
Текущий архив: 2006.05.28;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.017 c