Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.02.06;
Скачать: [xml.tar.bz2];

Вниз

Справочник   Найти похожие ветки 

 
makz ©   (2005-01-05 11:09) [0]

Есть 2 базы, первая основная, в ней, кроме прочего, несколько ссылок (внешний ключ) на вторую. Во второй базе справочник персон(ФИО, дата рожд., адрес и т.п.). Проблема в том, что во 2 базе тысяч 50, и она должна пополнятся. Причем пополняться сразу, если нужного человека в базе нет. После инсерта делается closeopen, что съедает немало времени. Скажите пожалуйста, как по уму все организовать, и ускорить процесс?


 
msguns ©   (2005-01-05 11:17) [1]

Скорее всего под "базами" понимаются таблицы ?
При добавлении в 1-ю, видимо, надо указывать некие персоны, которые могут быть, а могут и не быть в справочнике персон, причем во втором случае приложение дает возможность добавить чела в справочник и после коммита занести его (вернее, ссылку на него, т.е. ID) в поле 1-й таблицы ?


 
makz ©   (2005-01-05 11:20) [2]

Совершенно верно, прошу прощения за неточную формулировку.


 
makz ©   (2005-01-05 11:34) [3]

и еще предполагается работа в сети.


 
msguns ©   (2005-01-05 11:42) [4]

Я бы делал так:
1. Осн.таблица читается запросом (TIBQuery), на который можно ставить любые фильтры, сортировать как угодно и т.д.
2. В осн.запросе персоны "подкачивать" с ФИО (связка со справочником)
3. Ввод-редактирование таблицы через модальную форму НЕ с DB-Aware контролами (назовем ее frmEditRec).
4. Для людей на форме frmEditRec по 2 компонента: TEdit (ReanOnly=true) и кнопка.
5. Для отображения справочника отдельная форма. Справочник также запрос, отображаемый в гриде. Если справочник здоровый, возможно, есть резон сделать его древовидным (не зная сути объекта автоматизации, не могу сказать, что может служить узлами)
6. По нажатию кнопки на форме frmEditRec вызывается модально форма справочника с предустановкой на соотв.ID (тот, который в записи осн.таблицы) и узер может просматривать справочник.
7. На форме справочника есть кнопки "Добавить", "Править" и "Удалить". При добавлении открывется модальная же форма frmEditDir, куда узер вводит нового чела. По завершению ввода идет запрос на добавление в справочник и, если Ok, то возвращается новый ID вместе с ФИО. Эти значения передаются в форму frmEditRec, а frmEditDir закрывается (вместе с запросом).
frmEditRec прописывает полученного чела в соотв.Edit и т.д.

Т.е. таблица справочника открывается только по вызову формы frmEditSpr

Если все это долго, то, возможно, есть смысл датасет сос справочником держать не в форме c гридом спр-ка, а, к примеру, в датамодуле и вообще не закрывать, пока открыт запрос к осн.таблице. При вызове формы спр-ка этот запрос просто переоткрывается, и только потом привязывается с гридом.
Ну и, конечно, надо согласовать транзакции. Так, справочник я бы читал-редактил в одной транзакции, читал осн.таблицу в другой, а изменял бы осн.таблицу в третьей. Кстати, после любого изменения осн.таблицы НД с нею надо, ессно, переоткрывать и перепозиционировать.

Все это выглядит несколько громоздко, но при активном использовании наследования можно программирование существенно оптимизировать, написав базовые классы для наборов данных и модификации используемых для их получения запросов.


 
makz ©   (2005-01-05 12:15) [5]

Спасибо за столь подробный ответ. В принципе все более или менее так и организовано, но проблема в том, что справочник могут пополнять несколько человек, поэтому там две транзакции и closeopen c последующим lokate по ID. И желательно чтобы был инкрементный поиск(сразу знать, есть ли уже такой человек), но тут я думаю придется ФИО и ID выгребать отдельно на клиента.


 
msguns ©   (2005-01-05 12:42) [6]

Я бы не рискнул добавлять сразу более 1 человека (В смысле делать это одной транзакцией) хотя бы потому, что тетя может двоих ввести в формочку и пойти пить чай, а в это время вырубят напругу. В рез-те потеряются и те 2, которых она ввела.


 
makz ©   (2005-01-05 13:12) [7]

В общем справился, скорость более-мене приемлемая. Забыл контролы потключать перед closeoptn :).Потом посмотрел твой ответ про лукап cad2206, и вспомнил. Еще раз спасибо.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2005.02.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.033 c
1-1106074983
D-alone
2005-01-18 22:03
2005.02.06
Быстрое умножение булевых матриц


1-1106580277
Jolik
2005-01-24 18:24
2005.02.06
Какой тип в Delphi соответствует float из VC++ 6.0?


14-1105980997
Никита
2005-01-17 19:56
2005.02.06
Отобразить дерево реестра


14-1105784443
Nous Mellon_
2005-01-15 13:20
2005.02.06
Стапудовый Хит! :)


3-1104973733
Ghost_
2005-01-06 04:08
2005.02.06
генератор отчетов





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