![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.
![]() ![]() |
![]() |
1147 |
![]()
Сообщение
#1
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 205 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
В базу данных посредством DBEdit вводятся фамилии, которые после ввода отображаются в соответствующем поле DBGrid. Проблема в том что фамилия одного и того же человека не всегда может вводиться правильно. Чтобы этого избежать, вводится дополнительная таблица в MSAccess содержащая только список фамилий. Отсюда вот какой вопрос: возможно ли чтобы при вводе фамилии, появлялось что-то вроде выпадающего списка с фамилиями из таблицы в MSAccess, т.е. допустим набираются начальные буквы - Ива, а в выпадающем списке уже видны все фамилии, начинающиеся на Ива, пользователь видит среди них нужную - Иванов, и выберает ее. Таким образом, в БД всегда вводится правильная фамилия. Есть ли в Delphi компонент, наиболее оптимально отвечающий данным требованиям? Т. к. похоже DBEdit придется заменить потому что для этой цели он не годится?
|
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Бери обычный DBComboBox, вешай ему в источник либо таблицу, либо Query, и по OnDropDown выбирай из источника то, что удовлетворяет уже введенному в Text значению. SELECT-запросы показывал уже десятки раз, LIKE там тоже присутствовало...
Что именно не получается? |
1147 |
![]()
Сообщение
#3
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 205 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Какие преимущества DBComboBox перед DBLookupComboBox в данной ситуации? На первый взгляд, как мне показалось, DBLookupComboBox удобнее, но почему-то он остается неактивным...
|
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Цитата Компоненты DBLookup... используются при наличии связанных таблиц, когда необходимо вывести на экран описательную информацию вместо поля, содержащего ее код. Исходя из твоего описания - у тебя нет никаких кодов, в доп. таблице хранятся собственно фамилии, из которых и будет осуществляться выбор. Так что Lookup здесь ни при чем.К тому же - в DBLookup - контролах ты можешь только выбрать текст из списка, последовательно вводить что-то у тебя не получится - просто нет поля ввода. А в DBComboBox-е есть. Цитата но почему-то он остается неактивным... значит, неправильно подключил. |
1147 |
![]()
Сообщение
#5
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 205 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
LIKE это с использованием фильтра да? Почему по OnDropDown нужно выбирать из источника то, что удовлетворяет уже введенному в Text значению, а не по OnChange? Источник нужно указать в Properties или в OnDropDown?
Т.е. в DataSource и DataField я указываю таблицу и поле, куда будет заноситься введенный в DBComboBox1 текст а не источник, так? Цитата по OnDropDown выбирай из источника то, что удовлетворяет уже введенному в Text значению Здесь имеется ввиду введенный текст в поле DBComboBox1? Сообщение отредактировано: 1147 - |
volvo |
![]()
Сообщение
#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, тогда при вводе очередного символа будет обновляться выпадающий список. Только вот я не экспериментировал, не знаю, будет ли он опять открываться после обновления, или то на то и выйдет, и его надо будет опять открывать вручную... Пробуй ![]() |
1147 |
![]()
Сообщение
#7
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 205 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
В случае с DBComboBox1DropDown все прекрасно работает, большое спасибо! А то что список не обновляется, это не имеет значения, т. к. в момент печати осуществляется переход на нужную фамилию, поэтому необходимости использования события DBComboBox1Change нет, тем более что в этом случае наблюдается некорректная работа комбобокса - список мало того что не обновляется, так еще и показывает только одну фамилию, после ввода второго символа, курсор переходит в начало.
|
buy cialis online no prescriptio |
![]()
Сообщение
#8
|
Гость ![]() |
Where Can I Buy Proventil Inhaler
|
how long does gabapentin stay in |
![]()
Сообщение
#9
|
Гость ![]() |
How Many Days Amoxicillin Cat
|
is gabapentin a controlled subst |
![]()
Сообщение
#10
|
Гость ![]() |
Viagra Ohne Potenzstorung
|
how long does it take for propec |
![]()
Сообщение
#11
|
Гость ![]() |
cialis tomar media pastilla
|
nishaknapp |
![]()
Сообщение
#12
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 155 Пол: Мужской Репутация: ![]() ![]() ![]() |
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
|
![]() ![]() |
![]() |
Текстовая версия | 7.04.2025 6:10 |