Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

IBDataSet, Master-Detail и Insert [D7, FireBird 1.5]


Страницы:   1 2 3 4 5 6

grav ©   (2008-05-20 09:45:00) 

Есть три связанных IBDataSet.
MasterDS-DetailDS1-DetailDS2. Соответственно Предприятие-Здания-данные по зданию. Предприятий много, у каждого прежприятия зданий много, у каждого здания одна запись с данными (площадь, стоимость и т.д.).
Список предприятий не меняется. Здания могут добавляться, редактироваться и удаляться. Данные по зданию могут редактироваться, удаляться вместе со зданием и добавляться вместе со зданием.
Встака записей в таблицу здания проходит без проблем. Вставка в тблицу с данными по зданию проходит без ошибок, но в таблицу не попадают. Почему? Как отследить что не так, если никаких ошибок не выводится?


MsGuns   (2008-06-12 16:46:00) [1]

>grav   (11.06.08 14:10) [91]
>Жмет пользователь кнопку Выход, ему выдается сообщение, что данные изменились, сохранить? Да, НЕТ.
>Если пользователь чего то менял, жмет Да и commit, если не менял, а случайно чего нибудь изменил, жмет НЕТ и rollback.

Совершенно убитая технология в угоду юзеру, причитающему "сделайте как в эксель"

По сути сабжа вообще промолчу ибо там такое нагорожено ;(
Похоже на фонд имущества или страхкомпанию - не лучше ли взять 1С вариант и просто посмотреть как там все организовано ?

>grav   (11.06.08 15:16) [103]
>Только не бейте :) У меня еще вопрос.
>Есть DBGrid, в нем 10 записей. На экране видно только 5. Пользователь жмут стрелку >вниз на скроле и указатель перемещается сразу на 6-ю запись (на первую невидимую).
>Можно как то сделать, чтобы нажатие на кнопку вниз перемещало курсор на одну >запись вниз начиная с первой?

Для этого есть клавиши навигации и колесо у мыши. Ползунок имеет смысл тягать только если отображаемый список содержит сотни или тысячи строк. И опять же ползунок не нужен даже на таких монстроидальных датасетах, если нормально реализован сервис поиска и фильтрации.
Не с того конца решаете проблемы.

>Это пользователи хотят, а вовсе не я извращенец :)

Еще один "убойный" аргумент. А если пользователь изъявит желание работать лежа - Вы ему свою форму на 90 градусов повернете ?
Советую почитать статьи о хорошем стиле проектирования пользовательских интерфейсов. В тырнете их моря.


grav   (2008-06-11 15:16:00) [2]

Только не бейте :) У меня еще вопрос.
Есть DBGrid, в нем 10 записей. На экране видно только 5. Пользователь жмут стрелку вниз на скроле и указатель перемещается сразу на 6-ю запись (на первую невидимую).
Можно как то сделать, чтобы нажатие на кнопку вниз перемещало курсор на одну запись вниз начиная с первой?
PS
Это пользователи хотят, а вовсе не я извращенец :)


grav   (2008-06-11 15:00:00) [3]


> Поросенок Винни-Пух ©   (11.06.08 14:49) [100]

Если скрола не было, это хорошо, изменения отслеживаются. А вот если изменения были, потом скрол и потом не было изменений, то получается UpdatesPending:=False, именения которые были перед скролом теряются.
И тут уж все равно где был ApplyUpdates в BeforeScroll или  BeforeClose.


grav   (2008-06-11 14:56:00) [4]

Поставил переменную в BeforeClose. Теперь, если были ApplyUpdates то переменная выставляется в 1 и на выходе сообщение об изменении данных.
Спасибо!


Поросенок Винни-Пух   (2008-06-11 14:49:00) [5]

Но пользы в моем случае от него не больше, чем от BeforeScroll.

ага, особенно если скрола вообще не было


grav   (2008-06-11 14:46:00) [6]


> Поросенок Винни-Пух ©   (11.06.08 14:33) [98]

Ну да, про BeforeClose я не подумал. Но пользы в моем случае от него не больше, чем от BeforeScroll.


Поросенок Винни-Пух   (2008-06-11 14:33:00) [7]

Ничего ты не понял.
Перед закрытием есть бефослоз


grav   (2008-06-11 14:31:00) [8]


> Поросенок Винни-Пух ©   (11.06.08 14:21) [96]
> Сейчас добавил ApplyUpdates в событие BeforeScroll
>
> Читай по губам:
> При смене мастер записи детайл датасет переоткрывается.
> В переводе с древнегреческого это означает, что он сначала
> закрывается, потом открывается снова

Да понял я. Закрытие-открытие и измененные данные потеряны.
Если я делаю ApplyUpdates перед переходом к другой записи, то изменеия сохраняются.
Можно поподробнее про TDataSet.State in dsEditMode? Чтобы можно было от CachedUpdates отказаться?


Поросенок Винни-Пух   (2008-06-11 14:21:00) [9]

Сейчас добавил ApplyUpdates в событие BeforeScroll

Читай по губам:
При смене мастер записи детайл датасет переоткрывается.
В переводе с древнегреческого это означает, что он сначала закрывается, потом открывается снова.


grav   (2008-06-11 14:19:00) [10]


> Поросенок Винни-Пух ©   (11.06.08 14:13) [93]

так я понял, но ищу варианты обхода


grav   (2008-06-11 14:18:00) [11]

Сейчас добавил ApplyUpdates в событие BeforeScroll, может это и плохо, но все сохраняется.
Правда это не выход, так как если скроллинг был, а следующих изменений не было, сообщение не будет выведено и коммита не будет


Поросенок Винни-Пух   (2008-06-11 14:13:00) [12]

тебе уже сказано куда деваются все изменения кроме последнего редактирования.


Поросенок Винни-Пух   (2008-06-11 14:12:00) [13]

и чо?
TDataSet.State in dsEditMode тоже скажет что возможно были изменения и нужен либо пост либо кансел


grav   (2008-06-11 14:10:00) [14]


> Поросенок Винни-Пух ©   (11.06.08 13:59) [89]
> а зачем тебе "отслеживать изменения", которые ты сам же
> и теряешь?

Форма большая, данных много. Жмет пользователь кнопку Выход, ему выдается сообщение, что данные изменились, сохранить? Да, НЕТ.
Если пользователь чего то менял, жмет Да и commit, если не менял, а случайно чего нибудь изменил, жмет НЕТ и rollback.


Anatoly Podgoretsky   (2008-06-11 14:03:00) [15]

> grav  (11.06.2008 13:57:28)  [88]

Отслеживать не надо, должна быть сладкая парочка Insert + Commit


Поросенок Винни-Пух   (2008-06-11 13:59:00) [16]

а зачем тебе "отслеживать изменения", которые ты сам же и теряешь?


grav   (2008-06-11 13:57:00) [17]


> Поросенок Винни-Пух ©   (11.06.08 13:28) [87]
>
> Выключить cachedupdates

Если я выключу, то как отслежу что изменения были?


Поросенок Винни-Пух   (2008-06-11 13:28:00) [18]

Как сохранить все изменения за раз не нажимая каждый раз кнопку сохранить?

Выключить cachedupdates


Поросенок Винни-Пух   (2008-06-11 13:13:00) [19]

при смене мастер записи детайл датасет переоткрывается. закешированные изменения потерялись если не было апплая.


grav   (2008-06-11 13:07:00) [20]

Снова проблемка, помогите пожалуйста.
Имеется DBGrid со списком зданий и соответствующий IBDataSet (мастер) к нему. Имеется набор DBEdit'ов с соответствующим IBDataSet (детайл). IBDataSet'ы в режиме CachedUpdates.
Меняю данные в DBEdit, делаю ApplyUpdates. Данные сохраняются. Все ОК.
Делаю много изменений в таком порядке:
Меняю данные в DBEdit, выбираю новое здание, меняю данные в DBEdit и т.д.
Делаю ApplyUpdates. Сохраняются измененные данные только у последнего здания.
Как сохранить все изменения за раз не нажимая каждый раз кнопку сохранить?


Страницы:   1 2 3 4 5 6

Наверх

Титульная страница Поиск, карта сайта Написать письмо