Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.17;
Скачать: CL | DM;

Вниз

ADO,   Найти похожие ветки 

 
analyser   (2003-10-24 16:43) [0]

Есть ADODataSet в режиме отложенных изменений.
При следующей последовательности команд:

ADODataSet.Insert;
ADODataSet.Post;
ADODataSet.CancelBatch;// вставленная строка является текущей!

возникает exception: "Row handle reffered to a deleted row or a row marked for deletion".

Вопрос: что это за гадость, и можно ли с этим бороться ?


 
kokker   (2003-10-26 15:20) [1]

Это, брат, означает, что нельзя так делать!
А почему, хрен его знает. Видишь, никто и не знает.


 
analyser   (2003-10-27 10:06) [2]

М-да, внушаить...

Насколько я понял, мастера, вы так не пишете.
Тогда вопрос: а как вы, работая с ADO, пишете формы для редактирования данных со стандартными кнопочками "Сохранить" / "Отменить" ?
Наверное, есть веские причины не использовать для этого DataSet.LockType =ltBatchOptimistic
с последующим: DataSet.UpdateBatch /CancelBatch ?!
(иначе, я думаю, кто-нибудь откликнулся бы).

PS: А вот в разных статьях и примерах про ADO на эту тему приводится как раз код, приводящий к ошибке. Вот ведь блин...


 
paul_k ©   (2003-10-27 10:14) [3]

Ну к Мастерам меня врят-ли можно отнесть но всякие формы для редактирования делаю на компонентах типа TEdit и так далее, а на кнопку Ок просто формирую insert или update запрос. На Cancel соответственно ничего, кроме возможной записи логов не делаю
Исхожу из того что юсер не может напрямую поправить какие либо данные в базе. Запрещено ему енто


 
analyser   (2003-10-27 10:49) [4]

>paul_k:
Кучеряво. (и радикально, т.е. долой db-aware components и всякие там методы от data access).
Правда, я не понял, причем здесь "Исхожу из того что юсер не может напрямую поправить какие либо данные в базе". Но как кардинальное средство от потенциальных проблем, наверное, годится. Жаль, не мой случай...


 
paul_k ©   (2003-10-27 11:07) [5]

Ну почему долой. просмотр, выбор из справочников очень удобно организовывается. А вот редактирование/вставка - ни-ни.. пусть юсер сначала замолотит то что надо ему, а я потом это раз N проверю. И только после этого процедурке отдам, которая все аккуратно по базе разложит. А насчет удобно ли пользователю вводить данные таким образом - это уже второй вопрос


 
analyser   (2003-10-27 11:24) [6]

>paul_k: Я ж не спорю! Проверить N раз - это святое! Собственно, для этого и BatchUpdates...
А вот делать форму редактирования без db-aware - мне кажется уж слишком...
Напр., простейшая форма с master-detail - какая-нибудь накладная - изгаляться без dbgrid?? Да что там говорить - любая элементарнейшая форма для редактирования простетшего справочника!

Впрочем, что спорить. Каждый делает, как нравится. Я просто имел в виду, что контролировать ввод пользователя можно и не отказываясь от db-aware (а datasets вполне могут быть и хранимыми процедурами).

Но, судя по всему, больше нет желающих высказаться.
И это печально... (просто мне не повезло)


 
paul_k ©   (2003-10-27 11:41) [7]

2 analyser
говорим почти об одном, но разными словами. В свое время меня приучили - никаких изменений в таблице без явно написанного и выполненого "Update", никаких вставок без "Insert" и так далее.
Мне такой подход сильно облегчает жизнь. (облегчает ли он жизнь юзеру это под вопросом). И, что для меня немаловажно, всегда есть возможность отследить кто и когда что добавил-изменил-удалил даже не пытаясь разобратся в каком месте надо эту запись лога вкрутить (что , возможно и не есть здоровО).


 
kokker   (2003-10-27 19:53) [8]

to analyser:

Говорил ведь тебе, не знают они!
Прямо жалко парня, колотится головой о стену.
В общем так, брат - это БАГ такой в TADOCustomDataSet, поищи в инете и найдешь, что ты не один такой. (Там вообще много багов хороших и разных).
Что предлагает наука:
1) перед CancelBatch сделать Cancel (не всегда возможно)
2) перед CancelBatch сместиться на др. запись - not inserted (тоже не всегда возможно)
3) - от меня: не парься, будь проще! Просто спрячь эту ошибку:
try
CancelBatch;
except
on EOLEEXception do
; // и никто не узнает!
end;
и все будет пучком!

А мастера... ну на то они и мастера (;-ььь)

И помни, брат: спасение утопающих дело рук самих утопающих.



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

Текущий архив: 2003.11.17;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.023 c
4-56945
subdigger
2003-09-24 11:32
2003.11.17
Always on top


1-56605
Micah'GF
2003-11-05 22:12
2003.11.17
Чем очистить TImage


11-56552
savva
2003-02-19 10:07
2003.11.17
Memo and Insert - работает или нет?


14-56851
Романов Р.В.
2003-10-27 10:31
2003.11.17
Завтра день рождения Билла Гейтса


1-56741
satron
2003-11-06 17:17
2003.11.17
Как вызвать OutLook ?