MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração


Participe do fórum, é rápido e fácil

MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access


2 participantes

    [Resolvido]tabela bloqueada

    avatar
    poy
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 71
    Registrado : 10/01/2012

    [Resolvido]tabela bloqueada Empty [Resolvido]tabela bloqueada

    Mensagem  poy 1/4/2013, 16:22

    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(Cool
    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
    JPaulo
    JPaulo
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 11016
    Registrado : 04/11/2009

    [Resolvido]tabela bloqueada Empty Re: [Resolvido]tabela bloqueada

    Mensagem  JPaulo 2/4/2013, 10:30

    Abra Recordsets individuais e strSQL`s, utilize tambem o dbOpenSnapshot;

    Exemplo:

    Dim rst As Recordset
    Dim rst1 As Recordset
    Dim rst2 As Recordset
    Dim rst3 As Recordset
    Dim strSQL As String
    Dim strSQL1 As String
    Dim strSQL2 As String
    Dim strSQL3 As String


    Set rst = dbs.OpenRecordset(strSQL, dbOpenSnapshot)
    Set rst1 = dbs.OpenRecordset(strSQL1, dbOpenSnapshot)
    Set rst2 = dbs.OpenRecordset(strSQL2, dbOpenSnapshot)
    Set rst3 = dbs.OpenRecordset(strSQL3, dbOpenSnapshot)


    No final feche todos;

    rst.Close
    rst1.Close
    rst2.Close
    rst3.Close

    Tamém tem outro erro, você está a utilizar a palavra Data, mas no VBA tem de utilizar Date()

    strSQL = strSQL & " WHERE Month(Date()) = " & MesProcess




    .................................................................................
    Contribua com o maximoaccess nos links abaixo, ajude a melhorar este que é o seu site na NET.

    Pay-Pal R$ Aqui
    Pay-Pal € Aqui

    Ou ainda: Aqui (Novo)

    Sucesso e Bons Estudos
    Success and Good Studies

    [Resolvido]tabela bloqueada Folder_announce_new Utilize o Sistema de Busca do Fórum...
    [Resolvido]tabela bloqueada Folder_announce_new 102 Códigos VBA Gratuitos...
    [Resolvido]tabela bloqueada Folder_announce_new Instruções SQL como utilizar...

      Data/hora atual: 28/3/2024, 18:20