Во время транзакционного блока, если часть его не работает или прерывается, что является лучшим способом справиться с этим?PostgreSQL/VBA: проверка отказа транзакции или процесс
Я думаю о промежуточных запросах (см. Комментарии к коду), чтобы подтвердить, что предыдущий запрос был успешным. Или есть лучший способ?
Sub SetDataProcessPriorities()
Dim cCon As New ADODB.Connection
Set cCon = Application.Run("Personal.xlsb!ConnectToPg")
Call Application.Run("Personal.xlsb!SendPgQueryOnly", "begin;", cCon)
Call Application.Run("Personal.xlsb!SendPgQueryOnly", "delete from data_proc_pri;", cCon)
'intermediate select query here?
Call Application.Run("Personal.xlsb!SendPgQueryOnly", "insert into data_proc_pri select * from data_proc_pri_store;", cCon)
'intermediate select query here?
Call Application.Run("Personal.xlsb!SendPgQueryOnly", "commit;", cCon)
End Sub
Я открыт для решения VBA (извините) или PostgreSQL (или обоих).
Бонусный вопрос: Как вы называете этот тип программирования? Программирование инфраструктуры?
Персональный код книги, если вам это нужно:
Sub SendPgQueryOnly(sSql As String, Optional cCon As ADODB.Connection, Optional sOdbcName As String = "[omitted]")
sCaller = "SendPgQueryOnly"
Dim cnDB As New ADODB.Connection
Dim rsRecords As New ADODB.Recordset
If IsMissing(cCon) Or cCon Is Nothing Then
cnDB.Open sOdbcName
rsRecords.CursorType = 2 'adOpenDynamic
rsRecords.Open sSql, cnDB
Else
rsRecords.CursorType = 2 'adOpenDynamic
rsRecords.Open sSql, cCon 'use the passed connection obj
End If
cleanup:
Set rsRecords = Nothing
Set cnDB = Nothing
End Sub
Function ConnectToPg(Optional sOdbcName As String = "[omitted]") As ADODB.Connection
sCaller = "ConnectToPg"
Dim cnDB As New ADODB.Connection
cnDB.Open sOdbcName
Set ConnectToPg = cnDB
End Function