Выполнение запросов в транзакции — КиберПедия 

Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

Выполнение запросов в транзакции

2017-12-12 209
Выполнение запросов в транзакции 0.00 из 5.00 0 оценок
Заказать работу

Const ME_NAME = "Выполнение запросов в транзакции"

Global FORM_WITH_TRANS As Form

 

Public Function ExecuteTrans(STATUS_STRING As String, queries() As String, Optional ClearStatusString As Boolean = True, _

Optional WithoutTrans As Boolean = False) As Boolean

Static ACTIVE As Boolean

Dim L As Integer, U As Integer, c As Integer, i As Integer

Dim wsp As Workspace, dbs As Database, on_transaction As Boolean

Dim s As String

Dim qa As String

 

On Error GoTo ErrHandler

 

ExecuteTrans = False

 

If Not CheckVersion() Then Exit Function

 

L = LBound(queries)

U = UBound(queries)

c = U - L + 1

If c < 1 Then Exit Function

 

If ACTIVE Then

OpenForm "Сообщение_F",,,,, acDialog, "Не завершено выполнение" & vbNewLine & "предыдущей операции",, False

Exit Function

End If

 

ACTIVE = True

DoCmd.Hourglass True

 

If Not WithoutTrans Then

Set wsp = DBEngine.Workspaces(0)

wsp.IsolateODBCTrans = True

 

wsp.BeginTrans

on_transaction = True

End If

 

Set dbs = CurrentDb

For i = L To U

SysCmd acSysCmdInitMeter, STATUS_STRING & "..." & i & "/" & c, c

SysCmd acSysCmdUpdateMeter, i

 

If queries(i) <> "" Then dbs.Execute queries(i), dbFailOnError

DoEvents

Next i

If Not WithoutTrans Then

wsp.CommitTrans dbForceOSFlush

on_transaction = False

End If

 

ExecuteTrans = True

 

'обновление активности после выполнения транзакции

qa = "UPDATE Активные_пользователи SET Активные_пользователи.TRANSACT_LAST = Now()" & vbNewLine

qa = qa & "WHERE KOD_USER = " & DLookup("KOD_USER", gWORK_PLACE) & " AND COMP=" & DLookup("NUM_COMPUTER", gWORK_PLACE)

dbs.Execute qa

 

ExitFunction:

If ClearStatusString Then SysCmd acSysCmdClearStatus: DoCmd.Hourglass False

ACTIVE = False

Exit Function

 

ErrHandler:

If on_transaction Then wsp.Rollback

DoCmd.Hourglass False

ACTIVE = False

 

Select Case Err.NUMBER

Case 3022 'Нарушение уникальности индекса

OpenForm "Сообщение_F",,,,, acDialog, "Нарушение уникальности индекса" & vbNewLine & "Запрос№" & i & ": " & queries(i),, False

 

Case 3167 'Запись удалена

OpenForm "Сообщение_F",,,,, acDialog, _

"Не удалось провести изменения из-за" & vbNewLine & _

"конфликта с изменениями другого" & vbNewLine & _

"пользователя!" & vbNewLine & _

"Попробуйте внести изменения еще раз!" & vbNewLine & "Запрос№" & i & ": " & queries(i),, False

 

Case 3200 'Удаление или изменение записи невозможно. В таблице '$' имеются связанные записи.

OpenForm "Сообщение_F",,,,, acDialog, _

"Изменение невозможно!" & vbNewLine & _

"Ведет к нарушению целостности данных!" & vbNewLine & "Запрос№" & i & ": " & queries(i),, False

Case 3218, 3260 'Обновление невозможно; блокировка установлена пользователем '$' на машине '$'.

OpenForm "Сообщение_F",,,,, acDialog, _

"Не удалось провести изменения в" & vbNewLine & _

"документе, так как в данный момент" & vbNewLine & _

"выполняется обработка данных на" & vbNewLine & _

"другом компьютере!" & vbNewLine & _

"Подождите немного и попробуйте внести" & vbNewLine & _

"изменения еще раз!" & vbNewLine & "Запрос№" & i & ": " & queries(i),, False

 

Case 3265 'Item not found in this collection

OpenForm "Сообщение_F",,,,, acDialog, "Нет такого запроса: " & vbNewLine & queries(i),, False

 

Case 3316 'Товар_остатки_подробно

OpenForm "Сообщение_F",,,,, acDialog, _

"Операция не может быть выполнена!" & vbNewLine & _

Err.DESCRIPTION

 

Case 3035 'Недостаточно системных ресурсов

OpenForm "Сообщение_F",,,,, acDialog, _

"Недостаточно системных ресурсов!" & vbNewLine & vbNewLine & _

"Попробуйте изменить условия отбора," & vbNewLine & _

"чтобы уменьшить объем формируемых данных.",, False

Case Else

s = "Сообщите разработчику программы" & vbNewLine & Err.NUMBER & ": " & Err.DESCRIPTION

If Not IsEmpty(queries) Then s = s & vbNewLine & "Запрос №" & i & ": " & queries(i)

OpenForm "Сообщение_F",,,,, acDialog, s,, False

End Select

SysCmd acSysCmdClearStatus

Exit Function

Resume

End Function

 

Public Function isNothing(V As Object) As Boolean

isNothing = (TypeName(V) = "Nothing")

End Function

 


Поделиться с друзьями:

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...

Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой...

Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.009 с.