|
|
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
А если отмена только стандартными средствами (а не твоими), то он в OnDelete и сам не придет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2003, 17:52 |
|
||
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
маленький вопрос: А каскадное удаление не поможет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2003, 17:54 |
|
||
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
2 АлексейК К сожалению нет. Нужно кривой псевдоагрегат по составу документа считать. И, наплевав на нормализацию, сохранять его в родительской таблице (заголовке). 2 Саныч А еще на событии OnDelete записи не блокированы. Так что я могу тупо на блокировку другим юзером нарваться, удаление опять таки не произойдет, а все что мне нужно уже посчитается. Тьфу на этот 97-й аксес. А если отмена только стандартными средствами (а не твоими), то он в OnDelete и сам не придет Еще как придет. И не один раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2003, 17:59 |
|
||
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
Таки плохо. Надо на другой глобус ехать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2003, 18:01 |
|
||
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
2 Саныч Таки надо... 2 Хам не получится триггер на а97 проваливайся потихоньку в г.... Так ведь получился же. Только либо с артефактами в интерфейсе, либо с шаманством (двойное удаление из клона). Одно не хочется, другое страшно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2003, 18:03 |
|
||
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
Кстати, что касается блокировки записей, то я не уверен, что эту проблему решает то, что ты написал в первом посте. Так что можешь плюнуть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2003, 18:08 |
|
||
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
2ЛП Получиться-то получиться. Только работать, скорее всего, будет крайне неустойчиво. Особенно разница будет заметна при тестировании локально и последующем использовании в сети. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2003, 18:12 |
|
||
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
а если поле сделать for_del в источнике формы и связанных таблицах, вставлять туда уникальный номер батча и если других покусителей нет то грохать уже в транзакции а в форме чтоб фильтровалось от непустых значений? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2003, 18:21 |
|
||
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
Драсте... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2003, 18:43 |
|
||
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
Все-таки не понимаю логики: Сначала на Form_Delete насильственно удалить записи, а потом у юзера спросить: хочет ли он их удалять. А если передумал - в этом случае назад их уже не вернешь :0. Поскольку при событии Form_Delete запись помещается во временный буфер, из которого ее и вертают при отказе от удаления. А при rstClone.Delete сносится без всяких буферов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2003, 19:00 |
|
||
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
> Все-таки не понимаю логики: Да причин надобноси триггера может быть куча - две таблички лежат в разных мдбшках, а между ними надо организовать поддержку "целостности данных". - в одной табличке есть галочка, что такой-то записи есть соответствующая запись в другой табличке с такими-то цифрами. Или еще какие. > Поскольку при событии Form_Delete запись помещается во временный буфер, Кстати, никуда она не помещается. Она просто еще не удалена. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2003, 20:06 |
|
||
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
Это не меняет сути вопроса - сначала удалить, а потом спросить - надо ли удалять? Можно сделать проще - забить на форме возможность удаления, и повесить на нее свою кнопку и обработку нажатия Del, где и проводить после соответствующего подтверждения "поддержку "целостности данных"". Пробежаться по выделенным записям формы не сложно (можно через SelTop, SelHeight). А еще проще не форму для этого использовать, а список. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2003, 21:17 |
|
||
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
2Эрика Попробую по предложениям. > Это не меняет сути вопроса - сначала удалить, а потом спросить - надо ли удалять? А почему ты решил(а), что удаляют из той же таблицы, что видна в форме? Я могу за пару минут придумать реальную задачку, в которой при попытке удаления записи из одной таблицы надо удалять запись из другой. > Можно сделать проще - забить на форме возможность удаления, и повесить на нее свою кнопку и обработку нажатия Del, где и проводить после соответствующего подтверждения "поддержку "целостности данных"". И после этого учить пользователя, что в этой подформе этой формы, все, что вы учили - не нужно. Тут все по-другому. > Пробежаться по выделенным записям формы не сложно (можно через SelTop, SelHeight). А еще проще не форму для этого использовать, а список. А еще проще на входе в эту форму открывать сеанс dos'a с эмуляцией командной строки. Или еще веселее: 1. Показать текущую запись 2. Перейти к следующей 3. Перейти к предыдущей 4. Перейти в начало 5. Перейти в конец 6. Удалить текущую запись 7. Вернуться в основное меню ---- Нажмите соответствующую цифру, а затем Enter Вот потеха будет, когда они anykey опять искать станут :) --- Хотя, смех смехом, а резон в этом есть. Перехватывать все попытки удаления записи в форме (onkeydown, подмена пункта меню, свои кнопки в панели инструментов) и замена их на свои обработки со своим удалением. И резон, кстати, неплохой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2003, 21:47 |
|
||
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
2 Erika Это не меняет сути вопроса - сначала удалить, а потом спросить - надо ли удалять? Вообще-то если собственное удаление аксеса отменить (и удалять самому), то и вопросов юзеру никаких не задастся. Чему я даже рад. См. абзацем ниже. Поскольку при событии Form_Delete запись помещается во временный буфер Зависит от настроек. Если включено "Подтверждение изменений записей" - то все удаление оборачивается в транзакцию (то, что ты буфером назвал(а)). Если отключено - то удаляется сразу после Form_Delete (правда, все равно в маленьких транзакциях). А если передумал - в этом случае назад их уже не вернешь :0 В принципе да. Только практика показывает, что юзера автоматом жмут "Да", а потом уже думают - передумать или нет. Можно сделать проще - забить на форме возможность удаления, и повесить на нее свою кнопку См. ответ Гео ("И после этого учить пользователя...") Вообще мне весь этот гемор совсем не по душе. Во всех своих новых наработках я редактирование документа делаю во временных таблицах. И потом уже переношу их в основные. Единственный трабл при этом - предусмотреть возможность изменения тех же самых данных другим юзером. Но иногда приходится чужие (унаследованные) куски кода модифицировать. Большую часть я уже переписал с нуля. Когда-нибудь и до этого куска дойду. А пока вот мучаться приходится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2003, 09:24 |
|
||
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
2 Гео Хотя, смех смехом, а резон в этом есть. Перехватывать все попытки удаления записи в форме (onkeydown, подмена пункта меню, свои кнопки в панели инструментов) и замена их на свои обработки со своим удалением. И резон, кстати, неплохой. Вот вот. Я именно так и думаю. Только вместо того, чтобы перехватывать все что только можно и скрывать все возможные кнопочки, а так же возможность добавить эти кнопочки (т.е. запрещать настройку тулбаров), я пытаюсь словить и обработать одно событие, которое при всех этих действиях происходит. Пока не особо успешно :(. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2003, 09:27 |
|
||
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
>. Только практика показывает, что юзера автоматом жмут "Да", а потом уже думают - передумать или нет. Угу. Я для важно инфы InputBox'ов наделал, где им приходиться вводить ручками слово "Да". (Была идея вводить маленькое лицензионное соглашение об удалении записи типа "Я юзер такой-то в трезвом уме и памяти согласен удалить запись, прекрасно понимая все те кары, которые обрушиться на меня в случае моей ошибки. Беру на себя повышенные обязательства по... " ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2003, 09:40 |
|
||
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
2 Сенин Виктор Да что там юзеры. Я сам поначалу в винде отключал перемещение файлов в корзину (при удалении) - типа зачем оно мне. При этом автоматически включался вопрос. Дык точно так же на автомате "Да"... и волосы рвать . Так что теперь все в корзину без вопросов. Жалко что нельзя такую же корзину в аксесе сделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2003, 09:47 |
|
||
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
>Жалко что нельзя такую же корзину в аксесе сделать. Можно. 1.Если везде признак поставить IsDelete (вроде бы так dbf работает) Но я бы такой х%ней заниматься не стал бы (как представлю, что нужно делать в случае отмены удаления записи из, например, "закрытого" отчетного периода (вопрос: а нафига? не задавать! :) или в случае наличия сложной логики проведения (учета) документа - да еще и на mdb) Брррр, да и не понятно,что будет с производительностью (везде прийдеться ставить Where Isdelete=false - а это скорей всего full table scan) 2. Сделать копии всех таблиц, которые и будут этой "корзиной". (прада тот же гемор с восстановление, особенно связанных таблиц, так же весьма вероятны проблемы с целостностью данных) А для профилактики юзера, удалившего нужное, можно заставить восстанавливать все ручками из распечатки. :) Думаю, можно, но не нужно. Легче их выдрессировать, вести контроль за удалением (например, по дате документа, с паролями и т.п.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2003, 10:00 |
|
||
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
Мне кааца, что надо все-тки перенести "триггер" в Form_AfterDelConfirm(Status As Integer) (вернее разнести логику по нескольким событиям). В _Delete накоплять в переменные параметры, необходимые для "каскадной обработки" в других таблицах, а в Form_AfterDelConfirm (по значению Status-а) проводить/или нет "что-то еще" по значениям полученных в _Delete параметров. Вот. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2003, 12:02 |
|
||
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2003, 12:33 |
|
||
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
Пардон, конечно 'Делаем что-то еще' - на родину. Да и транзакцию моно по каждой записи (но это уже на вкус и цвет) Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2003, 12:43 |
|
||
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
2 assa Form_AfterDelConfirm плох тем, что: а) Его может и не быть - если подтверждения выключены (и этого уже достаточно чтобы зарубить использование этого события) б) Честно говоря, я не помню, попадает ли аксес в Form_AfterDelConfirm при нажатии "Отмена" в) не дай бог накопить чего лишнего на событии Delete 2 Erika Да понимаю я, что можно сделать полностью свое удаление. Но не буду я переопределять аксесовский интерфейс. Говоришь только кнопкой Delete? А Ctrl-X у тебя пользователи никогда не нажимают? Что мне, Ctrl-X тоже обрабатывать, причем еще и в буфер обмена данные писать ? Да и мало ли чего они еще могут придумать. Или придется объяснять юзерам, что это такая вот чудо формочка, из нее нельзя в буфер обмена записи вырезать.... не хочу я им ничего объяснять... лучше буду пытаться аксесовкие события использовать по их прямому предназначению. не получится совсем - тады ой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2003, 13:12 |
|
||
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
Лох, а ты уверен, что в буфер обмена что-то попадет при твоем Cancel=True с удалением из клона? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2003, 13:13 |
|
||
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
Хороший вопрос фак :((( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2003, 13:52 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32344030&tid=1677803]: |
0ms |
get settings: |
5ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
139ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
| others: | 207ms |
| total: | 443ms |

| 0 / 0 |
