|
|
|
в ленточной форме с необновляемым набором перехватить реакцию на попытку обновления записи
|
|||
|---|---|---|---|
|
#18+
За картинку спасибо, подготовил уже было пост А ну вот, вроде понял, как поместить на задний план контрол: оказывается , если на форме уже есть контрол, то вновь создаваемый нельзя засунуть под него нужно, таким образом , всегда вначале создать контролы заднего плана, а затем уже те, что будут их заслонять , наоборот не получается. (т.е. если дословно следовать шагам , приводлимым Latuk, то не получится, нужно наоборот, хотя у него Access2002, может там есть какой-то формат, который позволяет поместить на задний план...) Может я не прав, но пока это решение. Меня это ,конечно, сильно сбило , поэтому этот способ и получался. Но теперь с этим все OK. команда синхронизации нужна только для отображения результата редактирования на форме. Я понимаю, так вот пока не могу усечь , как добиться этого отображения для всех затронутых редактированием записей. мыла пока нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2004, 16:15:20 |
|
||
|
в ленточной форме с необновляемым набором перехватить реакцию на попытку обновления записи
|
|||
|---|---|---|---|
|
#18+
Код: 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. Форму Контакты_Q3 исправил Контакты1 -стандартный подход со строкой синхронизации с параметрами Контакты2 - динамически формируемая команда синхронизации без параметров см событие текущая запись WHERE Может быть любым каким захочеш главное чтобы запрос вернул строку с тем же перечнем полей и FROM бал такой же как у источника формы Выполни скрипт и создаш в своей базе ХП и вьюху Привяжи ADP к своей базе PS все я пошел пить пиво ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2004, 16:45:57 |
|
||
|
в ленточной форме с необновляемым набором перехватить реакцию на попытку обновления записи
|
|||
|---|---|---|---|
|
#18+
2yuniki ты бы скинул и мне бэкар базы и адп всё не нада только по теме чё-то заинтриговали мыло в профиле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2004, 19:29:18 |
|
||
|
в ленточной форме с необновляемым набором перехватить реакцию на попытку обновления записи
|
|||
|---|---|---|---|
|
#18+
2 Latuk> Спасибо, пример твой рассмотрел, НО , как , оказалось, он не дает решения о котором идет речь, приведены просто известные стандартные варианты редактирования полей одной уникальной таблицы , и о чем тогда копья ломать было ? Другими словами у меня был такой пост : потому что редактируется только одна таблица остальные же используются как справочники Вот из этого могу сделать вывод , что насчет команды синхронизации ничего сделать невозможно , так как у меня редактируются поля трех таблиц ( уже в n-й раз повторяю) в одной записи на форме.(Так было в MDB) Хотя , наверное , насчет этого надо отдельный топик сдлеать. ты на это ответил Вывод неправильный (см пример) редактировать можно все поля кроме тех которые со стороны LEFT & RIGHT Для которых отсутствует запись в соотв таблице но иэто можно обойти включив в запрос ключевые поля этих таблиц и проверяя их на NULL при попытке редактирования добавлять соотв запись в соотв таблицу И попробуй в своем примере отредактиовать поле КонтЛица.ФИО - получишь сообщение "Допускается измененение только полей из уникальной таблицы", а уникальную-то ты задал "Контакты". Поле КонтЛица.ФИО не подпадает под твои условия LEFT & RIGHT (см выше) Короче вопрос с командой синхронизации остается - а именно можно ли ее использовать для случая обновления записей после редактирования нескольких полей из разных баз Видимо, свойство уникальная таблица уже не понадобиться , т.к. придется делать триггеры INSTED OF и вью с VIEW_METADATA . А иначе никак не получается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2004, 20:22:30 |
|
||
|
в ленточной форме с необновляемым набором перехватить реакцию на попытку обновления записи
|
|||
|---|---|---|---|
|
#18+
>И попробуй в своем примере отредактиовать поле КонтЛица.ФИО - получишь сообщение У меня поле КонтЛица.ФИО легко редактируется и в Acc2002 и в Acc2003 возможно это спецефическая реакция 2000-го Из каких соображений выбран для разработки Acc2000 ? Там ADP-к откровенно сырой. но это легко обойти например как в примере от вадя сливать изменения самому используя для накопления данных свободный контрол и запуская динамически свормированную команду синхронизации для отображения изменений на форме или с подкладыванием свободного контрола у тебя тоже так и не получилось? Даже если совершенно необходимо сделать именно для Acc2000 то это тоже легко достаточно запустить профайлер и перенести реакцию Acc2002 на редактирование полей типа КонтЛица.ФИО на события после редактирования свободных контролов подложенных под поля соотв поля хотя я бы подумал всетаки о переходе для разработки ADP на Acc2002-2003 где все работает и так. в Acc2002 и в Acc2003 однозначная таблица используется только для того чтобы форма поняла значения ключевых полей из какой таблицы подставлять в качестве параметров в команду синхронизации. >Видимо, свойство уникальная таблица уже не понадобиться , т.к. придется делать >триггеры INSTED OF и вью с VIEW_METADATA . А иначе никак не получается. Для начала научись пользоватся простыми вещами. То как ты заполнил свойство команда синхронизации в своей форме (см. форму Контакты из примера) обнажает полное непонимание в этом вопросе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2004, 13:34:29 |
|
||
|
в ленточной форме с необновляемым набором перехватить реакцию на попытку обновления записи
|
|||
|---|---|---|---|
|
#18+
2 Latuk> 1) У меня поле КонтЛица.ФИО легко редактируется и в Acc2002 и в Acc2003 A что в A2002 свободно редактируются, добавляются,удаляются ВСЕ поля в предложенной мной форме Контакты ? 2) Даже если совершенно необходимо сделать именно для Acc2000 то это тоже легко достаточно запустить профайлер и перенести реакцию Здесь не понял , как и для чего ты предлагаешь профайлер 3) То как ты заполнил свойство команда синхронизации Это была просто попытка - посмотреть, что будет. В своем понимании я руководствуюсь Help A2000, в котором сказано , что МОЖНО РКДАКТИРОВАТЬ ТОЛЬКО ПОЛЯ ОДНОЗНАЧНОЙ ТАБЛИЦЫ. А что, Help A 2002 в этом месте другой что ли - я не думаю... 4) я бы подумал всетаки о переходе для разработки ADP на Acc2002-2003 где все работает и так Да , хорошо бы и так, но это надо переносить все наработки Office'ных приложений из 2000 в 2002, которых у меня немало, и я знаю, например, что Excel'ские у меня не переносились в XP например, как в 2002 будут - не знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2004, 20:24:20 |
|
||
|
в ленточной форме с необновляемым набором перехватить реакцию на попытку обновления записи
|
|||
|---|---|---|---|
|
#18+
2yuniki смотри почту ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2004, 21:10:45 |
|
||
|
в ленточной форме с необновляемым набором перехватить реакцию на попытку обновления записи
|
|||
|---|---|---|---|
|
#18+
так там оба файла есть и бекап C4 и ADP ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2004, 23:00:57 |
|
||
|
в ленточной форме с необновляемым набором перехватить реакцию на попытку обновления записи
|
|||
|---|---|---|---|
|
#18+
>A что в A2002 свободно редактируются, добавляются,удаляются ВСЕ поля в предложенной мной форме Контакты ? редактируются свободно , но в сделанных мной формах Контакты1 и Контакты2 c правильной командой синхронизации удаляются строки из однозначной таблицы свободно в принципе если стандартная реакция не подходит довольно легко сделать реакцию на удаление такой как хочется добавлятся мешают индексы по полям не присутствующим на форме думаю это не большое препятствие >Здесь не понял , как и для чего ты предлагаешь профайлер Запускаеш профайлер запускаеш Acc2002 Юзаеш форму и смотриш какие команды выполняются на сервере при редактировании тех или иных полей прописываеш их для Acc2000 вручную например при редактировании поля ФИО в моей форме Контакты1 происходит следущее Код: plaintext 1. 2. 3. 4. 5. 6. >Это была просто попытка - посмотреть, что будет. Не знаю чем ты руководствовался но когда в твоей форме Контакты я вижу что RecordSource=ResyncCommand=UniqueTable="Q1View" я делаю соотв. выводы >Help A 2002 в этом месте другой что ли - я не думаю На заборе тоже написано,а попробывать слабо? >но это надо переносить все наработки Office'ных приложений из 2000 в 2002 Во первых не такая уж и большая переделка (в отличии скажем от 97->2000) Во вторых что мешает юзать оба аксеса одновременно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2004, 14:10:16 |
|
||
|
в ленточной форме с необновляемым набором перехватить реакцию на попытку обновления записи
|
|||
|---|---|---|---|
|
#18+
2 Latuk> 1) Насчет >И попробуй в своем примере отредактиовать поле КонтЛица.ФИО - получишь сообщение У меня поле КонтЛица.ФИО легко редактируется и в Acc2002 и в Acc2003 возможно это спецефическая реакция 2000-го Это не просто "спецефическая реакция 2000-го" , это ,как написано в его Help, принципальный момент, т.е. в A2000 запрещается редактировать любые поля , кроме полей уникальной таблицы. А A2002, кроме всего прочего, у меня нет, так , что в его Help на этот счет сказано, не могу посмотреть, и ты, вообще говоря,тоже об этом молчишь. Хотя то, что у тебя редактируется в A2002 поле ФИО конечно смущает. Кстати, насчет перехода на A2002 (уж тогда логичнее сразу весь Office 2002), это не так просто - нужно весь завод будет переводить, а там есть и слабые компы, которые могут не потянуть, да и сам объем работы не маленький, не говоря уж о том, что нужно будет убедить народ. 2) перенести реакцию Acc2002 на редактирование полей типа КонтЛица.ФИО на события после редактирования свободных контролов подложенных под поля соотв поля Тут тоже обнаружил проблемы - если делать me.Recordset.update ПОСЛЕ редактирования свободных контролов, то получится, что источник 2 раза апдейтится, второй раз будет при выходе из текущей обновленной записи - форма сама еще раз проапдейтит его, а это нехорошо как-то. Вообще - то на этот счет мне непонятно : Как вообще в ленточной форме явно апдейтить запись, т.е. на какие события формы надо делать me.Recordset.update , можно ли менять свойства Me.Recordset.LockType ,Me.Recordset.CursorType ,me.RecordsetType , как организовать явную транзакцию в форме. Т.е. когда форма сама оптимистическим способом занимается обновлением источника, то этих вопросов нет, а когда явно это нужн осделать самому, то тут - проблемы. 3) И вот еще что - ResyncCommand должна задаваться в синтаксисе T_SQL ? Ну, например, WHERE с константой datetime как " WHERE Дата = '" & Format(Me.Дата, "mm.dd.yyyy") & "'" PS. Пока бьюсь в 2000-м - сделал вариант с триггером INSTEAD OF UPDATE, View ... WITH VIEW_METADATA , поля на форме стали редактироваться, правда при этом пришлось их обрабатывать как свободные контролы. Все в форме редактируется, запись в базе обновляется, но при этом выходит, зараза, сообщение, что "Данные, добавленные в базу данных, не будут отображены в форме, так как они противоречат условиям на базовый источник записей." Делаю me.Requery в Form_AfterUpdate - не помогает .Точнее говоря, туда и не приходит управление. Результат правки (корректный надо сказать) виже после перезагрузки формы, UniqueTable можно при WITH VIEW_METADATA поставить только Q1View , а ResyncCommand вообще не ставлю, так как в Help сказано, что она отвечает только за правильиное отображение записи после редактирования, а я этог же могу добиться с помощью me.Requery для формы, вот только приведеное выше зараза не дает это сделать (но не при любых правках,и когда дает , то все OK). Вот таки дела. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2004, 18:19:38 |
|
||
|
в ленточной форме с необновляемым набором перехватить реакцию на попытку обновления записи
|
|||
|---|---|---|---|
|
#18+
>но при этом выходит, зараза, сообщение Патамушта >ResyncCommand вообще не ставлю и это совсем не то же самое что me.Requery >там есть и слабые компы, которые могут не потянуть, Не баись у мине 2002-й работал на P1-200 под Win98 даже быстрее чем 2000-й >да и сам объем работы не маленький если хотябы Win2K то все можно сделать не отрываясь от стула плагин скриптами на крайний случай есть рунтайм версия которая пакуется в инсталятор делов останется - запустить у юзера под админскими правами Чаво админа нет? Все сам делаеш? >ResyncCommand должна задаваться в синтаксисе T_SQL это запрос не важно как оформлен (ХП или строка) должен иметь FROM такой же как у источника, и возвращать одну строку с таким же кол-вом и типом полей как у источника формы. Если использовать параметры "?" то форма подставит туда значение ключевых полей однозначной таблицы почитай у Гетца хорошо описанно. >" WHERE Дата = '" & Format(Me.Дата, "mm.dd.yyyy") & " почитай FAQ PS Голова болит а руки делают ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2004, 08:48:56 |
|
||
|
в ленточной форме с необновляемым набором перехватить реакцию на попытку обновления записи
|
|||
|---|---|---|---|
|
#18+
>ResyncCommand должна задаваться в синтаксисе T_SQL ? конкретно для твоего случая SELECT * FROM Q1View WHERE [Дата]=? AND [IdKlienta]=? или для динамической сборки без параметров поскольку у табе id счетчик для однозначной идентификации строки будет вполне достаточно Me.ResyncCommand="SELECT * FROM Q1View WHERE " & Me!id ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2004, 09:00:35 |
|
||
|
в ленточной форме с необновляемым набором перехватить реакцию на попытку обновления записи
|
|||
|---|---|---|---|
|
#18+
поправочка Me.ResyncCommand="SELECT * FROM Q1View WHERE id=" & Me!id ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2004, 09:01:57 |
|
||
|
в ленточной форме с необновляемым набором перехватить реакцию на попытку обновления записи
|
|||
|---|---|---|---|
|
#18+
А вот это уже интересно ! Возникает такой интересный вопрос по этому поводу : Если Resync делается c помощью Select * from Q1View ..., а Q1View состоит из нескольких таблиц, то какие поля и в каком порядке будут образовывать там "первичный ключ" , ведь именно это определяет то, как задавать параметры в ResyncCommand ????????????? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2004, 12:44:18 |
|
||
|
в ленточной форме с необновляемым набором перехватить реакцию на попытку обновления записи
|
|||
|---|---|---|---|
|
#18+
Наверно еще нужно добавить, что у меня однозначная таблица Q1View, по другому при при WITH VIEW_METADATA нельзя, и если как ты пишешь Если использовать параметры "?" то форма подставит туда значение ключевых полей однозначной таблицы почитай у Гетца хорошо описанно. то и возникает вопрос какие поля и в каком порядке будут ключевыми в этом случае ? Это, как японимаю, для задания параметров посредством "?" важно . PS. Если бы у меня еще и Гетц был ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2004, 12:58:47 |
|
||
|
в ленточной форме с необновляемым набором перехватить реакцию на попытку обновления записи
|
|||
|---|---|---|---|
|
#18+
если форма не может определить ключевые поля для однозначной идентификации строки она делает фильтр по всем полям Код: plaintext 1. а заполнять команду синхронизации динамически Private Sub Form_Current() Me.ResyncCommand = "SELECT * FROM Q1View WHERE id=" & Me!Id End Sub ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2004, 13:38:20 |
|
||
|
в ленточной форме с необновляемым набором перехватить реакцию на попытку обновления записи
|
|||
|---|---|---|---|
|
#18+
для однозначной идентификации строки она делает фильтр по всем полям Да я тоже это увидел в профайлере, но это для Update , а если посмотреть , что будет при me.recordset.Resync adAffectCurrent , то оказывается , что даже при при такой провокационной команде, как Код: plaintext 1. 2. 3. Код: plaintext 1. 2. 3. 4. IdДолжность,IdКонтЛица,Дата,IdKlienta,КрНаим т.е. НЕ ВСЕ при синхронизации она использует, а только необходимые, Это кстати, вроде как способ, в этой ситуации разобраться как задавать ResynCommand c "?" А насчет " твоем случае гораздо проще не парится с таким кол-вом параметров а заполнять команду синхронизации динамически" - это я тоже понял, что красивее это и использую. Просто по поводу неявной параметризации было интересно - ее ведь не надо формировать динамически, что есть преимущество , форма сама сформирует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2004, 15:18:28 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32812294&tid=1669942]: |
0ms |
get settings: |
7ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
21ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 229ms |
| total: | 326ms |

| 0 / 0 |
