Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
8-1119960584
Grief
2005-06-28 16:09
2005.11.20
Изменение цветов TBitmap;


2-1130410496
kosha
2005-10-27 14:54
2005.11.20
Перегрузка виртуального метода


2-1129024633
DancerMan
2005-10-11 13:57
2005.11.20
Как отобразить страничку, хранящююся в BLOB,с помощь WebBrowser?


2-1131095842
dreamse
2005-11-04 12:17
2005.11.20
Подскажите функцию добавление копеек к сумме


14-1130352465
Gero
2005-10-26 22:47
2005.11.20
Гениальность дизайна





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский