IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Выпадающий список - ?
сообщение
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 205
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


В базу данных посредством DBEdit вводятся фамилии, которые после ввода отображаются в соответствующем поле DBGrid. Проблема в том что фамилия одного и того же человека не всегда может вводиться правильно. Чтобы этого избежать, вводится дополнительная таблица в MSAccess содержащая только список фамилий. Отсюда вот какой вопрос: возможно ли чтобы при вводе фамилии, появлялось что-то вроде выпадающего списка с фамилиями из таблицы в MSAccess, т.е. допустим набираются начальные буквы - Ива, а в выпадающем списке уже видны все фамилии, начинающиеся на Ива, пользователь видит среди них нужную - Иванов, и выберает ее. Таким образом, в БД всегда вводится правильная фамилия. Есть ли в Delphi компонент, наиболее оптимально отвечающий данным требованиям? Т. к. похоже DBEdit придется заменить потому что для этой цели он не годится?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Бери обычный DBComboBox, вешай ему в источник либо таблицу, либо Query, и по OnDropDown выбирай из источника то, что удовлетворяет уже введенному в Text значению. SELECT-запросы показывал уже десятки раз, LIKE там тоже присутствовало...

Что именно не получается?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Бывалый
***

Группа: Пользователи
Сообщений: 205
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Какие преимущества DBComboBox перед DBLookupComboBox в данной ситуации? На первый взгляд, как мне показалось, DBLookupComboBox удобнее, но почему-то он остается неактивным...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата
Компоненты DBLookup... используются при наличии связанных таблиц, когда необходимо вывести на экран описательную информацию вместо поля, содержащего ее код.
Исходя из твоего описания - у тебя нет никаких кодов, в доп. таблице хранятся собственно фамилии, из которых и будет осуществляться выбор. Так что Lookup здесь ни при чем.

К тому же - в DBLookup - контролах ты можешь только выбрать текст из списка, последовательно вводить что-то у тебя не получится - просто нет поля ввода. А в DBComboBox-е есть.

Цитата
но почему-то он остается неактивным...
значит, неправильно подключил.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Бывалый
***

Группа: Пользователи
Сообщений: 205
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


LIKE это с использованием фильтра да? Почему по OnDropDown нужно выбирать из источника то, что удовлетворяет уже введенному в Text значению, а не по OnChange? Источник нужно указать в Properties или в OnDropDown?
Т.е. в DataSource и DataField я указываю таблицу и поле, куда будет заноситься введенный в DBComboBox1 текст а не источник, так?
Цитата
по OnDropDown выбирай из источника то, что удовлетворяет уже введенному в Text значению

Здесь имеется ввиду введенный текст в поле DBComboBox1?

Сообщение отредактировано: 1147 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






На форме - DBGrid1, отображающий информацию, связанный с ADOTable1 через DataSource1. Также на форме - ADOQuery1, изначально для нее SQLText = 'SELECT * FROM table3' (у меня таблица Table3 содержит список фамилий).

Кладу на форму TDBComboBox, связываю его с тем же DataSource1, который связан с DBGrid-ом, поскольку мне надо, чтобы обновлялась информация в той же, рабочей таблице ADOTable1... У этого комбобокса не забываю установить нужное поле, в которое будет писАться информация. А вот теперь - самое интересное: как, собственно, осуществить сам выбор? А очень просто: при печати в DBComboBox я ничего делать не буду. Буду обрабатывать напечатанное значение по открытию списка, т.е.,

procedure TForm1.DBComboBox1DropDown(Sender: TObject); // нажали на кнопку со стрелкой?
var s: string;
begin
s := 'SELECT * FROM table3';
if Length((Sender as TDbComboBox).Text) > 0 then
s := s + ' where [fio] like ' + QuotedStr((Sender as TDbComboBox).Text + '%');
s := s + ';';

// Переоткрываем запрос с новым SQL
ADOQuery1.Active := false;
ADOQuery1.SQL.Text := s;
ADOQuery1.Active := true;

// А теперь нам надо заполнить выпадающий список теми значениями, которые подходят под введенное:

(Sender as TDbComboBox).Items.Clear; // очищаем старое содержимое

ADOQuery1.First; // идем по всей Query и заносим данные, которые вернулись...
while not ADOQuery1.Eof do
begin
(Sender as TDbComboBox).Items.Add(ADOQuery1.FieldByName('fio').AsString);
ADOQuery1.Next;
end;
end;
Собственно, это - все... Все работает. Единственное, что не происходит - это нельзя при открытом выпадающем списке печатать. Вернее, печатать-то можно, вот обновляться он не будет в момент печатания. Чтоб обновился - надо закрыть и переоткрыть. Хочешь - попробуй повесить это на DBComboBox1Change, тогда при вводе очередного символа будет обновляться выпадающий список. Только вот я не экспериментировал, не знаю, будет ли он опять открываться после обновления, или то на то и выйдет, и его надо будет опять открывать вручную... Пробуй smile.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Бывалый
***

Группа: Пользователи
Сообщений: 205
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


В случае с DBComboBox1DropDown все прекрасно работает, большое спасибо! А то что список не обновляется, это не имеет значения, т. к. в момент печати осуществляется переход на нужную фамилию, поэтому необходимости использования события DBComboBox1Change нет, тем более что в этом случае наблюдается некорректная работа комбобокса - список мало того что не обновляется, так еще и показывает только одну фамилию, после ввода второго символа, курсор переходит в начало.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Where Can I Buy Proventil Inhaler
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






How Many Days Amoxicillin Cat
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






Viagra Ohne Potenzstorung
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






cialis tomar media pastilla
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Бывалый
***

Группа: Пользователи
Сообщений: 155
Пол: Мужской

Репутация: -  0  +


Why not settling on games that is fun and at the same time your earning. Well it'll make suspense because the game is well but dude just try it and it gave me hope while pandemic is real rn. 4 Questions to Ask Yourself Before You Play Casino Online
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.03.2024 4:37
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name