Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.07.2012, 21:52   #1
Vit@L
Форумчанин
 
Аватар для Vit@L
 
Регистрация: 24.06.2009
Сообщений: 216
По умолчанию Как присвоить значение DBLookupComboBox'у?

Привет всем. Вот столкнулся с такой проблемой. Всегда использовал компонент RxDBLookUpComboBox все было отлично, все работало как надо. А тут решил поставить компоненты AlphaControls, ну для того чтобы красить свою программулину. Поставил так же AlphaDB, в котором тоже есть компонента DBLookupComboBox. Итак появились следующие проблемы:

1. При раскрытии списка, видна только первая запись, хотя в RX боксе, был виден весь список, т.е. если в табличке 100 записей, то они все были видны в нем. Помогает только следующая строка DataSet.Last; Можно ли как то это решить без перевода датасета на последнюю запись?

2. К примеру когда мне надо было чтобы в Rx боксе появилась фамилия Иванов и я не знаю под каким номером она в таблице. Я делал раньше так:
Код:
RxDBLookupComboBox1.Value:='Иванов';
все работало отлично. Сейчас же, мало того что нет такого свойства Value, так я попробовал присвоить 'Иванов' свойству Text, и тут же получил ошибку. Как быть в этой ситуации? Как присвоить значение?

Кстати, эти же проблемы появляются и со стандартным Lookup'ом. Почему же так получается что Rx-овский лукап, работает по другому, причем так как мне надо? И как можно решить вышеописанные проблемы.
Заранее премного благодарен!!!
Водку мы пьем для запаха - а дури нам своей хватает!
Vit@L вне форума Ответить с цитированием
Старый 23.07.2012, 20:38   #2
Vit@L
Форумчанин
 
Аватар для Vit@L
 
Регистрация: 24.06.2009
Сообщений: 216
По умолчанию

Неужели никто не сталкивался с подобным?
Водку мы пьем для запаха - а дури нам своей хватает!
Vit@L вне форума Ответить с цитированием
Старый 24.07.2012, 07:46   #3
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

Цитата:
Сообщение от Vit@L Посмотреть сообщение
Неужели никто не сталкивался с подобным?
Судя по количеству ответов - никто.
Сдался вам этот ДБЛюкяп...
Возьмите обычный комбобокс (альфаконтроловский ли) и заряжайте его чем хотите. Проще не бывает.
Проблемы иногда можно не решать, а обойти, если их решение затягивается.
Скандербег вне форума Ответить с цитированием
Старый 24.07.2012, 19:43   #4
Vit@L
Форумчанин
 
Аватар для Vit@L
 
Регистрация: 24.06.2009
Сообщений: 216
По умолчанию

Цитата:
Сообщение от Скандербег Посмотреть сообщение
Возьмите обычный комбобокс (альфаконтроловский ли) и заряжайте его чем хотите.
А можно по подробней? Как это реализовать?
Водку мы пьем для запаха - а дури нам своей хватает!
Vit@L вне форума Ответить с цитированием
Старый 24.07.2012, 20:02   #5
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

Например, так:
Код:
procedure TDM.ChargeCB(CB: TComboBox);
begin
  CB.Items.Clear;
  qrC.Open;
  try
    while not qrC.Eof do begin
      CB.AddItem(qrC.FieldValues['Country'],
                        TObject(qrC.FieldByName('ID').AsInteger));
      qrC.Next;
    end;
  finally
    qrC.Close;
  end;
end;
Где qrC DataSet (IBQuery, ADOQuery и др. с соответствующим запросом SELECT, а также IBTable, ADOTable и пр.).
В таблице, данные из которой попадают в комбобокс, должен быть идентификатор (уникальное значение каждой строки). Здесь он назван ID.

Поиск строки в комбобоксе по идентификатору, если его значение известно:
Код:
I := CB.Items.IndexOfObject(TObject(IdC));
В I - номер позиции в списке комбобокса, где найден идентификатор.

Значение идентификатора в строке комбобокса, которую выбрал пользователь:
Код:
ID := Integer(CB.Items.Objects[CB.ItemIndex]);

Последний раз редактировалось Скандербег; 24.07.2012 в 20:15. Причина: Добавлено
Скандербег вне форума Ответить с цитированием
Старый 24.07.2012, 20:27   #6
Vit@L
Форумчанин
 
Аватар для Vit@L
 
Регистрация: 24.06.2009
Сообщений: 216
По умолчанию

Скандербег, спасибо за пример. Только вот я не совсем разобрался как сне сделать так, чтобы при выборе некоторого значения в комбобоксе, курсор в DataSet'e автоматически устанавливался бы на выбранную позицию. Т.е. к примеру у меня список пользователей программы. При выборе к примеру Иванова И.И., датасет нашел бы эту запись в таблице?
И еще я не понял что такое IdC? компилятор ругается.
Заранее премного благодарен.
Водку мы пьем для запаха - а дури нам своей хватает!
Vit@L вне форума Ответить с цитированием
Старый 24.07.2012, 20:39   #7
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

Цитата:
И еще я не понял что такое IdC? компилятор ругается.
Ну, правильно, это же пример, который выдернут из проекта. IdC - целочисленная переменная, по значению которой нужно найти в комбобоксе строку. Это если такая фишка нужна.

Для того чтобы датасет устанавливался на выбранную в комбобоксе позицию надо взять из списка Items.Objects комбобокса записанное ранее значение идентификатора (ID). В предыдущем посте показано как (Integer(CB.Items.Objects[CB.ItemIndex]).
По полученному значению идентификатора переставить позицию в датасете.

Фамилия (как в примере авторского поста) не может претендовать на роль поискового критерия, т.к. могут быть однофамильцы. Поэтому нужно использовать уникальные идентификаторы строк.

Только непонятно, что это за список и как он связан с упоминаемым датасетом, а потому конкретно советовать не получится.
Скандербег вне форума Ответить с цитированием
Старый 24.07.2012, 21:14   #8
Vit@L
Форумчанин
 
Аватар для Vit@L
 
Регистрация: 24.06.2009
Сообщений: 216
По умолчанию

Скандербег, и все же я не совсем понял как сделать так, чтобы датасет устанавливался на выбранную в комобоксе позицию. Можно пример пожалуйста???
Спасибо!
Водку мы пьем для запаха - а дури нам своей хватает!
Vit@L вне форума Ответить с цитированием
Старый 24.07.2012, 21:34   #9
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

Для совета нужна более полная информация.
Датасет какой? Тип его. ADOTable, ADOQuery или что-нибудь другое?
Повторю вопрос. Что находится в комбобоксе и как он по логике связан с датасетом, позиция в котором должна передвигать позицию в датасете?
И, все же, какая СУБД?

Если в какой-то мере абстрактно, то в Датасете должен быть метод Locate, с помощью которого можно позиционировать указатель (позицию) в нем. Именно идентификатор и поможет это сделать.
Но это если Датасет имеет такой метод. Пока же ничего не известно.

Последний раз редактировалось Скандербег; 24.07.2012 в 21:38.
Скандербег вне форума Ответить с цитированием
Старый 24.07.2012, 21:40   #10
Vit@L
Форумчанин
 
Аватар для Vit@L
 
Регистрация: 24.06.2009
Сообщений: 216
По умолчанию

Все разобрался
Код:
i:=Integer(sComboBox1.Items.Objects[sComboBox1.ItemIndex]);
pfibdataset1.Locate('ID', i, [loCaseInsensitive, loPartialKey]);
Спасибо большое!!!
Водку мы пьем для запаха - а дури нам своей хватает!
Vit@L вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как присвоить ячейке значение пикселя? player891 Общие вопросы Delphi 1 15.03.2012 18:28
как присвоить букве постоянное значение? Garik007 Microsoft Office Excel 1 04.03.2012 19:55
как в Delphi присвоить полю DBEdit целочисленное значение поля из DBText (как правильно )? ГОСЕАН Помощь студентам 0 10.01.2012 06:12
как присвоить значение??? VintProg Общие вопросы C/C++ 1 05.08.2011 15:21
Как присвоить значение функции? boris-blade Microsoft Office Word 3 17.01.2010 17:09