Leio uma tabela para recuperar dados e preciso atualiza-la em seguida (update) mas o access dá mensagem de erro "A tabela foi aberta em modo exclusivo por outro usuário,ou foi aberta atraves da interface do usuário e não pode ser manipulada via programação".
O mais estranho é que, se executo só o último select na tabela Custooper1 e o update, o código é executado normalmente
Segue o código :
Dim NLIN, Tipo As String
Dim TLIN, TTIP As Integer
Dim tipoveic As String
On Error GoTo Err_Comando20_Click
Set dbs = CurrentDb()
'calcula TUT
strSQL = "SELECT sum(qtfrota) FROM CustoOper1"
strSQL = strSQL & " WHERE month(Data) = " & MesProcess
strSQL = strSQL & " AND YEAR(data) = " & AnoProcess
strSQL = strSQL & " and linha = '415'"
Set rst1 = dbs.OpenRecordset(strSQL)
frota415 = rst1(0)
strSQL = "SELECT sum(qtfrota) as somafrota FROM CustoOper1"
strSQL = strSQL & " WHERE month(Data) = " & Val(MesProcess)
strSQL = strSQL & " AND YEAR(data) = " & Val(AnoProcess)
strSQL = strSQL & " and linha = '426'"
Set rst2 = dbs.OpenRecordset(strSQL)
frota426 = rst2(0)
totalfrotaentrada = frota426 + frota415
rst1.Close
rst2.Close
' le balanceteanual e recupera valor do tut
strSQL = "SELECT * FROM BalanceteAnual"
strSQL = strSQL & " WHERE conta = 'D108'"
Set rst1 = dbs.OpenRecordset(strSQL)
Select Case MesProcess
Case 1
valortut = rst1(7)
Case 2
valortut = rst1(
Case 3
valortut = rst1(9)
Case 4
valortut = rst1(10)
Case 5
valortut = rst1(11)
Case 6
valortut = rst1(12)
Case 7
valortut = rst1(13)
Case 8
valortut = rst1(14)
Case 9
valortut = rst1(15)
Case 10
valortut = rst1(16)
Case 11
valortut = rst1(17)
Case 12
valortut = rst1(18)
End Select
strSQL = "SELECT * FROM CustoOper1"
strSQL = strSQL & " WHERE month(Data) = " & Val(MesProcess)
strSQL = strSQL & " AND YEAR(data) = " & Val(AnoProcess)
strSQL = strSQL & " ORDER BY ITINERARIO , LINHA, TIPO"
Set rst = dbs.OpenRecordset(strSQL)
If rst.RecordCount = 0 Then
MsgBox "sem lançamentos para mes/ano " & MesProcess & "/" & AnoProcess
End If
rst.MoveLast
Total = rst.RecordCount
rst.MoveFirst
X = 1
Do While X < Total
If rst(1) = 415 Or rst(1) = 426 Then
linhaentrada = rst(1)
frotaentrada = rst(6)
tipoentrada = rst(2)
If frotaentrada > 0 Then
If linhaentrada = 415 Then
tutlinha415 = valortut / frota415 * totalfrotaentrada
strSQL2 = "update custooper1 set "
strSQL2 = strSQL2 & " tut = '" & tutlinha415 & "'"
strSQL2 = strSQL2 & " where month(data) = " & MesProcess
strSQL2 = strSQL2 & " and year(data) = " & AnoProcess
strSQL2 = strSQL2 & " and linha = '" & linhaentrada & "'"
strSQL2 = strSQL2 & " and tipo = '" & tipoentrada & "'"
dbs.Execute (strSQL2)
Else
tutlinha426 = valortut / frota426 * totalfrotaentrada
strSQL2 = "update custooper1 set "
strSQL2 = strSQL2 & " tut = '" & tutlinha426 & "'"
strSQL2 = strSQL2 & " where month(data) = " & MesProcess
strSQL2 = strSQL2 & " and year(data) = " & AnoProcess
strSQL2 = strSQL2 & " and linha = ' " & linhaentrada & "'"
strSQL2 = strSQL2 & " and tipo = '" & tipoentrada & "'"
dbs.Execute (strSQL2)
End If
End If
End If
X = X + 1
rst.MoveNext
Loop
O mais estranho é que, se executo só o último select na tabela Custooper1 e o update, o código é executado normalmente
Segue o código :
Dim NLIN, Tipo As String
Dim TLIN, TTIP As Integer
Dim tipoveic As String
On Error GoTo Err_Comando20_Click
Set dbs = CurrentDb()
'calcula TUT
strSQL = "SELECT sum(qtfrota) FROM CustoOper1"
strSQL = strSQL & " WHERE month(Data) = " & MesProcess
strSQL = strSQL & " AND YEAR(data) = " & AnoProcess
strSQL = strSQL & " and linha = '415'"
Set rst1 = dbs.OpenRecordset(strSQL)
frota415 = rst1(0)
strSQL = "SELECT sum(qtfrota) as somafrota FROM CustoOper1"
strSQL = strSQL & " WHERE month(Data) = " & Val(MesProcess)
strSQL = strSQL & " AND YEAR(data) = " & Val(AnoProcess)
strSQL = strSQL & " and linha = '426'"
Set rst2 = dbs.OpenRecordset(strSQL)
frota426 = rst2(0)
totalfrotaentrada = frota426 + frota415
rst1.Close
rst2.Close
' le balanceteanual e recupera valor do tut
strSQL = "SELECT * FROM BalanceteAnual"
strSQL = strSQL & " WHERE conta = 'D108'"
Set rst1 = dbs.OpenRecordset(strSQL)
Select Case MesProcess
Case 1
valortut = rst1(7)
Case 2
valortut = rst1(
Case 3
valortut = rst1(9)
Case 4
valortut = rst1(10)
Case 5
valortut = rst1(11)
Case 6
valortut = rst1(12)
Case 7
valortut = rst1(13)
Case 8
valortut = rst1(14)
Case 9
valortut = rst1(15)
Case 10
valortut = rst1(16)
Case 11
valortut = rst1(17)
Case 12
valortut = rst1(18)
End Select
strSQL = "SELECT * FROM CustoOper1"
strSQL = strSQL & " WHERE month(Data) = " & Val(MesProcess)
strSQL = strSQL & " AND YEAR(data) = " & Val(AnoProcess)
strSQL = strSQL & " ORDER BY ITINERARIO , LINHA, TIPO"
Set rst = dbs.OpenRecordset(strSQL)
If rst.RecordCount = 0 Then
MsgBox "sem lançamentos para mes/ano " & MesProcess & "/" & AnoProcess
End If
rst.MoveLast
Total = rst.RecordCount
rst.MoveFirst
X = 1
Do While X < Total
If rst(1) = 415 Or rst(1) = 426 Then
linhaentrada = rst(1)
frotaentrada = rst(6)
tipoentrada = rst(2)
If frotaentrada > 0 Then
If linhaentrada = 415 Then
tutlinha415 = valortut / frota415 * totalfrotaentrada
strSQL2 = "update custooper1 set "
strSQL2 = strSQL2 & " tut = '" & tutlinha415 & "'"
strSQL2 = strSQL2 & " where month(data) = " & MesProcess
strSQL2 = strSQL2 & " and year(data) = " & AnoProcess
strSQL2 = strSQL2 & " and linha = '" & linhaentrada & "'"
strSQL2 = strSQL2 & " and tipo = '" & tipoentrada & "'"
dbs.Execute (strSQL2)
Else
tutlinha426 = valortut / frota426 * totalfrotaentrada
strSQL2 = "update custooper1 set "
strSQL2 = strSQL2 & " tut = '" & tutlinha426 & "'"
strSQL2 = strSQL2 & " where month(data) = " & MesProcess
strSQL2 = strSQL2 & " and year(data) = " & AnoProcess
strSQL2 = strSQL2 & " and linha = ' " & linhaentrada & "'"
strSQL2 = strSQL2 & " and tipo = '" & tipoentrada & "'"
dbs.Execute (strSQL2)
End If
End If
End If
X = X + 1
rst.MoveNext
Loop