Форум: "Базы";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];
ВнизВыбор из справочника Найти похожие ветки
← →
Ascer (2005-10-06 16:00) [0]Уж не знаю , возможно это вопрос для "Основной". Хотел спросить как ALL осуществляет выбор из справочников. Сейчас поясню. Надо заполнить некие данные на человека(да неважно на что). По ходу дела надо выбирать некоторые значения из справочников. Я обычно использовал для этого ComboBox и его клоны. Справочники, естественно, находятся в БД. То есть оператор либо пишет от руки (обязательное условие) и значение выбирается из итемсов comboboxа, либо распахивает весь список и мышкой находит нужное. Когда количество строк в справочнике превышает некоторое значение, начинаются во-превых тормоза с открытием формы(надо ведь наполнить все comboboxы, а их может быть N) и второе - противоречие с принципами работы клиент-серверной технологии, ведь тянуть приходится весь справочник. Вот и вопрос, кто чем пользуется для решения этой проблемы?
← →
Курдль © (2005-10-06 16:08) [1]Выдавать юзеру сначала окно критериев выбора, потом - поиск в базе запросом.
А из оставшихся - можно и мышкой в таблице.
← →
msguns © (2005-10-06 16:13) [2]Для отображения в гриде что-то типа этого:
SELECT C.ID, C.BNAME, C.TID, C.BCLTNAME, C.BCLTVOL, C.THID, C.PYEAR, C.PID, C.PHID,
C.BINVNUM, C.BPRICE, C.BDATEIN, C.BDATEOUT, C.BAVAIL, C.CID, C.UID, C.ONUM, C.SNUM,
C.BADDR, C.BSTORR, C.BSTORB, C.BSTORS, C.BSTORN, C.BAUTORS, C.BANNOT, C.BMOVINFO,
T.TYPENAME, TH.THEMNAME, P.PUBNAME, PH.PHNAME, CN.CONDNAME, U.USERFIO, U.USERDEP
FROM
(((((CTLG C LEFT JOIN DTHEME TH ON (C.THID = TH.ID))
LEFT JOIN DTYPE T ON (C.TID = T.ID))
LEFT JOIN DPUB P ON (C.PID = P.ID))
LEFT JOIN DPHOUSE PH ON (C.PHID = PH.ID))
LEFT JOIN DCOND CN ON (C.CID = CN.ID))
LEFT JOIN DUSER U ON (C.UID = U.ID)
Для инсерта-апдэйта "навороченных" записей, т.е. где множество полей, в т.ч. связанных со справочником, предпочитаю вместо редактирования в гриде юзать модальные формы, где можно вполне комфортно и наглядно расположить ВСЕ поля записи.
Для выбора из справочников можно использовать комбобоксы (если справочник небольшой по объему, то все его записи просто вкачиваются в список, из которого юзер и выбирает) либо кнопки для открытия опять же модальных форм со справочниками (большие по объему или кол-ву вспомогательных полей спр-ки) с возможностью как выбора, так и вставки или изменения в самом спр-ке.
Есть еще "псевдо-справочник", который я, к примеру, весьма полюбляю, т.к. он не требует таблицы. Собственно, справочник - это всего лишь набор неповторяющихся значений некоторого поля основной таблицы. Весьма неплох для объектов, у которых не может быть много варианнтов значений.
Если юзер добавляет новое значение, после поста всей записи справочник просто автоматически будет "пополнен".
← →
Desdechado © (2005-10-06 18:31) [3][0]
тормоза, имхо, не от впихивания в комбо, а от обращения к таблицам справочников
если справочники открыть сразу все при загрузке программы, а не режима, то в режим будешь влетать
справочники меняются редко, поэтому такой буфер вполне допустим
← →
jiny (2005-10-06 21:59) [4]В принципе есть другой метод :
1) создать форму для стандартного справочника, где можно вписать только общие для всех справочников процедуры и функции, пример :
содержание : toolbar, dbgridEh c двуми колонками (код, наименование),panel,button, actionlist, назовем форму SprStandard;
2) определиться что именно будет возвращать на форму, вызвавшею ее (пример : код, наименование)
3) создать в public фрейма переменную типа Tform or Tframe, в зависимости от того куда будет возвращаться результат.
пример :
public
TmpDestination: Tframe;
TmpQr: TIbquery;
а вот что нужно прописать на кнопку "Добавить" :
begin
(TmpDestination.findComponent("lblCod") as Tlabel).Caption:=Tmpqr.fieldByName(MyGrid.Columns[0].FieldName).AsString;
(TmpDestination.findComponent("lblName") as Tlabel).Caption:=Tmpqr.fieldByName(MyGrid.Columns[1].FieldName).AsString;
close;
end;
4) создать фрейм "выбор , допустим, города" (содержание фрейма : lblCod,LblName типа TLabel) назовем фрейм FreSelectCity
добавим кнопочки BtnAdd,BtnClear, где на BtnAddOnclick
впишем :
Application.createForm(TSprStandard,SprStandard);
with SprStandard do
begin
TmpQr:=qrCity (допустим что это таблица городов)
{тут же можно назначить свой поисковик из actionlist фрема,
либо сделать запрос открытия таблицы отсюда}
MyGrid.Colums[0].Fieldname:="num_cty" (это будет идентификатор)
MyGrid.Colums[1].Fieldname:="name_cty" (это будет наименование)
TmpDestination:=FreSelectCity;
Showmodal;
end;
6) расположим фрем FreSelectCity на требуемой форме и запускаем программу
Это вкратце, ну чем мог помог, надеюсь :)
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.048 c