Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-34898
sagchat
2003-06-01 11:03
2003.06.12
У меня на форме 5 Edit как мне сохранить из них текст в файл


3-34739
Юлия
2003-05-23 19:05
2003.06.12
Уникальный индекс


1-34779
MegaVolt
2003-06-02 11:24
2003.06.12
Как передавать параметры из модальной формы в основную прогу?


1-34873
spater
2003-05-31 15:24
2003.06.12
Создание отчета


3-34723
kozovoy
2003-05-22 13:52
2003.06.12
После завершения программы она остается как процесс.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский