C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Выбор поля для запроса к БД
mh2003
Отправлено: 06.02.2004, 16:53


Ученик-кочегар

Группа: Участник
Сообщений: 5



Есть форма на ней лежат компоненты ComboBox1, IBQuery1.
Заполняю список ComboBox1 данными из таблицы БД
ComboBox1->Items->Clear();
while(! IBQuery1->Eof)
{
ComboBox1->AddItem(IBQuery1->FieldByName("FIRMA")->AsString, (TObject *)IBQuery1->FieldByName("ID_FIRM"));
IBQuery1->Next();
}

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

Я пытаюсь сделать так
int i = ComboBox1->ItemIndex;//определяем выбранную строку

IBQuery1->Params->ParamByName("CUSTOMER")->AsInteger =(int) ComboBox1->Items->Objects[i];//присваиваем параметру CUSTOMER значение поля ID_FIRM(целое число)

Почему то код не работает.Возвращает совсем другое значение.

Кто знает поиогите.
Valdemar
Отправлено: 06.02.2004, 17:19


Мастер участка

Группа: Участник
Сообщений: 433



QUOTE
IBQuery1->Params->ParamByName("CUSTOMER")->AsInteger =(int) ComboBox1->Items->Objects[i];

Вы расцениваете значение Objects[i] как int, а Objects[i] является указателем на объект. Поэтому надо писать так (если я не ошибаюсь smile.gif ):
CODE
IBQuery1->Params->ParamByName("CUSTOMER")->AsInteger =*(int*) ComboBox1->Items->Objects[i];
olegenty
Отправлено: 18.02.2004, 10:04


Ветеран

Группа: Модератор
Сообщений: 2412



Есть вообще намного более тривиальное решение: использовать компонент TRxLookupEdit из библиотеки RXLib. Для освещённой проблемы нет ничего проще. Тем более, если набор данных велик, твоё решение будет тормозить при заполнении (я сам так делал раньше), в то время как TRxLookupEdit отработает быстро.

Вернуться в Работа с базами данных в C++Builder