powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
25 сообщений из 52, страница 2 из 3
Два раза подряд 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
25 сообщений из 52, страница 2 из 3
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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