powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
52 сообщений из 52, показаны все 3 страниц
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32343845
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Долгая предыстория.

Делаю я тут "триггер для бедных" - надо отследить удаление записи в форме и сделать еще несколько действий, желательно в транзакции.

Просто использовать событие Form_Delete не могу:
1. Во-первых удаление еще не произошло
2. Во-вторых оно может и не произойти - если удаляются несколько записей и пользователь нажмет "Нет" (при включенной опции "Подтверждение удаления записей")
3. В-третьих ни о какой транзакции нельзя и мечтать (патамушта Access 97)

Немного извращаюсь (упрощенный код):
Код: plaintext
1.
2.
3.
4.
Private Sub Form_Delete(Cancel As Integer)
    Cancel = True
    CurrentDb.Execute  "Delete * From [БазоваяТаблица] Where ID="  & Me!ID, dbFailOnError
    ' делаю что-то еще
End Sub

Все хорошо, за одним НО: в форме остается запись "#Удалено#"
Requery в FormDelete не всунешь ("Операция не поддерживается в транзакции", причем транзакция - на моя, а скрытая аксесовксая). От безысходности всунул Requery в Current, т.е.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Private Sub Form_Delete(Cancel As Integer)
    Cancel = True
    CurrentDb.Execute  "Delete * From [БазоваяТаблица] Where ID="  & Me!ID, dbFailOnError
    ' делаю что-то еще
    mblnDeleting = True
End Sub

Private Sub Form_Current()
    If mblnDeleting Then Me.Requery
    mblnDeleting = False
End Sub

Уже лучше, но Requery не срабатывает при удалении последней записи, да еще какое-то странное моргание происходит. И текущая запись слетает (текущей становится первая).
Решил, что надо от всего этого избавиться.
Конец предыстории.

Чесал репу. Долго думал. Сделал совсем извратно.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Private Sub Form_Delete(Cancel As Integer)
    Cancel = True
    Dim rstClone As Recordset
    Set rstClone = Me.RecordsetClone
    rstClone.Bookmark = Me.Bookmark
    rstClone.Delete
    ' !!!!!!!!!!!!!!!!!!!!'
    On Error Resume Next
    rstClone.Delete
    On Error GoTo  0 
    ' !!!!!!!!!!!!!!!!!!!!'
    
    ' делаю что-то еще '
End Sub

Работает как часы. Удаленная запись из формы исчезает, текущая запись не портится, в общем все прекрасно. ГДЕ ЗАСАДА???
И почему это только при втором вызове Delete? Если только один Delete - то запись удаляется, "#Удалено#" остается (чего и следовало ожидать). Второй (хоть и заканчивается с ошибкой) - запись исчезает без следа.

Сори за длинный пост, но уж больно страшно такие фишки в рабочую програму втыкать не посоветовавшись с мировым сообществом.
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32343866
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
У меня, как всегда, нет окончательного ответа, но есть альтернативная идея. Делай так, как написал в предыстории, но только не в Current, а в таймере. И, наверно, запоминать Bookmark тоже понадобится.
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32343901
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2ЛП

Акес97 с SP2?
Я тут с МСДН нашел хрень (похожую /чуть-чуть/ на твою проблему)
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32343921
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Саныч
Про таймер я помню. Но блин реквери по таймеру... ужас... некрасиво.
К тому же мигает оно как-то гораздо больше одного раза. Опять некрасиво.
Вот так и живу - одно решение кривое, другое - страшное.

2 Виктор Сенин
Угу. SP2
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32343924
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Чтобы не мигало, сделай Echo Off. :^) Мне тебя учить?
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32343928
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ох, ЛП, аж в груди защемило.

В onDelete что-то делать - смерти подобно. Вспомни топик Лифчика кажется - он при этом открывал какую-то левую форму - и удаление не происходило. На таймер вешаться - тоже бесполезно, если сетка медленная, то таймер может и не отработаться: пользователь нажал удаление, пока программа обработки делита "чухается", он жмет еще одно удаление, и обработка первой записи по таймеру не происходит. Если только стек организовать какой-нибудь. Причем отмена удаления происходит не только в случае открытия формы. У меня бывает, что лишнюю строчку добавишь в обработку delet'a - запись вроде-бы удаляется, закрываешь/открываешь форму - а она тут как тут. Засада. И это на access XP SP 2 и Jet SP 7. Вообще тоска.

Если придумаешь супер-триггеры для DAO на удаление - положи сюда, пожалуйста - я тоже ими пользоваться буду :)
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32343935
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Есть другое решение. НЕ ДЕЛАТЬ Cancel=True. Стирать все как в первом классе. А все проверки делать ДО стирания.

То есть: проверка, и если стирание отменено, то Cancel=True и все, иначе доверяем Аксессу стереть запись самому и "делаем что-то еще".
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32343941
Erika
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверно, я что-то не понимаю :)
А зачем вообще в методе Form_Delete использовать насильственное удаление??

Подтверждение удаления пакета записей происходит в событии Form_BeforeDelConfirm ( перед Form_Delete ).
А в Form_Delete можно по каждой записи запросить подтверждение, если надо. Удалять запись - Cancel = True, не удалять - Cancel = False.

А потом, как это автор3. В-третьих ни о какой транзакции нельзя и мечтать (патамушта Access 97)
Зачем же так асс97 обижать? См.:
BeginTrans
CommitTrans
Rollback


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Private Sub Form_Delete(Cancel As Integer)
   If MsgBox( "Удалить конкретную запись?" , vbOKCancel) = vbOK Then
	Cancel = False                  'Удаляем '
             BeginTrans 
                    ' делаю что-то еще '
             CommitTrans
   Else
           Cancel = True
   End If
End Sub
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32343946
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гео предупреждалВ onDelete что-то делать - смерти подобно
Угугу. Только я формочек всяких не открываю, Msgbox'ов не выкидываю, и вообще только с рекордсетами работаю. Должно справиться.

Саныч предлагалА все проверки делать ДО стирания.
А мне надо после :(
И Cancel = True у меня только для того, чтобы удаление самому сделать. И, помимо удаления что-то еще в данных подправить.
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32343948
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Erika
Выдели 10 записей и удали их таким образом.
Мало того что пользователь озвереет на кнопку Ок жать, там он еще в конце Отмену нажмет (когда сам аксес спросит "Не уверены ли вы что вы не хотите не удалять эти записи если да нажмите нет"). А ты все свои дела уже сделал...
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32343951
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
авторА мне надо после :(
Не представляю, чтобы нельзя было добавить в алгоритм where id<>current.
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32343952
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Erika
Мне транзакция нужна не сама по себе, а именно чтоб аксесовское удаление записи в нее попало. А оно, к сожалению, в скрытом аксесовском workspace'е происходит.
В 2000-м и выше можно с Me.Recordset поиграть, а в 97-м - нет.
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32343953
Mihonin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот у меня на столе лежит книжка ACCESS 97, там есть описание как работают в нём транзакции...
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32343955
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Саныч еще раз
Мне не надо отменять удаление.
Мне надо обеспечить увязать аксесовскую операцию (удаление записи) со своими. Обеспечить атомарность. Т.к. аксес и я работаем в разных workspace'ах, то приходится херить аксесовское удаление и делать свое (в моем workspace'е).

2 Mihonin
Ну вот, щас меня транзакциям будут учить
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32343957
Erika
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Лох Позорный
Дык, MsgBox для примера приведен. Вместо него - вставляешь свою проверку, по результатам которой решаешь, Cancel = True или False. И все остальные свои "что-то еще" по результатам проверки.

По крайней мере, удалять в этом событии текущую запись ручками - это только если хочется поиметь массу проблем и нестабильность работы.
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32343960
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Лох, а чтО это за такие проверки, которые надо делать обязательно после стирания? И почему так уж принципиально нельзя проделать их до?
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32343962
Mihonin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Лох

>>3. В-третьих ни о какой транзакции нельзя и мечтать (патамушта Access 97)
Не надо мечтать, они там есть по заявлению Корнелюк, Веккер, Зиновьев (авторы той книги которая лежит)
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32343964
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Erica & Саныч
Да не нужны мне проверки. Ненужныыыыыы
Мне трииггггееерррр нууужжжееееннннн!!!!

2 Erica еще раз
Ну убери Msgbox, и что?
Я писалон еще в конце Отмену нажмет (когда сам аксес спросит "Не уверены ли вы что вы не хотите не удалять эти записи если да нажмите нет"). А ты все свои дела уже сделал...
С этим как бороться?
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32343968
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
А почему тогда ты не можешь доверить Аксессу стирать обычным образом?
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32343972
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Патамушта он может и не стеереееееееть.... (постепенно проваливаясь по уши в какое-то г..)
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32343982
Хам трамвайный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не получится триггер
на а97
проваливайся потихоньку в г....
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32343983
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
А если он не сотрет, то поставишь Cancel, и тогда не будет ни стирания, ни обработки. Что еще???
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32343988
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Саныч вопрошалА почему тогда ты не можешь доверить Аксессу стирать обычным образом?
А еще патамушта на событии Delete запись еще не удалена из базового набора, а после собственно удаления мне остается только таймер ловить.
Неужто действительно придется ID-шник удаляемой записи запоминать и самому себе говорить - "ЭТОЙ ЗАПИСИ НЕТ! НЕ ВЕРЬ ГЛАЗАМ СВОИМ!"
Так и придется видимо... (выныривая из какого-то г..)
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32343993
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Хам
Спасибо на добром слове.

2 Саныч
А если он не сотрет, то поставишь Cancel
Да где ж я его поставлю?
Все Form_Delete уже отработали, вся работа сделана, пришло BeforeDelConfirm, AfterDelConfirm не пришло (юзер отмену нажал). Что, опять таймер?
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32343997
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
авторА еще патамушта на событии Delete запись еще не удалена из базового набора
Ну так и хорошо. Самое время проделать всю обработку.
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32344000
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
А если отмена только стандартными средствами (а не твоими), то он в OnDelete и сам не придет.
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32344006
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
маленький вопрос:
А каскадное удаление не поможет?
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32344012
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 АлексейК
К сожалению нет.
Нужно кривой псевдоагрегат по составу документа считать. И, наплевав на нормализацию, сохранять его в родительской таблице (заголовке).

2 Саныч
А еще на событии OnDelete записи не блокированы. Так что я могу тупо на блокировку другим юзером нарваться, удаление опять таки не произойдет, а все что мне нужно уже посчитается. Тьфу на этот 97-й аксес.

А если отмена только стандартными средствами (а не твоими), то он в OnDelete и сам не придет
Еще как придет. И не один раз.
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32344015
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Таки плохо. Надо на другой глобус ехать...
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32344019
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Саныч
Таки надо...

2 Хам
не получится триггер
на а97
проваливайся потихоньку в г....

Так ведь получился же. Только либо с артефактами в интерфейсе, либо с шаманством (двойное удаление из клона). Одно не хочется, другое страшно.
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32344030
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Кстати, что касается блокировки записей, то я не уверен, что эту проблему решает то, что ты написал в первом посте. Так что можешь плюнуть.
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32344032
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2ЛП
Получиться-то получиться. Только работать, скорее всего, будет крайне неустойчиво. Особенно разница будет заметна при тестировании локально и последующем использовании в сети.
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32344039
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если поле сделать for_del в источнике формы и связанных таблицах, вставлять туда уникальный номер батча и если других покусителей нет то грохать уже в транзакции а в форме чтоб фильтровалось от непустых значений?
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32344067
Фотография Нуф-нуф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Драсте...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Private Sub Form_Delete(Cancel As Integer)
    Cancel = True
    Dim rstClone As Recordset
    Set rstClone = Me.RecordsetClone
    rstClone.Bookmark = Me.Bookmark
    rstClone.Delete
    rstClone.Requery 'не путать с Me.Requery'
    ' делаю что-то еще '
End Sub
ЛП, доделаешь - поделишся? :)
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32344088
Erika
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все-таки не понимаю логики:
Сначала на Form_Delete насильственно удалить записи, а потом у юзера спросить: хочет ли он их удалять. А если передумал - в этом случае назад их уже не вернешь :0. Поскольку при событии Form_Delete запись помещается во временный буфер, из которого ее и вертают при отказе от удаления. А при rstClone.Delete сносится без всяких буферов.
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32344131
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Все-таки не понимаю логики:

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

> Поскольку при событии Form_Delete запись помещается во временный буфер,
Кстати, никуда она не помещается. Она просто еще не удалена.
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32344170
Erika
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это не меняет сути вопроса - сначала удалить, а потом спросить - надо ли удалять?

Можно сделать проще - забить на форме возможность удаления, и повесить на нее свою кнопку и обработку нажатия Del, где и проводить после соответствующего подтверждения "поддержку "целостности данных"". Пробежаться по выделенным записям формы не сложно (можно через SelTop, SelHeight). А еще проще не форму для этого использовать, а список.
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32344175
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Эрика

Попробую по предложениям.

> Это не меняет сути вопроса - сначала удалить, а потом спросить - надо ли удалять?

А почему ты решил(а), что удаляют из той же таблицы, что видна в форме? Я могу за пару минут придумать реальную задачку, в которой при попытке удаления записи из одной таблицы надо удалять запись из другой.

> Можно сделать проще - забить на форме возможность удаления, и повесить на нее свою кнопку и обработку нажатия Del, где и проводить после соответствующего подтверждения "поддержку "целостности данных"".

И после этого учить пользователя, что в этой подформе этой формы, все, что вы учили - не нужно. Тут все по-другому.

> Пробежаться по выделенным записям формы не сложно (можно через SelTop, SelHeight). А еще проще не форму для этого использовать, а список.

А еще проще на входе в эту форму открывать сеанс dos'a с эмуляцией командной строки. Или еще веселее:

1. Показать текущую запись
2. Перейти к следующей
3. Перейти к предыдущей
4. Перейти в начало
5. Перейти в конец
6. Удалить текущую запись
7. Вернуться в основное меню
----
Нажмите соответствующую цифру, а затем Enter

Вот потеха будет, когда они anykey опять искать станут :)

---
Хотя, смех смехом, а резон в этом есть. Перехватывать все попытки удаления записи в форме (onkeydown, подмена пункта меню, свои кнопки в панели инструментов) и замена их на свои обработки со своим удалением. И резон, кстати, неплохой.
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32344329
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Erika
Это не меняет сути вопроса - сначала удалить, а потом спросить - надо ли удалять?
Вообще-то если собственное удаление аксеса отменить (и удалять самому), то и вопросов юзеру никаких не задастся. Чему я даже рад. См. абзацем ниже.

Поскольку при событии Form_Delete запись помещается во временный буфер
Зависит от настроек. Если включено "Подтверждение изменений записей" - то все удаление оборачивается в транзакцию (то, что ты буфером назвал(а)). Если отключено - то удаляется сразу после Form_Delete (правда, все равно в маленьких транзакциях).

А если передумал - в этом случае назад их уже не вернешь :0
В принципе да. Только практика показывает, что юзера автоматом жмут "Да", а потом уже думают - передумать или нет.

Можно сделать проще - забить на форме возможность удаления, и повесить на нее свою кнопку
См. ответ Гео ("И после этого учить пользователя...")

Вообще мне весь этот гемор совсем не по душе.
Во всех своих новых наработках я редактирование документа делаю во временных таблицах. И потом уже переношу их в основные. Единственный трабл при этом - предусмотреть возможность изменения тех же самых данных другим юзером.
Но иногда приходится чужие (унаследованные) куски кода модифицировать. Большую часть я уже переписал с нуля. Когда-нибудь и до этого куска дойду. А пока вот мучаться приходится.
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32344332
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Гео
Хотя, смех смехом, а резон в этом есть. Перехватывать все попытки удаления записи в форме (onkeydown, подмена пункта меню, свои кнопки в панели инструментов) и замена их на свои обработки со своим удалением. И резон, кстати, неплохой.
Вот вот. Я именно так и думаю. Только вместо того, чтобы перехватывать все что только можно и скрывать все возможные кнопочки, а так же возможность добавить эти кнопочки (т.е. запрещать настройку тулбаров), я пытаюсь словить и обработать одно событие, которое при всех этих действиях происходит. Пока не особо успешно :(.
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32344350
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>. Только практика показывает, что юзера автоматом жмут "Да", а потом уже думают - передумать или нет.

Угу. Я для важно инфы InputBox'ов наделал, где им приходиться вводить ручками слово "Да". (Была идея вводить маленькое лицензионное соглашение об удалении записи типа "Я юзер такой-то в трезвом уме и памяти согласен удалить запись, прекрасно понимая все те кары, которые обрушиться на меня в случае моей ошибки. Беру на себя повышенные обязательства по... "
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32344356
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Сенин Виктор
Да что там юзеры. Я сам поначалу в винде отключал перемещение файлов в корзину (при удалении) - типа зачем оно мне. При этом автоматически включался вопрос. Дык точно так же на автомате "Да"... и волосы рвать . Так что теперь все в корзину без вопросов.
Жалко что нельзя такую же корзину в аксесе сделать.
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32344370
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Жалко что нельзя такую же корзину в аксесе сделать.

Можно.
1.Если везде признак поставить IsDelete (вроде бы так dbf работает)
Но я бы такой х%ней заниматься не стал бы (как представлю, что нужно делать в случае отмены удаления записи из, например, "закрытого" отчетного периода (вопрос: а нафига? не задавать! :) или в случае наличия сложной логики проведения (учета) документа - да еще и на mdb) Брррр, да и не понятно,что будет с производительностью (везде прийдеться ставить Where Isdelete=false - а это скорей всего full table scan)
2. Сделать копии всех таблиц, которые и будут этой "корзиной". (прада тот же гемор с восстановление, особенно связанных таблиц, так же весьма вероятны проблемы с целостностью данных) А для профилактики юзера, удалившего нужное, можно заставить восстанавливать все ручками из распечатки. :)

Думаю, можно, но не нужно. Легче их выдрессировать, вести контроль за удалением (например, по дате документа, с паролями и т.п.)
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32344595
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне кааца, что надо все-тки перенести "триггер" в Form_AfterDelConfirm(Status As Integer) (вернее разнести логику по нескольким событиям). В _Delete накоплять в переменные параметры, необходимые для "каскадной обработки" в других таблицах, а в Form_AfterDelConfirm (по значению Status-а) проводить/или нет "что-то еще" по значениям полученных в _Delete параметров.

Вот.
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32344651
Erika
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Лох Позорный :

Вообще-то если собственное удаление аксеса отменить (и удалять самому), то и вопросов юзеру никаких не задастся. Чему я даже рад
А что, самому через MsgBox вопрос задать нельзя? И обработать ответ Да-Нет?

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

Зачем же так сложно? У формы в конструкторе выставляется свойство "Разрешить удаление = Нет" (AllowDeletions = False). При этом аксес перестает для этой формы обрабатывать нажатие Del. А также блокирует стандартные кнопки и пункты меню на удаление.
Мой опыт показывает, что чаще всего удаляют нажатием Del, но если очень надо, можно добавить свою кнопку и пункт меню для этой формы. Я в такой ситуации вешала прямо на форму кнопку со стандартной картинкой удаления >* и своей обработкой.
Процедурка пишется один раз, и вызывается при событиях KeyDown и всех кнопок и меню (своих). Типа:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
Public Sub MyDelet(myFrm As Form)
Dim rstClone As Recordset, i As Integer
   If MsgBox( "Удалить выделенные записи?"  & vbCr &  "Отменить удаление невозможно !!!" , vbYesNo) = vbYes Then
       BeginTrans 
	'Удаляем запись'
              Set rstClone = myFrm.RecordsetClone
              rstClone.Bookmark = myFrm.Bookmark
              For i =  1  To myFrm.SelHeight
                    rstClone.Delete
                    rstClone.MoveNext
              Next i
              rstClone.Requery
             'Делаем что-то еще'
       CommitTrans
   End If
End Sub

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode =  46  And Shift =  0  Then
       MyDelet Me
    End If
End Sub

Private Sub ButtonDel_Click()
    MyDelet Me
End Sub
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32344671
Erika
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон, конечно 'Делаем что-то еще' - на родину. Да и транзакцию моно по каждой записи (но это уже на вкус и цвет)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
              For i =  1  To myFrm.SelHeight
                    BeginTrans 
                            rstClone.Delete
                            'Делаем что-то еще'
                            rstClone.MoveNext
                    CommitTrans
              Next i
              rstClone.Requery
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32344734
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 assa
Form_AfterDelConfirm плох тем, что:
а) Его может и не быть - если подтверждения выключены (и этого уже достаточно чтобы зарубить использование этого события)
б) Честно говоря, я не помню, попадает ли аксес в Form_AfterDelConfirm при нажатии "Отмена"
в) не дай бог накопить чего лишнего на событии Delete

2 Erika
Да понимаю я, что можно сделать полностью свое удаление.
Но не буду я переопределять аксесовский интерфейс.
Говоришь только кнопкой Delete? А Ctrl-X у тебя пользователи никогда не нажимают? Что мне, Ctrl-X тоже обрабатывать, причем еще и в буфер обмена данные писать ?
Да и мало ли чего они еще могут придумать.
Или придется объяснять юзерам, что это такая вот чудо формочка, из нее нельзя в буфер обмена записи вырезать.... не хочу я им ничего объяснять... лучше буду пытаться аксесовкие события использовать по их прямому предназначению. не получится совсем - тады ой.
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32344738
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Лох, а ты уверен, что в буфер обмена что-то попадет при твоем Cancel=True с удалением из клона?
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32344799
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хороший вопрос
фак :(((
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32344838
Фотография Нуф-нуф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛП, так мой совет не помог? :( Странно... У меня прекрасно работает...
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32344877
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Нуф-Нуф
Твой совет помог.
Вообще ниче не понимаю.
Теперь и совсем без Requery работает, и записи пропадают. Пойду чесать репу.

2 Саныч по поводу буфера обмена
Таки при отмене аксесовского удаления в буфер копируется. О как!
...
Рейтинг: 0 / 0
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
    #32345442
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
:^) Тогда у тебя есть будущее.
...
Рейтинг: 0 / 0
52 сообщений из 52, показаны все 3 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]