Ошибка в макросе

Автор adi_den2013, 24 сентября 2013, 14:58

0 Пользователи и 1 гость просматривают эту тему.

adi_den2013

Function Main2
Dim del As String
Dim add As String
Dim sErrorMsg As String
Dim oStatement As Object
Dim oDBSource As Object
Dim oConnection As Object
Dim oDatabaseContext As Object

On Error GoTo SQLErrorHandler

oDatabaseContext = createUnoService( "com.sun.star.sdb.DatabaseContext" )
oDBSource = oDatabaseContext.GetByName("balans")
oConnection = oDBSource.GetConnection("", "")   
oStatement = oConnection.createStatement()
oStatement.ResultSetConcurrency = com.sun.star.sdbc.ResultSetConcurrency.UPDATABLE
del = "DELETE FROM ""BALANS"""
add = "INSERT INTO ""BALANS"" SELECT * FROM ""Сводная"""
oStatement.executeQuery(del)
oStatement.executeQuery(add)

       SQLErrorHandler:
       sErrorMsg = "Error: " & Err & ", line " & Erl & " in (" & sFunctionName & "). " & Chr$(13) & Chr$(13) & Error$
       msgbox (sErrorMsg, 16, "ErrorHandler")
       End Function


Где ошибка? Помогите плиз.

[вложение удалено Администратором]
Яна (in real)

Hasim

Нет там ошибок.
Выполните только "DELETE FROM ""BALANS""" и посмотрите таблицу BALANS - записи удалились.
Затем
Выполните только "INSERT INTO ""BALANS"" SELECT * FROM ""Сводная""" и опять посмотрите таблицу BALANS - записи появились.

Hasim

Прикладывайте образцы файлов!

adi_den2013

#3
Цитата: Hasim от 24 сентября 2013, 13:50Нет там ошибок.

Синтаксически - нет. Компилятор не находит.

Почему, тогда срабатывает On Error GoTo SQLErrorHandler?

Выполнила команды DELETE и INSERT INTO по отдельности - действительно отрабатывает. Спасибо. Закомментирую и SQLErrorHandler. И ладно.
Яна (in real)

Hasim

А он и не срабатывает!
Вы забыли отключить срабатывание SQLErrorHandler даже при отсутствии ошибки.
Нужно было перед SQLErrorHandler: вставить Exit Function, чтобы не срабатывал впустую блок ошибки.
ЦитироватьFunction Main2
Dim del As String
Dim add As String
Dim sErrorMsg As String
Dim oStatement As Object
Dim oDBSource As Object
Dim oConnection As Object
Dim oDatabaseContext As Object

On Error GoTo SQLErrorHandler

oDatabaseContext = createUnoService( "com.sun.star.sdb.DatabaseContext" )
oDBSource = oDatabaseContext.GetByName("balans")
oConnection = oDBSource.GetConnection("", "")   
oStatement = oConnection.createStatement()
oStatement.ResultSetConcurrency = com.sun.star.sdbc.ResultSetConcurrency.UPDATABLE
del = "DELETE FROM ""BALANS"""
add = "INSERT INTO ""BALANS"" SELECT * FROM ""Сводная"""
oStatement.executeQuery(del)
oStatement.executeQuery(add)

Exit Function

       SQLErrorHandler:
       sErrorMsg = "Error: " & Err & ", line " & Erl & " in (" & sFunctionName & "). " & Chr$(13) & Chr$(13) & Error$
       msgbox (sErrorMsg, 16, "ErrorHandler")
End Function

adi_den2013

Цитата: Hasim от 24 сентября 2013, 14:19Вы забыли отключить срабатывание SQLErrorHandler даже при отсутствии ошибки.
Нужно было перед SQLErrorHandler: вставить Exit Function, чтобы не срабатывал впустую блок ошибки.
Ясно. Только осваиваю написание макросов. Спасибо, теперь буду обращать внимание.
Яна (in real)