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

 
TDBLookupComboBox
xrenok
Отправлено: 09.03.2004, 14:30


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

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



Позволяет ли TDBLookupComboBox вводить произвольные значения? У меня возможен только выбор из списка заданного в свойстве ListSource.
olegenty
Отправлено: 09.03.2004, 16:56


Ветеран

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



Ну будет надо — введёшь. Например, на Событие OnCloseUp добавишь, если ввод произвольного значения в поле возможен. Одна беда, тебе придётся обновить соответствующие наборы данных. Например, если в разных транзакциях работаешь.

Грязно, но это будет примерно так:

CODE
void __fastcall LookupCloseUp(TObject *Sender)
{
   if (<Функция, проверяющая наличие значения (Lookup->Text.Trim())>)
   {
        1 Вывести диалог, если он необходим при вводе для уточнения неких значений
        2 Вставить запись
        3 Обновить наборы данных после коммита, даже если всё происходит в контексте одной транзакции (это уж тебе виднее, как и что)
   }
}
xrenok
Отправлено: 09.03.2004, 18:23


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

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



То есть, не позволяет?

Мне требуется ввести в текущее поле таблицы значение, которое является одним из введенных ранее значений в это поле. Т.е. запрос для ListSource выглядит так

select POLE1 from TBL1 group by POLE1 order by POLE1

и в поле POLE1 мне и требуется ввести значение. Либо одно из введенных ранее, либо новое.
olegenty
Отправлено: 10.03.2004, 08:21


Ветеран

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



Я это делаю иначе, чем ты. Я не пользуюсь TDBLookupComboBox, у меня просто текстовое поле и проверка, написанная программно. В данном случае (у меня), речь идёт о документе. Если такой есть, я подставляю возвращаемый функцией проверки идентификатор. Иначе, возникает форма ввода документа, вводятся дополнительные реквизиты и подставляется идентификатор вновь созданного документа. Минус — я прописал это руками (то есть потратил время), и, каждый раз идёт запрос на сервер (потому что буферизирующую классовую прослойку я ещё не написал). Плюс — я вынес метод в некий утилитный класс, и пользуюсь им везде, где мне нужно проверить наличие документа по коду.
xrenok
Отправлено: 10.03.2004, 11:37


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

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



У меня задача иная и более простая. Выбрать одно из существующих значений данного поля в таблице.
Пришлось использовать DBComboBox и заполнять его элементами в цикле.
Но возникла другая проблема. Значение выбранное в DBComboBox сохраняется только при потере фокуса DBComboBox . Но если просто закрыть окно (крестиком), то сохранение в базе не происходит. Не подскажешь как сохранить изменения сразу после выбора из списка в DBComboBox?
olegenty
Отправлено: 10.03.2004, 13:21


Ветеран

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



Подскажу. Воспользуйся TRxLookupEdit — он это сделает...

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