![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
IBDataSet, Master-Detail и Insert [D7, FireBird 1.5]
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. Сохраняются измененные данные только у последнего здания.
Как сохранить все изменения за раз не нажимая каждый раз кнопку сохранить?