|
|
|
сообщения об ошибках в ADP
|
|||
|---|---|---|---|
|
#18+
Как ADP заставить выдавать родные сообщения об ошибках от скл-сервера? Подробнее: есть adp, который используется как интерфейс для редактирования таблиц. Если пользователь вводит некорректные данные (не заполнил обязательное поле, юник констрэйнт нарушил, вместо числа - буквы и т.д.), то ему выдаётся "тупое" сообщение (у разных пользователей по разному): 1. There was a problem accessing property or method of OLE object 2. Interface is not supported 3. пустой мессадж-бокс с снопкой ОК. Хотелось бы видеть: can not insert null value, value is not consistent with the data type of column, can not insert duplicate key, etc. Везде access2k+SR1, sql2k+sp3, win2000+sp4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2004, 13:15:33 |
|
||
|
сообщения об ошибках в ADP
|
|||
|---|---|---|---|
|
#18+
Перейти на access2002 (XP) там это устранено. возможно поможет последний MDAC на каждого клиента ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2004, 13:40:12 |
|
||
|
сообщения об ошибках в ADP
|
|||
|---|---|---|---|
|
#18+
ну а если перейти нельзя и mdac везде 2.8 где чего подкрутить? кстати, причём тут mdac, если сообщение об ошибке "прячет" именно аксес? если делать то же самое на рекордсетах - текст ошибки "родной" - с сервера ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2004, 13:43:01 |
|
||
|
сообщения об ошибках в ADP
|
|||
|---|---|---|---|
|
#18+
у меня подкрутилось только переходом на 2002-й авторкстати, причём тут mdac, если сообщение об ошибке "прячет" именно аксес? я же говорил возможно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2004, 13:45:17 |
|
||
|
сообщения об ошибках в ADP
|
|||
|---|---|---|---|
|
#18+
Насколько я понял проблему автора вопроса, тут дело в коде самого Access 2000, и обновление MDAC тут не поможет. Это документировано в MSDN. Я впервые столкнулся с этим в 2000-м году, тогда же методом "научного тыка" нашёл удовлетворительное решение, и лишь совсем недавно ясно понял природу проблемы и как её решить практически полностью (на Access 2000, конечно - справедливо было указано, что на Access 2002 вопрос неактуален). Проблема в том, что "родные" сообщения об ошибках MS SQL Server выводятся только тогда, когда действие инициируется кодом самого Access (в ответ на интерактивные действия пользователя). Если же мы попытаемся, к примеру, сохранить запись, например, так - Код: plaintext Два решения: 1) Довольно быстро я догадался, как снять остроту проблемы (простым перебором всех возможных вариантов). Как уже сказано, если запись сохраняется командой из меню, а не пользовательским кодом, то текст сообщения об ошибке, пришедшей с сервера, показывается правильный. Решение очевидно - всякий раз, когда кодом нам нужно сохранить запись, используем имитацию нажатий клавиш, приводящих к сохранению записи самим Access'ом (аргумент True важен, поскольку в большинстве случаев нужна синхронная обработка команды): Код: plaintext 2) Хотя приведённое выше решение оказалось на практике вполне приемлемым, я долгое время искал способ преодолеть его очевидные ограничения - хотелось бы заменять малопонятные для обычного пользователя сообщения об ошибках сервера на английском языке на свои. Проблема тут в том, что никаким способом (включая перехват события Error формы и исследование свойств коллекции Errors ADO) невозможно получить ни код ошибки сервера, ни её текст - везде всё те же 2757 "There was a problem accessing property or method of OLE object". И лишь совсем недавно, читая статью в MS KB (написанную совершенно по другому поводу), я понял, что надо сделать: отлавливать события объекта Recordset формы. В тот же вечер я это всё с успехом реализовал, так что задача была почти решена. "Почти" - это, во-первых, потому, что код ошибки MS SQL Server получить, видимо, в Access 2000 принципиально невозможно (так что придётся устраивать разбор строки ошибки), а во-вторых, потому, что не всегда при нарушениях целостности данных ошибка генерируется сервером: в некоторых случаях "умный" Access отображает ошибку, даже не посылая данные на сервер. В последнем случае описанный метод не работает и перехватить такое событие своим кодом, похоже, никак нельзя. Только после того, как я всё это реализовал самостоятельно, я натолкнулся на статью Сергея Вакшуля, который прошёл тем же путём, что и я, ещё в 2002 году: http://www.hiprog.com/access/article.asp?id=365 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2004, 16:42:21 |
|
||
|
сообщения об ошибках в ADP
|
|||
|---|---|---|---|
|
#18+
У меня ADP в A2000+SP3, MDAC2.8ru, MsSQL2000+SP3 А что таким путем не работает что-ли (у меня вроде работает): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2004, 17:31:30 |
|
||
|
сообщения об ошибках в ADP
|
|||
|---|---|---|---|
|
#18+
2 Тимур Рахимов: у меня сохранение происходит штатными средствами аксеса, а не через код. и ошибка всё равно та же (There was a problem accessing property or method of OLE object). Попробовал как в статье - работает. Хотя проблема теперь другая - прописать во всех формах этот код. 2 yuniki: у меня форма вообще без кода! вставкой и обновлением записей занимается сам аксес. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2004, 17:38:40 |
|
||
|
сообщения об ошибках в ADP
|
|||
|---|---|---|---|
|
#18+
2 yuniki: у меня форма вообще без кода! вставкой и обновлением записей занимается сам аксес. Мне просто интересно, у меня-то Access2000 и даже, если форма без кода - все-равно о нарушениях целостности выходят адекватые американские сообщения, проблема только в том, чтоб их MsSQL посылал по русски. Мне тут (вернее на MsSQL говорили, что можно это сделать за счет спец. свойств полей в таблицах). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2004, 17:56:34 |
|
||
|
сообщения об ошибках в ADP
|
|||
|---|---|---|---|
|
#18+
yuniki: В моём случае так не работало - коллекция Errors объекта CurrentProject.Connection была во всех случаях пуста (Access SP3,MS SQL 2000 SP3). Возможно, это поправлено, начиная с MDAC 2.8 (я не проверял - мне пришлось добиваться работоспособности кода на предыдущих версиях). Однако проблему скрытия Access'ом сообщения сервера об ошибке в случае программного сохранения записи (замены его на "There was...") MDAC 2.8, похоже, всё таки не решает. Но, судя по строкам Код: plaintext 1. ваш код написан для MDB? В таком случае это вряд ли может служить аргументом, ведь мы обсуждаем, если не ошибаюсь, ADP? Dmitry Biryukov: Если описанное вами поведение происходит не в результате действия вашего кода, а в ответ на выбор команды из встроенного меню, то это глюк. В этом случае, возможно, переустановка компонентов или всей программы в целом должна помочь. Ещё раз: на вашей конфигурации (Access 2000 SR1, MS SQL 2000 SP3) у меня сообщение об ошибке, пришедшее с сервера, надёжно отображается в виде системного message box'а с единственной кнопкой ОК (но только в случае, если попытка сохранения записи инициировалась самим Access'ом, а не моим кодом). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2004, 17:58:58 |
|
||
|
сообщения об ошибках в ADP
|
|||
|---|---|---|---|
|
#18+
yunikiМне просто интересно, у меня-то Access2000 и даже, если форма без кода - все-равно о нарушениях целостности выходят адекватые американские сообщения, проблема только в том, чтоб их MsSQL посылал по русски. У меня в точности то же самое, и здесь нет никакой проблемы (к сожалению, как я понял, у автора вопроса уже на этом этапе затруднения). Проблемы начинаются, когда сохранение записи инициируется нашим кодом, а не Access'ом, и продолжаются, когда мы хотим заменить системные сообщения, пришедшие с сервера, на свои. yunikiМне тут (вернее на MsSQL говорили, что можно это сделать за счет спец. свойств полей в таблицах). Ссылочку не дадите? Что-то мне кажется, что речь тут идёт о sp_addextendedproperty , но это решение, как я думаю, для другой задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2004, 18:09:20 |
|
||
|
сообщения об ошибках в ADP
|
|||
|---|---|---|---|
|
#18+
Тимур Рахимов yunikiМне тут (вернее на MsSQL говорили, что можно это сделать за счет спец. свойств полей в таблицах). Ссылочку не дадите? Что-то мне кажется, что речь тут идёт о sp_addextendedproperty , но это решение, как я думаю, для другой задачи. я дам :-) надо для логина установить default language = russian ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2004, 18:16:24 |
|
||
|
сообщения об ошибках в ADP
|
|||
|---|---|---|---|
|
#18+
Dmitry Biryukovнадо для логина установить default language = russian Да, при условии, что таблица sysmessages в master содержит варианты сообщений на русском языке (не у всех это так), это несколько облегчит ситуацию. Но, к сожалению, не решит проблему: в большинстве случаев системные сообщения, даже будучи переведёнными на русский язык, останутся пользователю непонятными. Чтобы сообщение было им понятно, оно должно быть сформулировано в понятиях предметной области, для которой написана ваша программа, так что всё равно есть потребность в замене системных сообщений на свои (уникальные для этой конкретной программы). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2004, 18:27:51 |
|
||
|
сообщения об ошибках в ADP
|
|||
|---|---|---|---|
|
#18+
Что касается вот этого: Тимур РахимовНо, судя по строкам yuniki Код: plaintext 1. ваш код написан для MDB? В таком случае это вряд ли может служить аргументом, ведь мы обсуждаем, если не ошибаюсь, ADP? Я проверил, это действительно для ADP. Извиняюсь. Если бы у меня так работало, не пришлось бы городить такой огород. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2004, 18:31:26 |
|
||
|
сообщения об ошибках в ADP
|
|||
|---|---|---|---|
|
#18+
2 Тимур Рахимов > 1) Ссылочку не дадите? Что-то мне кажется, что речь тут идёт о sp_addextendedproperty, но это решение, как я думаю, для другой задачи. Да , конечно об этом, весь нюанс в том, как назвать это свойство, назвать его надо спец именем : /topic/139815&pg=-1&hl=sp+addextendedproperty (Сорри,Поставить нормально ссылку в этом редакторе для меня непосильная задача) Правда , у меня самого так не получилось.А хотелось... Т.к. довольно красиво получается. Если Вам интересно и у Вас получится , напишите на мыло yuniki@ramler.ru 2) Насчет "Чтобы сообщение было им понятно, оно должно быть сформулировано в понятиях предметной области, для которой написана ваша программа, так что всё равно есть потребность в замене системных сообщений на свои (уникальные для этой конкретной программы)." Сам так считаю. Но просто было интересно добиться того же от MsSQL, что мы имеем в Access - MDB (по русски). Т.к. зачастую, Access использую именно для облегченной быстрой разработки, а его сообщения в MDB (пусть абстрактные от Приложения) все-равно пользователя так не бесят, как английские, и даже более того, - можно использовать их во многих случаях, особенно если и таблицы и поля в них на русском, Не зря же для англоязычных они считаются нормальными (хотя, конечно для приложения надо бы поближе к теме, но на среднем уровне и так сойдет) 3) Моя конфигурация описана выше и вроде как сообщения адекватные от MsSQL идут, поэтому еще раз хотелось бы уточнить - ваши ошибки проявляются ВСЕГДА в описанных ситуациях ? 4) проект у меня действительно ADP. Там просто замечание осталось о том, что было бы в MDB. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2004, 19:30:03 |
|
||
|
сообщения об ошибках в ADP
|
|||
|---|---|---|---|
|
#18+
автор (Сорри,Поставить нормально ссылку в этом редакторе для меня непосильная задача) // - помогают ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2004, 19:37:21 |
|
||
|
сообщения об ошибках в ADP
|
|||
|---|---|---|---|
|
#18+
yuniki: Что касается такого способа подмены системных серверных сообщений о нарушениях целостности - Код: plaintext 1. Я проверил, всё прекрасно работает. Но... в Access 2002! И выше (наверное). Спасибо за подсказку - я не знал, что кроме MS_Description , Access может использовать ещё-какие-то свойства серверных объектов. А в Access 2000 по прежнему приходится рассчитывать только на свои силы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2004, 22:33:15 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32835812&tid=1669655]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
32ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 202ms |
| total: | 325ms |

| 0 / 0 |
