Правильная организация интерфейса базы данных
В этом есть свои плюсы, но как выяснилось минусов тоже достаточно.
Просто база сначала планировалась однопользовательской, а терь плавно переходит в много....
Возник вопрос, а не лучше ли было использовать обычные элементы, заполняя их при открытии, и записывая при нажатии на ок?
Имеется в наличии довольно большая база данных, при этом очень активно использованы элементы закладки DataContlols.
В этом есть свои плюсы, но как выяснилось минусов тоже достаточно.
Просто база сначала планировалась однопользовательской, а терь плавно переходит в много....
Возник вопрос, а не лучше ли было использовать обычные элементы, заполняя их при открытии, и записывая при нажатии на ок?
А в чем разница? Если ты конечно не используешь компоненты типа TTable - тогда сочувствую. А так в принципе контролсы никакого отношения к одно - или многопользовательскому доступу не имеют. Их задача отображать данные из сформированного рекорсета - а формируют его не они. Опиши более подробно проблему - тогда можно будет сказать - что проще. Лучше конечно заполнять самому, это если задача не сложная или уж очень специфичная. Если же это вполне обычная задача и еще и разрабатывается на лету - лучше не изобретать велосипед - выиграш сомнителен.
А в чем разница? Если ты конечно не используешь компоненты типа TTable - тогда сочувствую.
использую DBTable
фишка в том, что может быть открыто много форм, и возникает проблема с поступлением информации из одной формы в другую. поэтому при активации формы - идет переактивация запроса формы, и данные которые не были сохранены - теряются.
в том то и вопрос, что лучше выбрать..
эт я с гридом перепутала... ваще о другом думала...
савсэм плахой стал....:)
фишка в том, что может быть открыто много форм, и возникает проблема с поступлением информации из одной формы в другую. поэтому при активации формы - идет переактивация запроса формы, и данные которые не были сохранены - теряются.
Это уже вопрос проектирования.
сори, минута помрачения.. естественно никаких TTable..
эт я с гридом перепутала... ваще о другом думала...
савсэм плахой стал....:)
Я не совсем понял - что имеется ввиду под переактивацией? И как это происходит?
Скорей всего - вопрос не столько в том заполнять или не заполнять... как происходит оповещение окна о состоянии набора данных? Как происходит обновления набора данных в открытых окнах? Как происходит коммит (и роллбак)в системе?
Это уже вопрос проектирования.
ну.. пока это мой вопрос..
Я не совсем понял - что имеется ввиду под переактивацией? И как это происходит?
системы оповещений нет.. там все просто..
при нажатии на ок - commit, закрытие окна
просто если открыты другие документы, которые обращаются к той же таблице, что и закрываемая форма - даные теряются, у каждой формы есть реквизит типа
CurrentIDRecord
при активации формы - запрос обновляется
qrRegion->active = false;
qrRegion->active = true;
и локейтом устанавливается на нужную запись
ну.. пока это мой вопрос..
Глупо как-то. Тем более, решать задачи проектирования удаленно по отрывочным данным.
Ты опиши, что надо сделать по задаче, а мы уж постараемся подсказать, как это сделать правильно. И потом ты сама будешь сравнивать, насколько твое решение соответствует предложенному и исправлять или ругать нас.
Глупо как-то. Тем более, решать задачи проектирования удаленно по отрывочным данным.
Ты опиши, что надо сделать по задаче, а мы уж постараемся подсказать, как это сделать правильно. И потом ты сама будешь сравнивать, насколько твое решение соответствует предложенному и исправлять или ругать нас.
Не ругайся.. описываю
база данных - справочники (перечень стран, должностей, людей, и т.д) и документы (договора, акты, и т.д) (не бухгалтерия, но система похожая)
пользователь ведет учет документов, изредка пользуясь справочниками.
теперь хронология событий:
возникшая проблема номер раз - при занесении данных в справочник - не обновляются элементв типа DBLookup... на форме документа.
решение - при закрытии формы справочника - commit и активация запроса в дата-модуле..
проблема номер два - в документе могут быть ссылки на другие документы (как на документ - основание для текущего)
решение - то же
побочный эффект - если идет работа с двумя документами одного типа - при сохранении первого завершается транзакция (она как и соединение с базой находится в дата-модуле), и изменения, вносимые во второй документ - теряются..
по началу не планировалось активной работы с документами - и это было приемлемо, а сейчас хочется сделать по-человечески... если есть ссылки что почитать - заранее огромное спасибо, а то номальных книг у нас нет - самое лучшее, что я нашла - билдер 6.0 (серия для разработчика), но там примеры по базам - нереально детские
но там примеры по базам - нереально детские
Насчет книги - не знаю, а вот тут - моя дискуссия с Александром Смирновым об особенностях проектирования интерфейса прикладных программ для БД.
возникшая проблема номер раз - при занесении данных в справочник - не обновляются элементв типа DBLookup... на форме документа.
решение - при закрытии формы справочника - commit и активация запроса в дата-модуле..
проблема номер два - в документе могут быть ссылки на другие документы (как на документ - основание для текущего)
решение - то же
побочный эффект - если идет работа с двумя документами одного типа - при сохранении первого завершается транзакция (она как и соединение с базой находится в дата-модуле), и изменения, вносимые во второй документ - теряются..
А что, запрос который формирует DBLookup..., грид и апдейт(инсерт)данных - это один и тот же запрос? Если нет - то тогда при обновлении поля необходимо использовать закладки.
....
//Выполняется вставка - переоткрывается датасет
adoStationList->Close();
adoStationList->Open();
adoStationList->GotoBookmark(Bookmark);
adoStationList->FreeBookmark(Bookmark);
А если да - то мои соболезнования.:)
побочный эффект - если идет работа с двумя документами одного типа - при сохранении первого завершается транзакция (она как и соединение с базой находится в дата-модуле), и изменения, вносимые во второй документ - теряются..
А это вообще не понятно - транзакция запускается на все одна?
А что, запрос который формирует DBLookup..., грид и апдейт(инсерт)данных - это один и тот же запрос? Если нет - то тогда при обновлении поля необходимо использовать закладки.
А если да - то мои соболезнования.:)
я под интербазу пишу, и соответственно запросы формируют IBDataSet-ы.. но в общем DBLookup к основному запросу формы не относится.
спасибо за соболезнования :D
Нет, есть несколько дата-модулей по подсистемам - адресной, банковской, доккументной,.. по смыслу.
в каждом - своя транзакция
Насчет книги - не знаю, а вот тут - моя дискуссия с Александром Смирновым об особенностях проектирования интерфейса прикладных программ для БД.
Freeman
спасибо, я эту про ссылку почти забыла..
пару ме6сяцев назад мало что оттуда поняла..
ща еще раз попробую.. вроде уже должно дойти, самое время :)
Freeman
спасибо, я эту про ссылку почти забыла..
пару ме6сяцев назад мало что оттуда поняла..
ща еще раз попробую.. вроде уже должно дойти, самое время :)
та же самая бодяга - сначала как открыл так и не понял ни слова. вот наткнулся еще раз и внес в закладки :)