MaximoAccess

Caro Usuário, não tire as suas duvidas nas Salas de Repositório, abra sempre um novo tópico relacionado, nas salas destinadas para o efeito, como Sala de Tabelas, Consultas, Formulários, Relatórios, Macros, Módulos e VBA.

Obrigado

Administração do MaximoAccess

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

    [Resolvido]Capacidade de execução do recordset em banco com tamanho maior que 1GB

    Compartilhe

    vinicius.anna
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 168
    Registrado : 29/04/2011

    [Resolvido]Capacidade de execução do recordset em banco com tamanho maior que 1GB

    Mensagem  vinicius.anna em Sex 22 Ago 2014, 15:08

    Bom dia

    Em meu sistema possuo uma tabela que contém 2744625 registros. O banco, sem a manutenção através da função (fncRegAgrupI250 - código abaixo) possui um tamanho de 1,2 gb. Quando executo a esta função, o banco excede o tamanho máximo de 2 gb causando uma série de erros e corrompendo o mesmo.

    Algum amigo tem alguma dica de como possa fazer para que, consiga executar a esta função sem exceder o tamanho do banco

    Código:

    Public Function fncRegAgrupI250()
    On Error GoTo trataerro
        Dim db As DAO.Database
        DBEngine.SetOption dbMaxLocksPerFile, 90000000
        Dim Rst As DAO.Recordset, AgAnterior As String
        Set db = CurrentDb
        Set Rst = CurrentDb.OpenRecordset("SELECT Agrupamento FROM reg_I250 ORDER BY Id_Registro")
        Do While Not Rst.EOF
            If IsNull(Rst(0)) Then
                Rst.Edit
                Rst(0) = (Format(AgAnterior, "00000"))
                Rst.Update
            Else
                AgAnterior = Rst(0)
            End If
        Rst.MoveNext
        Loop
        Set Rst = Nothing

    CurrentDb.Execute "Delete reg_I250.Registro FROM reg_I250 WHERE (((reg_I250.Registro)='I200'));"

    sair:
        Exit Function
    trataerro:
        Select Case Err.Number
            Case 3061
                Resume Next
            Case 3049
                Resume Next
            Case Else
                MsgBox "Erro: (fncRegAgrupI250) " & Err.Number & vbCrLf & Err.Description, vbCritical, "Aviso", _
                Err.HelpFile, Err.HelpContext
        End Select
        Resume sair:

    End Function

    Att.
    Vinicius

    vinicius.anna
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 168
    Registrado : 29/04/2011

    Re: [Resolvido]Capacidade de execução do recordset em banco com tamanho maior que 1GB

    Mensagem  vinicius.anna em Ter 26 Ago 2014, 15:08

    Alguma dica?

    Att.
    Vinicius

    Avelino Sampaio
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3347
    Registrado : 04/04/2010

    Re: [Resolvido]Capacidade de execução do recordset em banco com tamanho maior que 1GB

    Mensagem  Avelino Sampaio em Ter 26 Ago 2014, 16:04

    Olá!

    Se eu não me engano o tamanho máximo suportado pelo recordset é de 1GB. Uma sugestão é montar o seu código de forma que altere em duas etapas. Uma que vai do registro 1 ao 1.500.000 e a outra que va do 1.500.001 ao Final

    Nota. Falatou fechar o recordeset

    rst.close
    Set Rst = Nothing

    Sucesso!









    .................................................................................
    ============ Quer aprender Access em alta velocidade ? ============

    || [Você precisa estar registrado e conectado para ver esta imagem.] Acesse o site UsandoAccess.com.br e veja um ótimo kit de ensino que tenho para você.

    ===========================================================

    vinicius.anna
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 168
    Registrado : 29/04/2011

    Re: [Resolvido]Capacidade de execução do recordset em banco com tamanho maior que 1GB

    Mensagem  vinicius.anna em Qui 28 Ago 2014, 14:31

    Avelino,

    Bom dia,

    Obrigado pela dica, porém, mesmo fechando o recordset e dividindo função para ser executada por etapas o banco ainda acaba excedendo o tamanho. A única coisa que percebi é que, quando uso o recordset o banco acaba "inchando". Tem mais alguma dica do que possa fazer? Já tentei de N formas mas todas elas tem a mesma característica, ou seja, aumenta o tamanho do banco excessivamente

    Muito obrigado pela atenção

    Att.
    Vinicius

    vinicius.anna
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 168
    Registrado : 29/04/2011

    Re: [Resolvido]Capacidade de execução do recordset em banco com tamanho maior que 1GB

    Mensagem  vinicius.anna em Seg 01 Set 2014, 20:11

    Avelino,

    Boa tarde

    Me perdoe, mas realmente estou procurando soluções para meu problema, porém, não a encontro. Fiz várias tentativas, com recursos diferentes, mas em todas acabo "estourando" o tamanho do banco. Tem mais alguma dica de algo que possa verificar o tentar fazer? Desmembrei a função para executar mensalmente, mas mesmo assim tenho o mesmo problema..., originalmente o banco está com 400 mb, quando a executo ele vai para 2.1 gb e retorna erro.... a função usada é esta:

    Código:

    Public Function fncAgrupamento1t()
    Dim strSql As String
    Dim rs As DAO.Recordset
    Dim ym As Long
    Dim k As Long
    Dim db As DAO.Database
    DBEngine.SetOption dbMaxLocksPerFile, 90000000
    Set db = CurrentDb
    strSql = "SELECT reg_I250.DataOk, reg_I250.Id_Registro, reg_I250.Registro, reg_I250.Agrupamento, Format(([DataOk]),'mm') AS MesLanc, reg_I250.AgCriado FROM reg_I250 WHERE (((reg_I250.Registro)='I200') AND ((Format(([DataOk]),'mm'))=1)) ORDER BY reg_I250.DataOk, reg_I250.Id_Registro, reg_I250.DataOk;"
    Set rs = CurrentDb.OpenRecordset(strSql)
    rs.MoveFirst
    ym = Val(Format(rs!DataOk, "dd")) 'ano/mes
    k = 0
    Do While Not rs.EOF
        If ym = Val(Format(rs!DataOk, "dd")) Then
            k = k + 1
        Else
            k = 1
            ym = Val(Format(rs!DataOk, "dd"))
        End If
        rs.Edit
            'rs!AgCriado = Val(ym & Format(k, "00000"))
            rs!AgCriado = (Format(k, "00000"))
        rs.Update
        rs.MoveNext
    Loop
    rs.Close
    Set rs = Nothing
    MsgBox "Término da montagem.... Mês 01"

    Att.
    Vinicius

    vinicius.anna
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 168
    Registrado : 29/04/2011

    Re: [Resolvido]Capacidade de execução do recordset em banco com tamanho maior que 1GB

    Mensagem  vinicius.anna em Qua 17 Set 2014, 18:04

    Boa tarde,

    Com as dicas do Avelino consegui resolver o problema.

    Att.
    Vinicius

      Data/hora atual: Sab 03 Dez 2016, 02:22