Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / System sproc & @@ERROR / 17 сообщений из 17, страница 1 из 1
02.07.2001, 13:36
    #32008723
Mycca
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
System sproc & @@ERROR
В Query Analyzer запускаю системную процедуру которая падает. Как зацепить ошибку с помощью @@ERROR? Она почему то упрямо остается "0". Мне это нужно чтоб потом ее (ошибку) переслать client-у (Access).
Thanks.
...
Рейтинг: 0 / 0
02.07.2001, 14:06
    #32008729
Garya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
System sproc & @@ERROR
Что за системная процедура, которая падает? Какое сообщение об ошибке выскакивает? Если никакое, то как ты определил, что она падает?
...
Рейтинг: 0 / 0
03.07.2001, 06:09
    #32008751
Mycca
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
System sproc & @@ERROR
Все просто: процедура sp_setapprole падает по многим причинам, например повторный запуск на один connection, или неправильный пароль (SA поменял пароль, а в аппликации остался старый) и т.д..Все что нужно, это перехватить ошибку и передать ее в аппликацию так чтобы вместо ничего незначищего "ODBC-call failed" было смысловое сообщение.
Или вот: есть процедура запускающая кучу всяких процедур (может бежать несколько часов). При запуске из Query Analyzer получаем все ошибки, а вот при запуске из аппликации- все та же фигня "ODBC-call failed". Есть идеи? Поможите граждане!
...
Рейтинг: 0 / 0
03.07.2001, 07:40
    #32008756
AlexUnik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
System sproc & @@ERROR
Где-то на этом сервере я видел очень хорошую статью. Ниже выдержка из нее, может-поможет

--------------------Набор объектов 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. Затем в цикле в окно отладчика выводится информация об ошибке.
...
Рейтинг: 0 / 0
03.07.2001, 12:40
    #32008779
Mycca
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
System sproc & @@ERROR
Спасибо большое!
Но позвольте усложнить задачу: нет ADO, есть DAO. Это раз.
Запуск процедуры выполняется из Access с помощью PassThrough query. Это два. При запуске той же процедуры в Query Analyzer- @@ERROR ошибку не захватывает. Это три. Ну и как я уже говорил, ошибки вылетают ввиде "ODBC-call failed". Задача:получить что-то подобное ошибке которая вылетает в Results Pane но только в Access(e).Ну как???
...
Рейтинг: 0 / 0
03.07.2001, 13:15
    #32008782
Genady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
System sproc & @@ERROR
А вот так не поможет?


declare @i int
exec @i = sp_setapprole 'SalesApprole', 'AsDeFXX'
if @i = 1 print 'Хрен вам!'
if @i = 0 print 'Усе ОК'

Думаю, что код выполнения процедуры можно взять и из ADO и из ODBC, надоть в BOL смотреть и в MSDN.
...
Рейтинг: 0 / 0
03.07.2001, 13:48
    #32008783
AlexUnik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
System sproc & @@ERROR
2 Мусса
1)В Access2000 (in definition) можно использовать как DAO, так и ADO.
2)Запросы к серверу можно формировать из VB. Здесь появляется большое преимущество - возможность динамического формирования запросов и динамического обращения к различным источникам данных.
-> Следовательно, у Вас не препятствий к тому, чтобы использовать коллекцию Errors. Я, например, все свои ссылки на DAO потихоньку переделываю на ADO - и Вам того советую
...
Рейтинг: 0 / 0
03.07.2001, 14:08
    #32008785
Mycca
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
System sproc & @@ERROR
Молоток! Догадался! Да только во-первых: остается вопрос почему упала: пароль не тот али еще что-то, а во вторых не решает общую проблему: передача ошибки подобной той как в Results Pane но только в Access .
...
Рейтинг: 0 / 0
03.07.2001, 14:21
    #32008787
Mycca
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
System sproc & @@ERROR
Предыдущий пост относился к Genady...
2AlexUnik Согласен что ADO круче, но не я проект писал (я, в натуре не Пушкин, я в натуре Белинский)...Ну и процедуры переносить в код VBA это, пардон, не то...
...
Рейтинг: 0 / 0
03.07.2001, 14:24
    #32008788
Garya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
System sproc & @@ERROR
Мусса, при работе из проекта ADP Access-2000 любой raiserror посланный с сервера на клиенте выскакивает в виде акуратного окошка с тем самым сообщением, которое было в raiserror. Для этого даже не нужно программировать никаких MsgBox-ов. Юзеру остается только ознакомиться с ненормативной программистской лексикой (сленг-проф) и кликнуть по кнопочке ОК. Каждый член коллекции Errors содержит код ошибки и текст ошибки. Обработка ошибок проблем не вызывает (по крайней мере, на VB - на VBA был случай, когда нужно было подавить выдачу сообщения об ошибке, так и не придумал, как это сделать). Тебе совершенно верно посоветовали переходить на ADO. ODBC - это реликт вроде автомобиля на дровах.
...
Рейтинг: 0 / 0
03.07.2001, 14:28
    #32008789
Garya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
System sproc & @@ERROR
Мне остается только посочувствовать тебе. На форуме MAUG данный вопрос задавался многократно, но кроме того, что ты уже тут услышал, никаких более вразумительных предложений так и не прозвучало. Судя по всему, их просто не существует.
...
Рейтинг: 0 / 0
03.07.2001, 18:54
    #32008809
Fompro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
System sproc & @@ERROR
Очень странно, что Вы не получаете сообщение об ошибке из QA. Попробуйте выполнить
setuser @rolename, @password, @encrStyle
и посмотреть, что получится. В SP стоит RAISERROR(15494,...)
Это 1-е.
По поводу автомобиля на дровах.
OLEDB (он же ADO), ODBC и DBLIB суть сами ничего не выдумывают. Вопрос в степени обрезания и используемой версии TDS. Если сервер выполнил srv_sendmsg с соответствующими параметрами, то (при отсутствии ошибок сети типа BAD BIND TOKEN) NETLIB его обработает и передаст соотв. клинтскому обработчику. Как он его будет использовать: игнорировать,выдавать сообщение или вести журнал - исключительно на совести разработчика, исключая случаи, когда средства разработки (а не интерфейс доступа) считают, что ОНИ знают как им следует поступать. См. топик по поводу PRINT.
...
Рейтинг: 0 / 0
04.07.2001, 05:42
    #32008825
Genady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
System sproc & @@ERROR
>пароль не тот али еще что-то,
А разве подобная проблема решается программно, без админа?

Ну и кроме того, как уже писал Fompro сервер рейзит еррор, вот и разберите его, механизмы для этого существуют.
...
Рейтинг: 0 / 0
04.07.2001, 07:15
    #32008841
Mycca
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
System sproc & @@ERROR
Ребята, спасибо всем. Может просто я чайник непроходимый (это простительно, я по образованию не програмер, да и БД занимаюсь всего несколько месяцев) но вразумительного для себя ответа я так и не получил.
Genady:>>пароль не тот али еще что-то,< А разве подобная проблема решается программно, без админа?<
Да не надо мне решать проблему, мне о ней узнать надо в аппликации, да поподробней. А то сейчас приходится что бы понять что произошло запускать те же процедуры из QA.
В любом случае, спасибо всем!
...
Рейтинг: 0 / 0
04.07.2001, 07:25
    #32008843
Genady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
System sproc & @@ERROR
>Да не надо мне решать проблему, мне о ней узнать надо в аппликации, да поподробней.
Для этого например в ADO есть объект ADODB.Error
В ODBC, тоже что то есть почитать просто нужно, в общем не понял я в чем проблема, получить информацию об ошибке по моему не сложная задача
...
Рейтинг: 0 / 0
04.07.2001, 07:36
    #32008844
Garya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
System sproc & @@ERROR
Должен поправиться. Через ODBC текст ошибки тоже получаем. Проблема там несколько в другом. ODBC-драйвер кроме самого текста ошибки, поступающему из raiserror, к нему докручивает собственный текст примерно такого же объема, и отделить на клиенте зерна от плевел (получить исходный текст ошибки, посланный с SQL-сервера, без добавок ODBC-драйвера) становиться невозможно.
...
Рейтинг: 0 / 0
04.07.2001, 18:08
    #32008910
Fompro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
System sproc & @@ERROR
Всё можно получить без лишней информации.
Надо только отделить зёрна от плевел. Кстати, помимо SQLGetDiagRec, старая SQLError тоже прекрасно работает.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / System sproc & @@ERROR / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]