|
|
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
Долгая предыстория. Делаю я тут "триггер для бедных" - надо отследить удаление записи в форме и сделать еще несколько действий, желательно в транзакции. Просто использовать событие Form_Delete не могу: 1. Во-первых удаление еще не произошло 2. Во-вторых оно может и не произойти - если удаляются несколько записей и пользователь нажмет "Нет" (при включенной опции "Подтверждение удаления записей") 3. В-третьих ни о какой транзакции нельзя и мечтать (патамушта Access 97) Немного извращаюсь (упрощенный код): Код: plaintext 1. 2. 3. 4. Все хорошо, за одним НО: в форме остается запись "#Удалено#" Requery в FormDelete не всунешь ("Операция не поддерживается в транзакции", причем транзакция - на моя, а скрытая аксесовксая). От безысходности всунул Requery в Current, т.е. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Уже лучше, но Requery не срабатывает при удалении последней записи, да еще какое-то странное моргание происходит. И текущая запись слетает (текущей становится первая). Решил, что надо от всего этого избавиться. Конец предыстории. Чесал репу. Долго думал. Сделал совсем извратно. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Работает как часы. Удаленная запись из формы исчезает, текущая запись не портится, в общем все прекрасно. ГДЕ ЗАСАДА??? И почему это только при втором вызове Delete? Если только один Delete - то запись удаляется, "#Удалено#" остается (чего и следовало ожидать). Второй (хоть и заканчивается с ошибкой) - запись исчезает без следа. Сори за длинный пост, но уж больно страшно такие фишки в рабочую програму втыкать не посоветовавшись с мировым сообществом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2003, 16:28 |
|
||
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
У меня, как всегда, нет окончательного ответа, но есть альтернативная идея. Делай так, как написал в предыстории, но только не в Current, а в таймере. И, наверно, запоминать Bookmark тоже понадобится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2003, 16:39 |
|
||
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
2ЛП Акес97 с SP2? Я тут с МСДН нашел хрень (похожую /чуть-чуть/ на твою проблему) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2003, 16:57 |
|
||
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
2 Саныч Про таймер я помню. Но блин реквери по таймеру... ужас... некрасиво. К тому же мигает оно как-то гораздо больше одного раза. Опять некрасиво. Вот так и живу - одно решение кривое, другое - страшное. 2 Виктор Сенин Угу. SP2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2003, 17:07 |
|
||
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
Чтобы не мигало, сделай Echo Off. :^) Мне тебя учить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2003, 17:09 |
|
||
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
Ох, ЛП, аж в груди защемило. В onDelete что-то делать - смерти подобно. Вспомни топик Лифчика кажется - он при этом открывал какую-то левую форму - и удаление не происходило. На таймер вешаться - тоже бесполезно, если сетка медленная, то таймер может и не отработаться: пользователь нажал удаление, пока программа обработки делита "чухается", он жмет еще одно удаление, и обработка первой записи по таймеру не происходит. Если только стек организовать какой-нибудь. Причем отмена удаления происходит не только в случае открытия формы. У меня бывает, что лишнюю строчку добавишь в обработку delet'a - запись вроде-бы удаляется, закрываешь/открываешь форму - а она тут как тут. Засада. И это на access XP SP 2 и Jet SP 7. Вообще тоска. Если придумаешь супер-триггеры для DAO на удаление - положи сюда, пожалуйста - я тоже ими пользоваться буду :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2003, 17:11 |
|
||
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
Есть другое решение. НЕ ДЕЛАТЬ Cancel=True. Стирать все как в первом классе. А все проверки делать ДО стирания. То есть: проверка, и если стирание отменено, то Cancel=True и все, иначе доверяем Аксессу стереть запись самому и "делаем что-то еще". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2003, 17:15 |
|
||
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
Наверно, я что-то не понимаю :) А зачем вообще в методе 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2003, 17:17 |
|
||
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
Гео предупреждалВ onDelete что-то делать - смерти подобно Угугу. Только я формочек всяких не открываю, Msgbox'ов не выкидываю, и вообще только с рекордсетами работаю. Должно справиться. Саныч предлагалА все проверки делать ДО стирания. А мне надо после :( И Cancel = True у меня только для того, чтобы удаление самому сделать. И, помимо удаления что-то еще в данных подправить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2003, 17:20 |
|
||
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
2 Erika Выдели 10 записей и удали их таким образом. Мало того что пользователь озвереет на кнопку Ок жать, там он еще в конце Отмену нажмет (когда сам аксес спросит "Не уверены ли вы что вы не хотите не удалять эти записи если да нажмите нет"). А ты все свои дела уже сделал... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2003, 17:22 |
|
||
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
авторА мне надо после :( Не представляю, чтобы нельзя было добавить в алгоритм where id<>current. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2003, 17:25 |
|
||
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
2 Erika Мне транзакция нужна не сама по себе, а именно чтоб аксесовское удаление записи в нее попало. А оно, к сожалению, в скрытом аксесовском workspace'е происходит. В 2000-м и выше можно с Me.Recordset поиграть, а в 97-м - нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2003, 17:25 |
|
||
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
Вот у меня на столе лежит книжка ACCESS 97, там есть описание как работают в нём транзакции... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2003, 17:27 |
|
||
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
2 Саныч еще раз Мне не надо отменять удаление. Мне надо обеспечить увязать аксесовскую операцию (удаление записи) со своими. Обеспечить атомарность. Т.к. аксес и я работаем в разных workspace'ах, то приходится херить аксесовское удаление и делать свое (в моем workspace'е). 2 Mihonin Ну вот, щас меня транзакциям будут учить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2003, 17:28 |
|
||
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
2 Лох Позорный Дык, MsgBox для примера приведен. Вместо него - вставляешь свою проверку, по результатам которой решаешь, Cancel = True или False. И все остальные свои "что-то еще" по результатам проверки. По крайней мере, удалять в этом событии текущую запись ручками - это только если хочется поиметь массу проблем и нестабильность работы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2003, 17:29 |
|
||
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
Лох, а чтО это за такие проверки, которые надо делать обязательно после стирания? И почему так уж принципиально нельзя проделать их до? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2003, 17:31 |
|
||
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
2 Лох >>3. В-третьих ни о какой транзакции нельзя и мечтать (патамушта Access 97) Не надо мечтать, они там есть по заявлению Корнелюк, Веккер, Зиновьев (авторы той книги которая лежит) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2003, 17:33 |
|
||
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
2 Erica & Саныч Да не нужны мне проверки. Ненужныыыыыы Мне трииггггееерррр нууужжжееееннннн!!!! 2 Erica еще раз Ну убери Msgbox, и что? Я писалон еще в конце Отмену нажмет (когда сам аксес спросит "Не уверены ли вы что вы не хотите не удалять эти записи если да нажмите нет"). А ты все свои дела уже сделал... С этим как бороться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2003, 17:36 |
|
||
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
А почему тогда ты не можешь доверить Аксессу стирать обычным образом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2003, 17:38 |
|
||
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
Патамушта он может и не стеереееееееть.... (постепенно проваливаясь по уши в какое-то г..) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2003, 17:40 |
|
||
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
не получится триггер на а97 проваливайся потихоньку в г.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2003, 17:43 |
|
||
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
А если он не сотрет, то поставишь Cancel, и тогда не будет ни стирания, ни обработки. Что еще??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2003, 17:43 |
|
||
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
Саныч вопрошалА почему тогда ты не можешь доверить Аксессу стирать обычным образом? А еще патамушта на событии Delete запись еще не удалена из базового набора, а после собственно удаления мне остается только таймер ловить. Неужто действительно придется ID-шник удаляемой записи запоминать и самому себе говорить - "ЭТОЙ ЗАПИСИ НЕТ! НЕ ВЕРЬ ГЛАЗАМ СВОИМ!" Так и придется видимо... (выныривая из какого-то г..) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2003, 17:45 |
|
||
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
2 Хам Спасибо на добром слове. 2 Саныч А если он не сотрет, то поставишь Cancel Да где ж я его поставлю? Все Form_Delete уже отработали, вся работа сделана, пришло BeforeDelConfirm, AfterDelConfirm не пришло (юзер отмену нажал). Что, опять таймер? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2003, 17:48 |
|
||
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
авторА еще патамушта на событии Delete запись еще не удалена из базового набора Ну так и хорошо. Самое время проделать всю обработку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2003, 17:50 |
|
||
|
Два раза подряд 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 |
|
||
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
ЛП, так мой совет не помог? :( Странно... У меня прекрасно работает... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2003, 14:13 |
|
||
|
Два раза подряд RecordsetClone.Delete - какая-то фича недокументированная
|
|||
|---|---|---|---|
|
#18+
2 Нуф-Нуф Твой совет помог. Вообще ниче не понимаю. Теперь и совсем без Requery работает, и записи пропадают. Пойду чесать репу. 2 Саныч по поводу буфера обмена Таки при отмене аксесовского удаления в буфер копируется. О как! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2003, 14:30 |
|
||
|
|

start [/forum/topic.php?all=1&fid=45&tid=1677803]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
151ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
101ms |
get tp. blocked users: |
1ms |
| others: | 211ms |
| total: | 516ms |

| 0 / 0 |
