Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
System sproc & @@ERROR
|
|||
|---|---|---|---|
|
#18+
В Query Analyzer запускаю системную процедуру которая падает. Как зацепить ошибку с помощью @@ERROR? Она почему то упрямо остается "0". Мне это нужно чтоб потом ее (ошибку) переслать client-у (Access). Thanks. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2001, 13:36 |
|
||
|
System sproc & @@ERROR
|
|||
|---|---|---|---|
|
#18+
Что за системная процедура, которая падает? Какое сообщение об ошибке выскакивает? Если никакое, то как ты определил, что она падает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2001, 14:06 |
|
||
|
System sproc & @@ERROR
|
|||
|---|---|---|---|
|
#18+
Все просто: процедура sp_setapprole падает по многим причинам, например повторный запуск на один connection, или неправильный пароль (SA поменял пароль, а в аппликации остался старый) и т.д..Все что нужно, это перехватить ошибку и передать ее в аппликацию так чтобы вместо ничего незначищего "ODBC-call failed" было смысловое сообщение. Или вот: есть процедура запускающая кучу всяких процедур (может бежать несколько часов). При запуске из Query Analyzer получаем все ошибки, а вот при запуске из аппликации- все та же фигня "ODBC-call failed". Есть идеи? Поможите граждане! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2001, 06:09 |
|
||
|
System sproc & @@ERROR
|
|||
|---|---|---|---|
|
#18+
Где-то на этом сервере я видел очень хорошую статью. Ниже выдержка из нее, может-поможет --------------------Набор объектов Errors объект Error--------------------------------- Набор объектов Errors и объект Error позволяют получить информацию о случившейся ошибке провайдера. Ошибки могут генерироваться вызовами методов или свойств объектов Connection, Command или Recordset, но всегда получаются из объекта Connection. Набор объектов Errors не существует сам по себе. Он зависит от объекта Connection и ошибок, лежащих ниже ADO (OLE DB провайдеры, ODBC драйверы и источники данных), которые помещаются в набор объектов Errors. Недопустимые значения свойств или ADO интерфейсов не добавляют объекты Error в набор объектов Errors. В наборе объектов Errors также запоминаются предупреждения (warnings). Предупреждения, в отличие от ошибок, не вызывают остановки выполнения кода. Объект Error позволяет получить описание и источник ошибки. При работе с ODBC провайдером из Error так же доступна информация об SQLSTATE и собственных ошибках БД (database-native error). Следующий пример показывает получение SQLSTATE, информации о собственной ошибке и описание ошибки при использовании ODBC провайдера. Dim Cn As New ADODB.Connection Dim Errs1 As ADODB.Errors Dim rs As New ADODB.Recordset Dim i As Integer Dim StrTmp On Error GoTo AdoError Cn.Open "pubs", "sa" Set rs = Cn.Execute("Select * From TableDoesnotExist") Done: ' Close all open objects. Cn.Close ' Destroy anything not destroyed yet. Set Cn = Nothing ' We're outta here. Exit Sub AdoError: Dim errLoop As Error Dim strError As String ' Enumerate Errors collection and display properties of ' each Error object. Set Errs1 = Cn.Errors For Each errLoop In Errs1 Debug.Print errLoop.SQLState Debug.Print errLoop.NativeError Debug.Print errLoop.Description Next GoTo Done Соединение с SQL Server устанавливается через источник данных - pubs. Запрос select * from TableDoesnotExist выполняется с помощью метода Execute объекта Connection. Так как в запросе выполняется попытка получить записи из несуществующей таблицы, то возникает ошибка. После возникновения ошибки выполнение программы переходит на метку AdoError. Далее из объекта Connection получается набор объектов Errors и связывается с набором объектов Errs1. Затем в цикле в окно отладчика выводится информация об ошибке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2001, 07:40 |
|
||
|
System sproc & @@ERROR
|
|||
|---|---|---|---|
|
#18+
Спасибо большое! Но позвольте усложнить задачу: нет ADO, есть DAO. Это раз. Запуск процедуры выполняется из Access с помощью PassThrough query. Это два. При запуске той же процедуры в Query Analyzer- @@ERROR ошибку не захватывает. Это три. Ну и как я уже говорил, ошибки вылетают ввиде "ODBC-call failed". Задача:получить что-то подобное ошибке которая вылетает в Results Pane но только в Access(e).Ну как??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2001, 12:40 |
|
||
|
System sproc & @@ERROR
|
|||
|---|---|---|---|
|
#18+
А вот так не поможет? declare @i int exec @i = sp_setapprole 'SalesApprole', 'AsDeFXX' if @i = 1 print 'Хрен вам!' if @i = 0 print 'Усе ОК' Думаю, что код выполнения процедуры можно взять и из ADO и из ODBC, надоть в BOL смотреть и в MSDN. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2001, 13:15 |
|
||
|
System sproc & @@ERROR
|
|||
|---|---|---|---|
|
#18+
2 Мусса 1)В Access2000 (in definition) можно использовать как DAO, так и ADO. 2)Запросы к серверу можно формировать из VB. Здесь появляется большое преимущество - возможность динамического формирования запросов и динамического обращения к различным источникам данных. -> Следовательно, у Вас не препятствий к тому, чтобы использовать коллекцию Errors. Я, например, все свои ссылки на DAO потихоньку переделываю на ADO - и Вам того советую ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2001, 13:48 |
|
||
|
System sproc & @@ERROR
|
|||
|---|---|---|---|
|
#18+
Молоток! Догадался! Да только во-первых: остается вопрос почему упала: пароль не тот али еще что-то, а во вторых не решает общую проблему: передача ошибки подобной той как в Results Pane но только в Access . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2001, 14:08 |
|
||
|
System sproc & @@ERROR
|
|||
|---|---|---|---|
|
#18+
Предыдущий пост относился к Genady... 2AlexUnik Согласен что ADO круче, но не я проект писал (я, в натуре не Пушкин, я в натуре Белинский)...Ну и процедуры переносить в код VBA это, пардон, не то... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2001, 14:21 |
|
||
|
System sproc & @@ERROR
|
|||
|---|---|---|---|
|
#18+
Мусса, при работе из проекта ADP Access-2000 любой raiserror посланный с сервера на клиенте выскакивает в виде акуратного окошка с тем самым сообщением, которое было в raiserror. Для этого даже не нужно программировать никаких MsgBox-ов. Юзеру остается только ознакомиться с ненормативной программистской лексикой (сленг-проф) и кликнуть по кнопочке ОК. Каждый член коллекции Errors содержит код ошибки и текст ошибки. Обработка ошибок проблем не вызывает (по крайней мере, на VB - на VBA был случай, когда нужно было подавить выдачу сообщения об ошибке, так и не придумал, как это сделать). Тебе совершенно верно посоветовали переходить на ADO. ODBC - это реликт вроде автомобиля на дровах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2001, 14:24 |
|
||
|
System sproc & @@ERROR
|
|||
|---|---|---|---|
|
#18+
Мне остается только посочувствовать тебе. На форуме MAUG данный вопрос задавался многократно, но кроме того, что ты уже тут услышал, никаких более вразумительных предложений так и не прозвучало. Судя по всему, их просто не существует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2001, 14:28 |
|
||
|
System sproc & @@ERROR
|
|||
|---|---|---|---|
|
#18+
Очень странно, что Вы не получаете сообщение об ошибке из QA. Попробуйте выполнить setuser @rolename, @password, @encrStyle и посмотреть, что получится. В SP стоит RAISERROR(15494,...) Это 1-е. По поводу автомобиля на дровах. OLEDB (он же ADO), ODBC и DBLIB суть сами ничего не выдумывают. Вопрос в степени обрезания и используемой версии TDS. Если сервер выполнил srv_sendmsg с соответствующими параметрами, то (при отсутствии ошибок сети типа BAD BIND TOKEN) NETLIB его обработает и передаст соотв. клинтскому обработчику. Как он его будет использовать: игнорировать,выдавать сообщение или вести журнал - исключительно на совести разработчика, исключая случаи, когда средства разработки (а не интерфейс доступа) считают, что ОНИ знают как им следует поступать. См. топик по поводу PRINT. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2001, 18:54 |
|
||
|
System sproc & @@ERROR
|
|||
|---|---|---|---|
|
#18+
>пароль не тот али еще что-то, А разве подобная проблема решается программно, без админа? Ну и кроме того, как уже писал Fompro сервер рейзит еррор, вот и разберите его, механизмы для этого существуют. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2001, 05:42 |
|
||
|
System sproc & @@ERROR
|
|||
|---|---|---|---|
|
#18+
Ребята, спасибо всем. Может просто я чайник непроходимый (это простительно, я по образованию не програмер, да и БД занимаюсь всего несколько месяцев) но вразумительного для себя ответа я так и не получил. Genady:>>пароль не тот али еще что-то,< А разве подобная проблема решается программно, без админа?< Да не надо мне решать проблему, мне о ней узнать надо в аппликации, да поподробней. А то сейчас приходится что бы понять что произошло запускать те же процедуры из QA. В любом случае, спасибо всем! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2001, 07:15 |
|
||
|
System sproc & @@ERROR
|
|||
|---|---|---|---|
|
#18+
>Да не надо мне решать проблему, мне о ней узнать надо в аппликации, да поподробней. Для этого например в ADO есть объект ADODB.Error В ODBC, тоже что то есть почитать просто нужно, в общем не понял я в чем проблема, получить информацию об ошибке по моему не сложная задача ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2001, 07:25 |
|
||
|
System sproc & @@ERROR
|
|||
|---|---|---|---|
|
#18+
Должен поправиться. Через ODBC текст ошибки тоже получаем. Проблема там несколько в другом. ODBC-драйвер кроме самого текста ошибки, поступающему из raiserror, к нему докручивает собственный текст примерно такого же объема, и отделить на клиенте зерна от плевел (получить исходный текст ошибки, посланный с SQL-сервера, без добавок ODBC-драйвера) становиться невозможно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2001, 07:36 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32008785&tid=1826287]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
58ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
70ms |
get tp. blocked users: |
2ms |
| others: | 253ms |
| total: | 429ms |

| 0 / 0 |
