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

Вниз

IBDataSet, Master-Detail и Insert   Найти похожие ветки 

 
grav   (2008-05-22 13:53) [80]


> Sergey13 ©   (22.05.08 13:36) [79]

Спасибо, что не бросаете :)
Данные вводит пользователь. Если под циклом имелась ввиду работа пользователя, то да он есть :) Пользователь вводит данные организации, потом данные первого здания, потом данные объектов первого здания, потом вводит данные второго здания, обекты второго здания и т.д.


 
Sergey13 ©   (2008-05-22 14:20) [81]

> [80] grav   (22.05.08 13:53)

А нужен ли в этих полях NULL? Может проще заполнять значения по умолчанию 0? Например на onNewRecord датасета. Или на потерю фокуса едита.

В любом случае это косяк в программе, ИМХО, если

> [62] grav   (22.05.08 11:22)
> Если в предыдущей записи данные в поле присутствуют, то
> при вставке очередной записи с нулевым полем вылетает ошибка.
> Если запись с нулевым полем первая, то ошибку нет.


 
ANB   (2008-05-22 14:45) [82]


> Да, так работает. спасибо.
> Вот только не радует наличие такого кода для каждого поля:
>
>
> if LoadEd.Text="" then
>     AddSQL.ParamByName("LOAD").Clear
>   else
>     AddSQL.ParamByName("LOAD").AsString:=LoadEd.Text;

Особенность ИБ/ФБ, для которого пустая строка и нулл - разные значения.

Не скажу, что плохая особенность, но однако . . .


 
grav   (2008-05-23 10:02) [83]

Объясните еще пожалуйста одну вещь по транзакциям.
После того как я сделал MainForm.WriteTr.Commit; почему данные становятся доступными только после отключения/подключения к БД?
И соответственно, если не произвести отключение/подключение, то есть возможность забить дублирующие данные


 
Reindeer Moss Eater ©   (2008-05-23 10:08) [84]

Потому что транзакции разные и читающая транзакция должна завершиться и начаться заново. Реконнект для этого не нужен (если конечно транзакциями кто-то управляет).


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

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


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

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


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

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

Выключить cachedupdates


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


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

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


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

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


 
Anatoly Podgoretsky ©   (2008-06-11 14:03) [90]

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

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


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


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

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


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

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


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

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


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

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


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


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

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


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

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

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


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


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

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


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

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


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


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

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


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

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

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


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

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


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


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

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


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

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


 
MsGuns ©   (2008-06-12 16:46) [104]

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

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

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

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

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

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

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



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

Форум: "Начинающим";
Текущий архив: 2008.07.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.65 MB
Время: 0.01 c
2-1213166267
Amid
2008-06-11 10:37
2008.07.13
Веб Сервис на Делфи 7, клиент на С++Буилдер 6 ?????


11-1190218398
Vladimir Kladov
2007-09-19 20:13
2008.07.13
Версия 2.80


15-1212260211
Proof
2008-05-31 22:56
2008.07.13
Не понятно, что с хелпом


2-1213164816
Mishenka
2008-06-11 10:13
2008.07.13
Как в ToolBar добавить ToolButton динамически?


2-1213459702
WebSQLNeederrr
2008-06-14 20:08
2008.07.13
WebBrowser.Navigate( page.html ) - загрузить не брать из кеша





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