Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

DBComboBox [D7, XP]


Sapos ©   (2007-02-15 09:18:00) 

Подскажите, плиз, как наполнять компонент DBComboBox записями из таблицы? Так же в дальнейшем нужно вытаскивать запись из БД в строковую переменную -как это реалезовать?

Спасибо!


Saposo   (2007-02-16 10:42:00) [1]

Заработало, писал не втом обработчике событий.


ЮЮ   (2007-02-16 03:02:00) [2]


> потому как это свойство имеет тип Variant?


Если запрос правильный и компонент правильно настроен, то тот VarType того Variant-а должен быть varString.


Плохиш   (2007-02-15 16:18:00) [3]


> Sapos ©   (15.02.07 14:04) [13]
> Пишет: Could not convert variant into type String. Чё делать?

Надо воспользоваться отладчикам и посмотреть какую же фигню ты туда умудрился запихнуть...


Sapos   (2007-02-15 14:04:00) [4]


> Просто присвой какой-нибудь строковой переменной  получившееся
> значение. Вроде бы Variant должен корректно преобразоваться.
>

Пишет: Could not convert variant into type String. Чё делать?


Astronom   (2007-02-15 13:59:00) [5]

Просто присвой какой-нибудь строковой переменной  получившееся значение. Вроде бы Variant должен корректно преобразоваться.


Sapos   (2007-02-15 13:51:00) [6]


> Тогда это не TDBComboBox, а TDBLookupCombobox
> где ListSource указывает на таблицу "таблиц", DataSource
> - ПУСТОЙ, а значение выбранной строки - в TDBLookupCombobox.
> KeyValue

Спасибо! Только теперь непонятно как DBLookupComboBox.keyValue превратить в строку, потому как это свойство имеет тип Variant?


ЮЮ   (2007-02-15 11:55:00) [7]

Sapos ©   (15.02.07 11:31) [8]

Тогда это не TDBComboBox, а TDB LookupCombobox
где ListSource указывает на таблицу "таблиц", DataSource - ПУСТОЙ, а значение выбранной строки - в TDBLookupCombobox.KeyValue


Desdechado   (2007-02-15 11:44:00) [8]

> но при запуске программы в комбобоксе отображается только первая запись
Просто сделай Last;First;на наборе данных, куда нацелен комбо.


Sapos   (2007-02-15 11:31:00) [9]


> Там свойств сильно много :(  Лучше бы сказал чего ему нужно
> получить от этого комбобокса: какое поле редактирует, зачем
> нужен список, почему не не напрямую, и т.д. и т.п
>


Короче! Мне в принципе не важно, какой комбо бокс использовать (DB или обычный). Мне нужно наполнять его из записями из таблицы с одним полем, записи в этой таблице могут редактироваться (удаляться и добавляться). Для чего? Объясняю: Допустим комбобокс уже наполнен какими-нибудь элементами, я выбираю нужный, нажимаю кнопку и открывается другая таблица (более оширная) с более подробной информацией. Т.е. конкретная запись в простой таблице (с одним полем) соответствует имени более расширенной таблице. Соответственно для открытия большой таблицы нужно вытаскивать текущее значение поля и передавать его в другой Table и присваевать его свойству TableName.


ЮЮ   (2007-02-15 10:33:00) [10]


> Может тебе ДБЛукапКомбобокс нужен?

Там свойств сильно много :(  Лучше бы сказал чего ему нужно получить от этого комбобокса: какое поле редактирует, зачем нужен список, почему не не напрямую, и т.д. и т.п


Sergey13   (2007-02-15 10:24:00) [11]

> [4] Sapos ©   (15.02.07 10:00)

Может тебе ДБ ЛукапКомбобокс нужен?


ЮЮ   (2007-02-15 10:11:00) [12]

TDBComboBox - обычный TDBEdit. Поэтому и показывает значение в текущей строке. Его отличие, что вместо тупого вколачивания текста в символтное поле, можно подготовить выпадающий список и выбирать из него. Эта задача ложится на программиста, сам компонент этого не поддерживает.

Как? Например, выполнить запрос SELECT DISTINCT <текстовое поле> FROM <таблица> и получить список уже имеющихся значений, и заполнить Items. Теперь пользователь сможет не только вводит непосредственно в поле ввода, но и выбирать уже имеющиеся значения


Sapos   (2007-02-15 10:00:00) [13]


> Поиск по выбору с использованием компонента ComboBox.
> 1. Выставьте на форму компонент ComboBox из страницы Standart.
>
> - в свойстве Items  перечислите в столбик возможные виды
> поиска;
> - свойство ItemIndex  установите в 0.
> 2. Рядом с ComboBox выставьте компонент Edit из страницы
> Standart.
> 3. Выделите Edit и перейдите на вкладку Events.
> 4. Двойным щелчком на событии OnChange, создайте процедуру
> обработки:
> procedure TForm6.Edit1Change(Sender: TObject);
> begin
> case ComboBox1.ItemIndex of
> 0: table1.Locate('Kodpodpiski',edit1.Text,[loCaseInsensitive,
> loPartialKey]);
> 1: table1.Locate('Index',edit1.Text,[loCaseInsensitive,loPartialKey]);
>
> end;
> end;

Мне не поиск нужен, мне нужно автоматом наполнять DBComboBox из файла базы данных, при попытке воспользоваться методом LoadFromFile добавляет только последнюю запись...


Sapos   (2007-02-15 09:48:00) [14]

Какие именно свойства? я соединяю компонент с датасоурс но при запуске программы в комбобоксе отображается только первая запись, если список разворачивать, то там пусто. Короче получается, что он тупо отображает текущую запись...


Клара   (2007-02-15 09:46:00) [15]

Поиск по выбору с использованием компонента ComboBox.
1. Выставьте на форму компонент ComboBox из страницы Standart.
- в свойстве Items  перечислите в столбик возможные виды поиска;
- свойство ItemIndex  установите в 0.
2. Рядом с ComboBox выставьте компонент Edit из страницы Standart.
3. Выделите Edit и перейдите на вкладку Events.
4. Двойным щелчком на событии OnChange, создайте процедуру обработки:
procedure TForm6.Edit1Change(Sender: TObject);
begin
case ComboBox1.ItemIndex of
0: table1.Locate('Kodpodpiski',edit1.Text,[loCaseInsensitive,loPartialKey]);
1: table1.Locate('Index',edit1.Text,[loCaseInsensitive,loPartialKey]);
end;
end;


Sergey13   (2007-02-15 09:34:00) [16]

1. Настроить свойства компонента
2. Запись в строку? Это как? Значение поля в строку наверное? FieldByName.AsString


Наверх

Титульная страница Поиск, карта сайта Написать письмо