Форум программистов, компьютерный форум, киберфорум
HCL Notes: Программирование
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.79/226: Рейтинг темы: голосов - 226, средняя оценка - 4.79
0 / 0 / 0
Регистрация: 18.08.2008
Сообщений: 1,698
1

ошибки Ado

08.10.2009, 12:31. Показов 41693. Ответов 28
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет!
И снова вопрос... у меня уже просто паника.
Нужно отловить ошибки ADO.
Вот есть такая строчка templDoc.Form = Record.Fields.Item( "fgdfhk" ).Value
Понятное дело поля с таким именем fgdfhk нет.
Возникает ошибка... к сожалению в lotusscript нет отдельной ошибки на отсутствие поля, но есть в ADO.
припопытке перебрать коллекцию ошибок ADO ничего не получается. Коллекция пуста :(
перебираю так

Код
    Forall oError In ADOConnection.Errors

strTmp = strTmp & " ADO Error # " & oError.Number
strTmp = strTmp & " Description:" & oError.Description
strTmp = strTmp & " Source: " & oError.Source

End Forall
Читаю тут

В связи с тем, что в обсуждении пошла теория - перефразирую вопрос.
Кто реально пробовал обрабатывать ошибки ADO? У кого это получилось?

А то обсуждение становится похожим на шутку (за ранее прошу прощения, ничего личного)


чем отличаются русский, американский и еврейский форумы?

на американском форуме вы задаете вопрос и вам дают ответ
на еврейском форуме вы задаете вопрос и вам задают встречный вопрос
на русском форуме вы задаете вопрос и вам долго объясняют почему вы такой *цензура*.
так... пока разводили демагогию - нашел некоторые ошибки в интерпретации кода.
оказывается надо писать так

Код
for i = 0 to ADOConnection.Errors.Count - 1

Set oError = ADOConnection.Errors.Item( i )
....

next
Так что часть вопросов я уже решил.

ПОКА остается такая ошибка:
эта конструкция templDoc.Form = Record.Fields.Item( "fgdfhk" ).Value генерирует ТОЛЬКО исключение Notesa
хотя по идее должно еще возникать ошибка поставщика данных.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.10.2009, 12:31
Ответы с готовыми решениями:

Ошибки + ADO + Access
У меня есть база данных в Аксесе подключена к клиенту в Делфи там есть заказы при одновременном...

Ошибки ADO № 3001 и № 3021
Ничего не могу понять на моей машине ADO - работает наормально, а на удаленной не понятно из-за...

ADO Post: ошибки во время выполннеия многошаговой операции
var t1,t,t3:boolean; begin if Edit13.Text='' then begin ShowMessage('Код Сотрудника Не...

ADO+MS SQL: как узнать количество обработанных строк при insert в ADO Query?
Добрый день. При выполнении запроса в MS SQL insert into ..(,,) select 0,20,'Text' where...

28
0 / 0 / 0
Регистрация: 04.11.2007
Сообщений: 3,019
08.10.2009, 12:40 2
к сожалению в lotusscript нет отдельной ошибки на отсутствие поля
if Doc.HasItem("Name") then

всё в лотусе есть
0
0 / 0 / 0
Регистрация: 18.08.2008
Сообщений: 1,698
08.10.2009, 12:47 3
ToxaRat
Причем тут лотус? Мне надо проверять ADO! Читай внимательно
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
08.10.2009, 12:50 4
я не знаю ADO, и не вижу смысла его использования...
возможно там и есть обходные маневры по получению ошибок...
но хочется напомнить про существование jdbc
0
0 / 0 / 0
Регистрация: 18.08.2008
Сообщений: 1,698
08.10.2009, 12:57 5
lmike , спасибо конечно... но я не прошу совета по поводу альтернатив!?
У меня есть конкретная задача, мне надо решить проблему
0
0 / 0 / 0
Регистрация: 04.11.2007
Сообщений: 3,019
08.10.2009, 13:24 6
Причем тут лотус? Мне надо проверять ADO! Читай внимательно
тогда чего вы хотите от лотусистов?
может разделом ошиблись? :(
0
0 / 0 / 0
Регистрация: 18.08.2008
Сообщений: 1,698
08.10.2009, 13:35 7
Цитата Сообщение от ToxaRat
тогда чего вы хотите от лотусистов?
может разделом ошиблись? :(
Вы явно не внимательны и выдергиваете фразы из контекста.
Я разве спросил "Как проверить наличие поля в документе?"
По моему не. И даже не спросил как проверить наличие поля в ADO.
Суть моего вопроса - как обработать ошибки ADO.
Почему именно эти ошибки? - потому что в Lotusscript мало исключений касательно Ole-объектов.

Хотя может вы не знаете как работать с ADO... тогда вопросов нет
0
0 / 0 / 0
Регистрация: 04.11.2007
Сообщений: 3,019
08.10.2009, 14:53 8
Код
set conn=Server.CreateObject("ADODB.Connection")
conn.Provyder="Microsoft.Jet.OLEDB.4.0"
conn.Open "c:/webdata/northwind.mdb"

set rs=Server.CreateObject("ADODB.recordset")
rs.Open "Select * from Customers", conn

for each x in rs.fields
response.write(x.name)
response.write(" = ")
response.write(x.value)
next
проходите по всем полям и просекайте каких нету

это не наши проблемы, что мелкософт в своём ADO не спобен отловить ваши ошибки
0
0 / 0 / 0
Регистрация: 18.08.2008
Сообщений: 1,698
08.10.2009, 15:03 9
Ребята, вы прикалываетесь или реально не понимаете сути вопроса?
Вопрос как ОБРАБОТАТЬ ошибку,а не как ее предотвратить!
0
0 / 0 / 0
Регистрация: 04.11.2007
Сообщений: 3,019
08.10.2009, 15:29 10
NickProstoNick
у вас в том, что вы пишите(так как ваше изначальное лотусскрипт как я понял не лотус) есть обработчик ошибок?
там наверно есть код ошибки и номер строки где вызвана ошибка?
в чем проблема отловить строку templDoc.Form = Record.Fields.Item( "fgdfhk" ).Value и подвязать код, что ошибка именно из-за отсуствия поля?


Код
on error goto err1
......
templDoc.Form = Record.Fields.Item( "fgdfhk" ).Value
.....
exit sub

err1:
if err=91 and erl=2 then - обработка ошибки;)
0
0 / 0 / 0
Регистрация: 18.08.2008
Сообщений: 1,698
08.10.2009, 15:44 11
ToxaRat
вот этим вот ты отловишь ошибку Notesa

Public Const ErrObjectVariableNotSet = 91

А надо отлавливать ошибку COM
Public Const ErrOLEException = 213

только вот к сожалению, под это исключение может попасть куча разных ошибок поставщика данных.
Мне надо классифицировать ошибки! Что именно произошло? Поле отсутствует или просто к нему нет доступа. А не просто ошибка 213
0
0 / 0 / 0
Регистрация: 04.11.2007
Сообщений: 3,019
08.10.2009, 16:25 12
только вот к сожалению, под это исключение может попасть куча разных ошибок поставщика данных.
Мне надо классифицировать ошибки! Что именно произошло? Поле отсутствует или просто к нему нет доступа. А не просто ошибка 213
замечательно, мы наконец-то нашли общий язык

ну так в чем проблема то?
Ставите обработчик ЛОТУСИНЫЙ(если это у вас в лотусскрипте)!
и уже ВНУТРИ него считываете ошибку поставщика:
http://www.w3schools.com/ado/ado_ref_error.asp

Код
for each objErr in objConn.Errors
response.write("<p>")
response.write("Description: ")
response.write(objErr.Description & "<br />")
response.write("Help context: ")
response.write(objErr.HelpContext & "<br />")
response.write("Help file: ")
response.write(objErr.HelpFile & "<br />")
response.write("Native error: ")
response.write(objErr.NativeError & "<br />")
response.write("Error number: ")
response.write(objErr.Number & "<br />")
response.write("Error source: ")
response.write(objErr.Source & "<br />")
response.write("SQL state: ")
response.write(objErr.SQLState & "<br />")
response.write("</p>")
next
и тем самым вытяните, что же было не так, и если нужно в самом лотусином обработчике вернетесь назад или пойдете другим путем

такой ответ вас устроит? :(
0
0 / 0 / 0
Регистрация: 18.08.2008
Сообщений: 1,698
08.10.2009, 16:41 13
ToxaRat
ты первый пост читал? Ссылку смотрел?
Мне не нужна теория!
Ты практически пробовал делать о том что нашел в инете?

Перефразирую вопрос.

Кто реально пробовал обрабатывать ошибки ADO? У кого это получилось?

не все что ты написал работает в Lotusscript
например вот эта конструкция

Код
for each objErr in objConn.Errors
даже если ее переписать так ForAll и т.д. не применима для обработки ошибок... доказано опытным путем.
оказывается надо писать так

Код
for i = 0 to objConn.Errors.Count - 1

Set objErr = objConn.Errors.Item( i )
....

next
Так что часть вопросов я уже решил.
ПОКА остается такая ошибка:
эта конструкция templDoc.Form = Record.Fields.Item( "fgdfhk" ).Value генерирует ТОЛЬКО исключение Notesa
хотя по идее должно еще возникать ошибка поставщика данных
0
0 / 0 / 0
Регистрация: 04.11.2007
Сообщений: 3,019
08.10.2009, 16:49 14
NickProstoNick
ндаа...
или вы чего-то не понимаете, или я
ADO вы как берете?
через ODBC или JDBC?
0
0 / 0 / 0
Регистрация: 18.08.2008
Сообщений: 1,698
08.10.2009, 17:07 15
Цитата Сообщение от ToxaRat
NickProstoNick
ндаа...
или вы чего-то не понимаете, или я
ADO вы как берете?
через ODBC или JDBC?
Молодой человек, вы меня пугаете! ADO через ODBC - очень интересно! На прямую через COM не пробовали?
Есть такие объекты ADODB.Connection, ADODB.RecordSet и т.д.
Хотя собственно... вы же мне ссылку давали. Вы хоть иногда читаете то, что советуете другим?
0
0 / 0 / 0
Регистрация: 04.11.2007
Сообщений: 3,019
08.10.2009, 17:31 16
NickProstoNick


Так что часть вопросов я уже решил.
ПОКА остается такая ошибка:
эта конструкция templDoc.Form = Record.Fields.Item( "fgdfhk" ).Value генерирует ТОЛЬКО исключение Notesa
хотя по идее должно еще возникать ошибка поставщика данных
большую часть я вам уже обьяснил, дальше пожалуй разжевывать откажусь, не нравится мне ваша корона и ваш тон...
0
0 / 0 / 0
Регистрация: 18.08.2008
Сообщений: 1,698
08.10.2009, 17:39 17
Цитата Сообщение от ToxaRat
большую часть я вам уже обьяснил, дальше пожалуй разжевывать откажусь, не нравится мне ваша корона и ваш тон...
Ну так надо помогать по существу, а не теоретизировать!
А еще надо читать пост внимательно! Я несколько раз говорил что читаю тот же сайт, который Вы мне рекомендовали!

А после такого


Цитата Сообщение от ToxaRat
ADO вы как берете?
через ODBC или JDBC?
страшно спрашивать о чем-то другом!
0
0 / 0 / 0
Регистрация: 13.10.2005
Сообщений: 848
08.10.2009, 20:31 18
очень интересная дискуссия )))
вставлю свои 5 копеек.

давно это было, но на сколько помню ADO может соединяться с источником напрямую, а также используя ODBC (по крайней мере на Windows), может и еще как.
ник, думаю проблема в том, что Вы не можете однозначно идентифицировать ошибку, т.к. они накапливаются. я очищал контейнер ошибок после обработки.
ниже отрывок рабочего (когда-то) кода:


Код
****************************************************Описание****************
**************************************************
08.02.2006
Класс позволяет соединяться с SQL хранилищем и выполнять запросы.
Все функции возвращают true, в случае удачи, или false, в случае неудачи.
В случае возникновения ошибок переменной "ErrorString" присваивается соответствующий текст.
****************************************************************************
******************************************************
Class ADOConnect
con As Variant
ErrorString As String
ErrorNum As Long

Sub new
ErrorString = ""
End Sub

Property Get GetErrorString As String
GetErrorString = ErrorString
End Property
Property Get GetErrorNum As Long
GetErrorNum = ErrorNum
End Property

Function OpenConnectWithODBC(ODBCName As String, UserName As String, Password As String) As Boolean
****************************************************Описание****************
**************************************************
Фунция соединяется с ODBC источником
Возвращаемое значение: true - если все нормально; false - если произошла ошибка.
В случае неудачного подключения к ODBC источнику
переменной "ErrorString" присваивается соответствующий текст
****************************************************************************
******************************************************
On Error Goto errorhandler
OpenConnectWithODBC = False

Set con = CreateObject("ADODB.Connection")

Con.ConnectionString = "Data Source=" & ODBCName & ";UID=" & UserName & ";PWD=" & Password
Con.Open

OpenConnectWithODBC = True
Ex:
Exit Function
errorhandler:
ErrorString = "ADOConnect: OpenConnectWithODBC: Не удалось подключиться к ODBC источнику" &_
". Код ошибки: " & Cstr(con.Errors.Item(0).Number) &_
". Ошибка: " & con.Errors.Item(0).Description
ErrorNum = con.Errors.Item(0).Number
con.Errors.Clear
Resume ex
End Function

Function OpenConnectWithDBName(ServerName As String, DBName As String, UserName As String, Password As String) As Boolean
****************************************************Описание****************
**************************************************
Фунция соединяется с SQL хранилищем напрямую, минуя ODBC
Возвращаемое значение: true - если все нормально; false - если произошла ошибка.
В случае неудачного подключения к ODBC источнику
переменной "ErrorString" присваивается соответствующий текст
****************************************************************************
******************************************************
On Error Goto errorhandler
Dim conStr As String
OpenConnectWithDBName = False

Set con = CreateObject("ADODB.Connection")

conStr = "Provyder=SQLOLEDB.1;Password=" & Password &_
";Persyst Security Info=True;User ID=" & UserName &_
";Initial Catalog=" & DBName &_
";Data Source=" & ServerName

Con.ConnectionString = conStr
Con.Open
OpenConnectWithDBName = True
Ex:
Exit Function
errorhandler:
ErrorString = "ADOConnect: OpenConnectWithDBName: Не удалось подключиться к бд" &_
". Код ошибки: " & Cstr(con.Errors.Item(0).Number) &_
". Ошибка: " & con.Errors.Item(0).Description
ErrorNum = con.Errors.Item(0).Number
con.Errors.Clear
Resume ex
End Function

Function ExecSQLQuery(SQLQuery As String) As Boolean
****************************************************Описание****************
**************************************************
Фунция выполняет sql команду. Данные не возвращает!
Возвращаемое значение: true - если все нормально; false - если произошла ошибка.
В случае возникновения ошибки переменной "ErrorString" присваивается соответствующий текст.
****************************************************************************
******************************************************
On Error Goto errorhandler
ExecSQLQuery = False

con.Execute SQLQuery, , 1
If Len(con.Errors.Item(0).Description) > 0 Then Error 2006

ExecSQLQuery = True
Ex:
Exit Function
errorhandler:
ErrorString = "ADOConnect: ExecSQLQuery: Не удалось выполнить sql команду" &_
". Код ошибки: " & Cstr(con.Errors.Item(0).Number) &_
". Ошибка: " & con.Errors.Item(0).Description
ErrorNum = con.Errors.Item(0).Number
con.Errors.Clear
Resume ex
End Function

Function ExecStoredProcedure(StoredProcedureName As String) As Boolean
****************************************************Описание****************
**************************************************
Фунция выполняет хранимую процедуру.
Возвращаемое значение: true - если все нормально; false - если произошла ошибка.
В случае возникновения ошибки переменной "ErrorString" присваивается соответствующий текст.
****************************************************************************
******************************************************
On Error Goto errorhandler
ExecStoredProcedure = False

con.Execute StoredProcedureName, , 4
If con.Errors.Count > 0 Then
Goto errorhandler
End If
ExecStoredProcedure = True
Ex:
Exit Function
errorhandler:
ErrorString = "ADOConnect: ExecStoredProcedure: Не удалось выполнить хранимую процедуру" &_
". Код ошибки: " & Cstr(con.Errors.Item(0).Number) &_
". Ошибка: " & con.Errors.Item(0).Description
ErrorNum = con.Errors.Item(0).Number
con.Errors.Clear
Resume ex
End Function

Function CloseConnect As Boolean
****************************************************Описание****************
**************************************************
Фунция отключает от источника.
Возвращаемое значение: true - если все нормально; false - если произошла ошибка.
****************************************************************************
******************************************************
On Error Goto errorhandler
CloseConnect = False

con.Close
Delete con
CloseConnect =True
Ex:
Exit Function
errorhandler:
ErrorString = "ADOConnect: CloseConnect: Не удалось отключиться к ODBC источника" &_
". Код ошибки: " & Cstr(con.Errors.Item(0).Number) &_
". Ошибка: " & con.Errors.Item(0).Description
ErrorNum = con.Errors.Item(0).Number
con.Errors.Clear
Resume ex
End Function
End Class
0
0 / 0 / 0
Регистрация: 18.08.2008
Сообщений: 1,698
11.10.2009, 10:25 19
Цитата Сообщение от oshmianski
ADO может соединяться с источником напрямую, а также используя ODBC
В этом я ОЧЕНЬ сильно сомневаюсь


Цитата Сообщение от oshmianski
думаю проблема в том, что Вы не можете однозначно идентифицировать ошибку
На ошибку натолкнулся совершенно случайно... вот какой парадокс случился....
вот эта конструкция templDoc.Form = Record.Fields.Item( "fgdfhk" ).Value генерирует ошибку Notesa и самое интересное - описание ошибки "ADODB.Fields: Не удается найти объект в семействе, соответствующий требуемому имени или порядковому номеру." а ошибка ADO не генерируется при этом. как это поставщик данных не знает что у него нет поля?
0
0 / 0 / 0
Регистрация: 13.10.2005
Сообщений: 848
11.10.2009, 11:11 20
Цитата Сообщение от NickProstoNick
В этом я ОЧЕНЬ сильно сомневаюсь
коллега, попробуйте функцию OpenConnectWithODBC в скрипте, что я выложил.



Цитата Сообщение от NickProstoNick
а ошибка ADO не генерируется при этом
т.е. лотусовая Error возвращает описание ошибки, а ADO контейнер ошибок пуст?
хм, чудес не бывает. ADO обязательно что-нить возратит.
хотя... сам на такие грабли не наступал.
0
11.10.2009, 11:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.10.2009, 11:11
Помогаю со студенческими работами здесь

ADO.NET Connection->ADO Connection
Может, кто-нибудь знает, как ссылку на объект Connection из ADO.NET преобразовать в ссылку на...

Отличия ADO.NET'03 и ADO.NET'05
Друзья, есть ли отличия в технологии ADO.NET для 2003 и для 2005, и насколько они велики? Вопрос...

Найти ошибки в данной программе (известно что есть только 2 ошибки)
У меня в модуле с програмирования задание: Найти ошибки в данной программе (известно что есть...

Ошибки после компиляции на Visual Express 2012.Ошибки в теме
Добрый вечер ребят помогите пожалуйста.Программа написана на Visual Express 2012.Обясните что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru