0 / 0 / 0
Регистрация: 18.08.2008
Сообщений: 1,698
|
|
1 | |
ошибки Ado08.10.2009, 12:31. Показов 41693. Ответов 28
Метки нет (Все метки)
Всем привет!
И снова вопрос... у меня уже просто паника. Нужно отловить ошибки 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
|
08.10.2009, 12:31 | |
Ответы с готовыми решениями:
28
Ошибки + ADO + Access Ошибки ADO № 3001 и № 3021 ADO Post: ошибки во время выполннеия многошаговой операции ADO+MS SQL: как узнать количество обработанных строк при insert в ADO Query? |
0 / 0 / 0
Регистрация: 04.11.2007
Сообщений: 3,019
|
|
08.10.2009, 12:40 | 2 |
всё в лотусе есть
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 |
может разделом ошиблись? :(
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 |
ну так в чем проблема то? Ставите обработчик ЛОТУСИНЫЙ(если это у вас в лотусскрипте)! и уже ВНУТРИ него считываете ошибку поставщика: 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 оказывается надо писать так Код
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
Есть такие объекты ADODB.Connection, ADODB.RecordSet и т.д. Хотя собственно... вы же мне ссылку давали. Вы хоть иногда читаете то, что советуете другим?
0
|
0 / 0 / 0
Регистрация: 04.11.2007
Сообщений: 3,019
|
|
08.10.2009, 17:31 | 16 |
NickProstoNick
0
|
0 / 0 / 0
Регистрация: 18.08.2008
Сообщений: 1,698
|
|
08.10.2009, 17:39 | 17 |
Сообщение от ToxaRat
А еще надо читать пост внимательно! Я несколько раз говорил что читаю тот же сайт, который Вы мне рекомендовали! А после такого
Сообщение от ToxaRat
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
Сообщение от 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
Сообщение от NickProstoNick
хм, чудес не бывает. ADO обязательно что-нить возратит. хотя... сам на такие грабли не наступал.
0
|
11.10.2009, 11:11 | |
11.10.2009, 11:11 | |
Помогаю со студенческими работами здесь
20
ADO.NET Connection->ADO Connection Отличия ADO.NET'03 и ADO.NET'05 Найти ошибки в данной программе (известно что есть только 2 ошибки) Ошибки после компиляции на Visual Express 2012.Ошибки в теме Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |