После переноса базы данных Oracle в SQL Server 2016 возникла проблема в приложении VB 6.0 - PullRequest
0 голосов
/ 23 января 2020

В существующих соединениях vb и oracle он показывает ошибку деталей без обработки

ORA-00907: missing right parenthesis
ORA-06512: at "SYS.DBMS_SYS_SQL", line 826
ORA-06512: at "SYS.DBMS_SQL", line 32
ORA-06512: at "EST.D_SQL", line 13
ORA-06512: at "EST.P_VAL_C", line 512
ORA-06512: at "EST.P_EST_MAIN", line 29
ORA-06512: at "EST.P_EST_C", line 31
ORA-06512: at line 2

, но после миграции Oracle базы данных в SQL Сервер 2016 сталкивается с проблемой в приложении VB 6.0, т.е. какая-то ошибка происходит в хранимой процедуре бэкэнда, которая не будет отображаться во внешнем приложении, это проблема драйвера, который использует соединение, или же

In sql server & VB 6.0 application using : Provider='sqloledb'

In oracle & VB 6.0 application using : Provider=MSDASQL' DSN Connection

in some procedure if i execute procedure in SSMS it's showing error like


> Msg 8114, Level 16, State 5, Procedure p1no, Line 14 [Batch Start Line 45]  
Error converting data type varchar to numeric.

but in vb application when i execute from front end showing like given below and not showing main procedure or sub procedure name and line no.

> Run-time error -2147xxxxxxx  
> Error converting data type varchar to numeric.

Пожалуйста, помогите

1 Ответ

1 голос
/ 23 января 2020

Обработка ошибок VB6 не пересылает подробности SQL ошибок сервера, она только выдает HRESULT (-2147... число) и читаемое человеком сообщение об ошибке.

Для получения более подробной информации от SQL Ошибка сервера в VB6 (и VBA, и в некоторой степени VBScript) приведена в этой статье:

https://support.microsoft.com/en-us/help/167957/info-extracting-error-information-from-ado-in-vb

Извлечение информации об ошибках из ADO в VB

Используйте коллекцию .Errors вашего ADODB.Connection объекта.

VB6 не поддерживает try/catch/finally, но у него есть On Error Goto..., которого будет достаточно:

' Ensure ADO is a referenced library instead of using late-bound objects.

Sub RunMe()

    Dim c As Connection
    Set c = New Connection()

    On Error GoTo CatchAdoError ' This is roughly equivalent to a `try` statement, except much worse.

    c.ConnectionString = "..."

    Call DoSomething c

    ' No error happened, so return immediately so execution doesn't enter the `CatchAdoError` label's block
    Exit Sub

CatchAdoError:

    ' Iterate through the error details:
    Dim errorDetails As String
    errorDetails = ""

    For Each adoError In c.Errors

        errorDetails = errorDetails adoError.Description & vbCrLf
        errorDetails = errorDetails adoError.Source & vbCrLf & vbCrLf

    Next

    Call MsgBox errorDetails

End Sub

Sub DoSomething( c As Connection )

    ' Your main logic goes here

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...