Форум: "Базы";
Текущий архив: 2003.06.12;
Скачать: [xml.tar.bz2];
ВнизDBComboBox Найти похожие ветки
← →
Юлия (2003-05-24 19:47) [0]как сделать выпадающий список из значений определенного поля?
Например, есть таблица клиент, из списка фамилий выбираем нужную - отображаются сведения из таблицы (пусть даже этой же).
Почему, если ставлю DbComboBox (прописываю datasource и datafield), он отображает одну запись, и не хочет "Выпадать"?
← →
Engel (2003-05-24 20:17) [1]А зачем из этой же? почему бы повторяющиеся значения не вынести в отдельную таблицу?
Вам в этом случае нужен dblookupcombobox - другой компонент.
там есть свойство listsource - из него добавляется список. Но если таблица одна и та же - он Вам все равно не даст этого сделать, потому что получается циклическая ссылка.
Вам или лучше сделать справочные данные в отдельную таблицу, или использовать DbComboBox (или просто ComboBox) заполняя список самой с помощью запроса.
procedure TChanMonForm.TypeCBDropDown(Sender: TObject);
begin
with querytyp do begin
close;
sql.add("select distinct nametyp from typ order by sorttyp");
open;
first;
typecb.items.clear;
while not eof do
typecb.items.add(fieldbyname("nametyp").asstring);
next;
end;
end;
типа такого - на событие выпадания списка
← →
I_C_E_ (2003-05-24 20:19) [2]Используй DBLookupComboBox
← →
Юлия (2003-05-24 21:28) [3]Engel: а как определять, какую запись выбрал пользователь? А если несколько одинаковых фамилий клиента? Поле неуникальное!
I_C_E_ : а как использовать? Это же для связи master-detail. А у меня все в одной таблице, и нормализовать нет смысла...
← →
Engel (2003-05-24 21:38) [4]Тогда опишите подробно задачу. А то непонятно, зачем Вам знать, какую запись выбрал пользователь, если у Вас все в одной таблице.
Поле-то уже заполняется, если Вы кого-то выбрали.
Если несколько одинаковых фамилий - на то distinct в запросе.
← →
I_C_E_ (2003-05-24 21:46) [5]Придется формировать таблицу с Фамилиями клиентов если не хотите нормализовать .
← →
Юлия (2003-05-24 21:55) [6]Структура таблицы: Фамилия клиента, номер полиса, дата полиса...
Я хочу сделать выпадающий список с фамилиями клиента. И выпадающий список с номерами полиса. (для удобной навигации)
Выбирается фамилия - отображается соответсвующий номер полиса, и все данные ("дата полиса...")
Выбирается номер полиса - отображается для него фамилия и все остальное.
Если несколько одинаковых фамилий, то вашим методом в списке будет одна запись. Допустим, пользователь выбирает ее. Какие данные отобразятся в остальных элементах управления? Номер полиса, например, для какого из однофамильцев?
Если поставить DBLookupComboBox и указать только datasource и datafield, то... работает, но только для одного поля - фамилия, почему-то.
← →
Юлия (2003-05-24 22:05) [7]Как работает DBComboBox? Какой смысл его вообще использовать, если заполнять его надо вручную. только чтоб отображать текущее значение? А если нужно выбрать значение из списка, как таблица узнает об этом? связь со значениями таблицы существует?
← →
I_C_E_ (2003-05-24 22:05) [8]Вы хотиде невыполнимое по не уникальному ключу найти уникальную запись. Выдавайте все возможные с возможностью выбора из них.
← →
Engel (2003-05-25 00:03) [9]>Допустим, пользователь выбирает ее. Какие данные отобразятся в остальных элементах управления? Номер полиса, например, для какого из однофамильцев?
Поняла задачу. А так у Вас не получится... Этот компонент только для вставки значения в поле. (по крайней мере я других способов не нашла).
А я делала так:
type TVypAr = array of longint;
var sp_typ:TVypAr;
//динамический массив
procedure TChanMonForm.TypeCBDropDown(Sender: TObject);
var i:integer;
begin
with dmm.sqtyp do begin
close;
commandtext:="select * from typ order by sorttyp";
open;
first;
typecb.items.clear;
sp_Typ:=nil;
setlength(Sp_Typ,recordcount);
i:=0;
while not eof do
begin
typecb.items.add(fieldbyname("nametyp").asstring);
sp_typ[i]:=fieldbyname("idtyp").asinteger;
next;i:=i+1;
end;
end;
end;
procedure TChanMonForm.TypeCBCloseUp(Sender: TObject);
begin
if typecb.ItemIndex <> -1 then t_sstypmon:=inttostr(sp_typ[typeCB.ItemIndex]);
...и дальше с помощью этой переменной фильтруете набор данных или переходите к этой записи по уникальному ключу в таблице.
...
end;
Или просто без динамического массива отбираете в наборе все записи с этой фамилией.
Вместо запроса как у меня можно пролистывать саму таблицу.
Но. Это хорошо, если у Вас 10 записей в таблице. А если 10 тысяч? Лучше сортируйте сам набор данных. Сделайте индекс с сортировкой по фамилии и индекс по полису. Можно обработчиком клика по заголовку менять сортировку... Свойство индекс у таблицы есть.
А для поиска по большому массиву лучше заводить данные для поиска руками в окошко. Тогда можно сделать следующим образом: отсортировать набор по фамилии и перейти на первую из них, и дальше они все будут рядом по списку - или поставить фильтр по введенному на набор данных, вывести этот маленький список отобранных фамилий в грид и по передвижению по нему где-то сбоку отображать подробные данные для одного из них. В гриде же достаточно оставить только поле с фамилией.
Вот.
А dbcombobox нужен, когда Вы выбираете значение поля из заранее определенного списка.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.06.12;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.012 c