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]Mensagem de Erro 3211

    Compartilhe

    asimoes
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 61
    Registrado : 30/04/2013

    [Resolvido]Mensagem de Erro 3211

    Mensagem  asimoes em Ter 02 Dez 2014, 13:59

    Ola Pessoal!
    Alguém sabe porque está gerando a mensagem abaixo ao tentar excluir uma tabela criada via CREATE TABLE?

    "O mecanismo de banco de dados não pôde bloquear a tabela porque ela já está sendo usada por outra pessoa ou processo. (Erro 3211)"

    Eu vi vários Post sobre o assunto já testei de todas as formas, mas esse msg ñ sai.


    Abaixo estou colocando os códigos para criar tabela e dos eventos em um form


    Cria a tabela desta forma:
    Código:
       StrTabela = StrEntradaPlan
       strPlan = Replace(StrTabela, " ", "")

       ' Cria Tabela conforme planejador
       CurrentDb.Execute "CREATE TABLE [" & strPlan & "]" _
       & "(Ordem TEXT, Item TEXT, Qtde INTEGER, Tipo TEXT, Linha TEXT, [Tipo Reporte] TEXT, Alocada TEXT, Cliente TEXT, [Grupo     Cliente] TEXT, [Pedido Cliente] TEXT, Sequência TEXT, Narrativa TEXT, Inicio TEXT, Termino TEXT, Dep TEXT, Plan TEXT, Entrega TEXT, Abrir YESNO);"

       'Cria propriedades "Abrir" da tabela
       Set db = CurrentDb
       Set tdf = db.TableDefs(strPlan)
       Set fld = tdf.Fields("Abrir")
       Set prp = fld.CreateProperty("DisplayControl", dbInteger, acCheckBox)
       fld.Properties.Append prp

    Eventos do form (Declaração):
    Código:
    Option Compare Database
    Option Explicit
    Dim BConfirmacaoAnali As Byte

    Eventos do form (Form_Load):
    Código:
       Me.Caption = strPlan
       Me.RecordSource = "SELECT * FROM " & strPlan & ";"

    Eventos do form (Unload):
    Código:
       BConfirmacaoAnali = MsgBox(Prompt:="Se você clicar em SIM, estará finalizando a Análise Semana " & StrEntradaSemana & " e será gerado o arquivo .XML.", Buttons:=vbYesNo + vbInformation, Title:="Finalizar Analise Semana " & StrEntradaSemana & "?")
       If BConfirmacaoAnali = 7 Then
          DoCmd.CancelEvent
       End If
       CurrentDb.Execute "INSERT INTO HistoricoGeradorOrdem ( Ordem, Item, Qtde, Tipo, Linha, [Tipo Reporte], Alocada, Cliente, [Grupo  Cliente], [Pedido Cliente], Sequência, Narrativa, Inicio, Termino, Dep, Plan, Entrega, Abrir ) SELECT [" & strPlan & "].[Ordem], [" & strPlan & "].[Item], [" & strPlan & "].[Qtde], [" & strPlan & "].[Tipo], [" & strPlan & "].[Linha], [" & strPlan & "].[Tipo Reporte], [" & strPlan & "].[Alocada], [" & strPlan & "].[Cliente], [" & strPlan & "].[Grupo Cliente], [" & strPlan & "].[Pedido Cliente], [" & strPlan & "].[Sequência], [" & strPlan & "].[Narrativa], [" & strPlan & "].[Inicio], [" & strPlan & "].[Termino], [" & strPlan & "].[Dep], [" & strPlan & "].[Plan], [" & strPlan & "].[Entrega], [" & strPlan & "].[Abrir] FROM [" & strPlan & "]"
       ExportaParaXls

    Eventos do form (Close):
    Código:
       Me.RecordSource = ""
       Me.Caption = ""

    Existem outros eventos, mas esses é q estão relacionados com o erro!

    Desde já agradeço a ajuda!


    .................................................................................
    Não tenho medo de compartilhar conhecimento.
    Essa é a unica coisa que as pessoas não poderão roubar de mim, pois ninguém nunca sabe igual, mesmo que saiba a mesma coisa.

    LiveBrain
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 182
    Registrado : 15/05/2011

    Re: [Resolvido]Mensagem de Erro 3211

    Mensagem  LiveBrain em Ter 02 Dez 2014, 16:18

    Aonde você passa o valor para a variável strPlan na função Load do seu form?


    .................................................................................
    Abraços

    Live Brain Tutoriais

    "Fraca é a pessoa que não conhece a força que possui nos amigos"

    asimoes
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 61
    Registrado : 30/04/2013

    Re: [Resolvido]Mensagem de Erro 3211

    Mensagem  asimoes em Ter 02 Dez 2014, 16:22

    strPlan é uma variável publica de outro modulo recebida por um inputbox!


    .................................................................................
    Não tenho medo de compartilhar conhecimento.
    Essa é a unica coisa que as pessoas não poderão roubar de mim, pois ninguém nunca sabe igual, mesmo que saiba a mesma coisa.

    Avelino Sampaio
    Moderador
    Moderador

    Respeito às Regras 100%

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

    Re: [Resolvido]Mensagem de Erro 3211

    Mensagem  Avelino Sampaio em Ter 02 Dez 2014, 16:37

    Olá!

    Creio que a exclusão da tabela só possa acontecer depois de desconectar o RecordSource. Algo assim:

    Me.RecordSource = ""
    currentdb.execute "Drop Table NomedaTabela;"

    Aguardamos


    .................................................................................
    ============ 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ê.

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

    asimoes
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 61
    Registrado : 30/04/2013

    Re: [Resolvido]Mensagem de Erro 3211

    Mensagem  asimoes em Ter 02 Dez 2014, 17:46

    Então Avelino, no código q coloquei acima, coloco no evento close do form os cod abaixo:

    Código:
       Me.RecordSource = ""
       Me.Caption = ""

    e mesmo assim ñ deu!


    .................................................................................
    Não tenho medo de compartilhar conhecimento.
    Essa é a unica coisa que as pessoas não poderão roubar de mim, pois ninguém nunca sabe igual, mesmo que saiba a mesma coisa.

    Avelino Sampaio
    Moderador
    Moderador

    Respeito às Regras 100%

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

    Re: [Resolvido]Mensagem de Erro 3211

    Mensagem  Avelino Sampaio em Ter 02 Dez 2014, 18:09

    Não deu porque ele deve estar atuando depois do DROP. Coloque pontos de interrupção em cada linha dos eventos e veja quem tá na frente de quem na execução.

    Aguardamos



    .................................................................................
    ============ 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ê.

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

    asimoes
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 61
    Registrado : 30/04/2013

    Re: [Resolvido]Mensagem de Erro 3211

    Mensagem  asimoes em Ter 02 Dez 2014, 23:46

    O estranho q o Drop é o ultimo comando a ser executado! mesmo colocando logo pós desconectar do recordset o erro permanece!

    Código:
       Me.RecordSource = ""
       Me.Caption = ""
       CurrentDb.Execute "Drop Table " & strPlan & ";"


    .................................................................................
    Não tenho medo de compartilhar conhecimento.
    Essa é a unica coisa que as pessoas não poderão roubar de mim, pois ninguém nunca sabe igual, mesmo que saiba a mesma coisa.

    Avelino Sampaio
    Moderador
    Moderador

    Respeito às Regras 100%

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

    Re: [Resolvido]Mensagem de Erro 3211

    Mensagem  Avelino Sampaio em Qua 03 Dez 2014, 08:28

    Você está limpando as variáveis que se utilizam da tabela ? Exemplo:

    Set tdf = nothing


    .................................................................................
    ============ 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ê.

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

    asimoes
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 61
    Registrado : 30/04/2013

    Re: [Resolvido]Mensagem de Erro 3211

    Mensagem  asimoes em Qua 03 Dez 2014, 11:14

    Ola Avelino!

    Sim limpei todas as variáveis e nada! Continua o erro! Já revi tudo e quanto mais procuro na internet mais pessoas com o mesmo problema eu acho, os que tiveram solução são os que estavam utilizando o arquivo em rede com problemas de compartilhamento, restrição de segurança, mais no meu caso está no C: da máquina, pois ainda estou desenvolvendo!


    Código:
       db.Close
       Set db = Nothing
       Set tdf = Nothing
       Set fld = Nothing
       Set prp = Nothing


    .................................................................................
    Não tenho medo de compartilhar conhecimento.
    Essa é a unica coisa que as pessoas não poderão roubar de mim, pois ninguém nunca sabe igual, mesmo que saiba a mesma coisa.

    asimoes
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 61
    Registrado : 30/04/2013

    Re: [Resolvido]Mensagem de Erro 3211

    Mensagem  asimoes em Qua 03 Dez 2014, 11:38

    Avelino, pensando no que vc disse sobre limpar as variáveis comecei a ler o meu código linha por linha e focando em fechar aberturas e esvaziar variáveis, nisso encontrei o problema!

    Acontece que eu me conecto a um outro BD com o comando
    Código:
    Set dbs = OpenDatabase("c:\caio\NECESSIDADE ITENS.accdb")

    e apos me conectar fazer os eventos que precisava fazer no BD conectado eu apelas o fechava com
    Código:
    dbs.Close
    mas eu não estava esvaziando a variável dbs! então coloquei o comando
    Código:
    Set dbs = Nothing
    logo acima do comando Close e "Vu alá"!

    Fica a dica pra quem passar pelo mesmo problema!

    Muito Obrigado


    .................................................................................
    Não tenho medo de compartilhar conhecimento.
    Essa é a unica coisa que as pessoas não poderão roubar de mim, pois ninguém nunca sabe igual, mesmo que saiba a mesma coisa.

      Data/hora atual: Dom 04 Dez 2016, 01:55