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

    VBA não funciona depois de dividir BD - Access 2007

    Compartilhe

    marianeves
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Feminino
    Localização : Portugal
    Mensagens : 5
    Registrado : 22/05/2014

    VBA não funciona depois de dividir BD - Access 2007

    Mensagem  marianeves em Qui 22 Maio 2014, 19:44

    Olá, boa tarde!

    Venho pedir a vossa ajuda, já em estado de desespero... Sou uma curiosa, e leio toda a vossa informação com muito interesse e satisfação. Usei um código que aqui postaram num projecto em Acess 2007, e tudo funcionou até eu dividir a base de dados em back e front...

    A Automatizaçao deixou de funcionar!

    trata-se de automatizar uma sequência numérica, em que tenho a seguinte função num módulo Public:



    Public Function NextNumSimples() As Long
    'Gera o próximo número da tabela de numeração simples
    Dim db As DAO.Database
    Dim rst As DAO.Recordset

    'Verifica o último número
    Set db = CurrentDb()
    Set rst = db.OpenRecordset("SELECT NumSimples FROM tblNumSimples " & _
    "ORDER BY NumSimples DESC")
    With rst
    If .BOF And .EOF Then
    NextNumSimples = 1
    Else
    .MoveFirst
    NextNumSimples = !NumSimples + 1
    End If
    .Close
    End With
    Set rst = Nothing
    Set db = Nothing
    End Function

    Public Function NextNumAno() As String
    'Gera o próximo código da tabela de numeração/ano
    Dim db As DAO.Database
    Dim rst As DAO.Recordset
    Dim intYear As Integer
    Dim strSQL As String

    'Ano atual, conforme o sistema
    intYear = Year(Date)

    'Verifica o último código para o ano
    strSQL = "SELECT CLng(Left$(NumAno, Len(NumAno)-5)) As Num, " & _
    "CInt(Right$(NumAno, 4)) As Ano FROM tblNumAno " & _
    "WHERE CInt(Right$(NumAno, 4))=" & CStr(intYear) & _
    " ORDER BY CLng(Left$(NumAno, Len(NumAno)-5)) DESC"
    Set db = CurrentDb()
    Set rst = db.OpenRecordset(strSQL, dbOpenDynaset)
    With rst
    If .BOF And .EOF Then
    NextNumAno = "1/" & CStr(intYear)
    Else
    .MoveFirst
    NextNumAno = CStr(!Num + 1) & "/" & CStr(intYear)
    End If
    .Close
    End With
    Set rst = Nothing
    Set db = Nothing
    End Function


    No formulário que deverá gerar a numeração, tenho o seguinte:

    Private Sub Form_BeforeUpdate(Cancel As Integer)
    On Error GoTo Form_BeforeUpdate_Err

    ' Só executa a rotina se o campo [CodPedido] está vazio
    If IsNull([CodPedido]) Then

    Dim strUltPedido As String ' código completo do último pedido
    Dim dataUltPedido As Date ' data do último pedido
    Dim sAno As String ' string do ano com 4 dígitos
    Dim sPref As String ' string do prefixo
    ' Dim anomes As String ' parte ano+mês do código (parte 1)
    Dim numUltPedido As Integer ' parte numérica seqüencial do código (parte 2)
    Const formatoNum As String = "0000#" ' formato da parte numérica: 5 dígitos

    ' Abre o banco de dados e a tabela tabPedidos
    Dim db As Database
    Dim t As Recordset
    Set db = DBEngine(0)(0)
    Set db = CurrentDb
    Set t = db.OpenRecordset("tabPedidosFP", dbOpenTable)

    ' Parte 1 do código: ano atual (com 4 dígitos)
    sAno = Left(CStr(Year(Now)), 4)

    ' Parte 1a do código: Prefixo
    sPref = [OrderTypePrefix]



    '--------------------------------------------------
    ' Montagem da parte 2 do código: número seqüencial
    '--------------------------------------------------
    ' A tabela não tem registros; começa a contagem
    If t.BOF = True And t.EOF = True Then
    [CodPedido] = sPref & sAno & Format(1, formatoNum)
    ' A tabela tem registro; então, vai para o último
    Else
    t.MoveLast
    'Obtém código e data e prefixo do último pedido
    strUltPedido = t![CodPedido]
    dataUltPedido = t![Data]
    numUltPedido = Val(Right(strUltPedido, Len(formatoNum)))

    ' Novo pedido é feito no mesmo ano do anterior
    If Year(Now) = Year(dataUltPedido) Then
    [CodPedido] = [OrderTypePrefix] & sAno & Format(numUltPedido + 1, formatoNum)
    ' O ano atual é diferente; reinicia a contagem
    Else
    [CodPedido] = [OrderTypePrefix] & sAno & Format(1, formatoNum)
    End If
    End If

    ' Fecha a tabela e o banco de dados
    t.Close
    db.Close
    End If

    Form_BeforeUpdate_Fim:
    Exit Sub
    Form_BeforeUpdate_Err:
    MsgBox Err.Description
    Resume Form_BeforeUpdate_Fim
    End Sub


    O que se poderá ter passado? O que me falta fazer para que este código corra no front end?

    Agradeço desde já a ajuda que me possam disponibilizar!

    Maria

    Fernando Bueno
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1819
    Registrado : 13/04/2012

    Re: VBA não funciona depois de dividir BD - Access 2007

    Mensagem  Fernando Bueno em Sex 23 Maio 2014, 15:17

    Se possivel nos envie o banco para vermos o que se passa


    .................................................................................
    Um abraço
    Fernando Bueno


    O aumento do conhecimento é como uma esfera dilatando-se no espaço
    quanto maior a nossa compreensão,
    maior o nosso contacto com o desconhecido
    [Você precisa estar registrado e conectado para ver esta imagem.]

    clynton
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 307
    Registrado : 08/07/2013

    Re: VBA não funciona depois de dividir BD - Access 2007

    Mensagem  clynton em Sex 23 Maio 2014, 19:12

    Maria, após dividir, deixou os objetos (tabelas) com o mesmo nome incluindo os nomes dos campos?
    Teoricamente não teria por que deixar de funcionar, uma vez que tanto o nome da (s) tabela (s), quanto os nomes dos campos sejam os mesmos de quando estava num único arquivo.

    marianeves
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Feminino
    Localização : Portugal
    Mensagens : 5
    Registrado : 22/05/2014

    Re: VBA não funciona depois de dividir BD - Access 2007

    Mensagem  marianeves em Sex 23 Maio 2014, 19:29

    A BD é muito grande... e ainda está muito "desorganizada"...

    Posso tentar enviar


    Na divisão da BD, os nomes da tabela são exactamente os mesmo, não alterei nada... Andei a investigar, e parece-me que poderá ter a ver com a definição do caminho da BD do backend, mas não sei como defini-lo.
    Acresce que esta BD corre num servidor.

    Entretanto eliminei o módulo público, e deixei apenas o que agora transcrevo de novo


    [i]No formulário que deverá gerar a numeração, tenho o seguinte:

    [i]Private Sub Form_BeforeUpdate(Cancel As Integer)
    On Error GoTo Form_BeforeUpdate_Err

    ' Só executa a rotina se o campo [CodPedido] está vazio
    If IsNull([CodPedido]) Then

    Dim strUltPedido As String ' código completo do último pedido
    Dim dataUltPedido As Date ' data do último pedido
    Dim sAno As String ' string do ano com 4 dígitos
    Dim sPref As String ' string do prefixo
    ' Dim anomes As String ' parte ano+mês do código (parte 1)
    Dim numUltPedido As Integer ' parte numérica seqüencial do código (parte 2)
    Const formatoNum As String = "0000#" ' formato da parte numérica: 5 dígitos

    ' Abre o banco de dados e a tabela tabPedidos
    Dim db As Database
    Dim t As Recordset
    Set db = DBEngine(0)(0)
    Set db = CurrentDb
    Set t = db.OpenRecordset("tabPedidosFP", dbOpenTable)

    ' Parte 1 do código: ano atual (com 4 dígitos)
    sAno = Left(CStr(Year(Now)), 4)

    ' Parte 1a do código: Prefixo
    sPref = [OrderTypePrefix]



    '--------------------------------------------------
    ' Montagem da parte 2 do código: número seqüencial
    '--------------------------------------------------
    ' A tabela não tem registros; começa a contagem
    If t.BOF = True And t.EOF = True Then
    [CodPedido] = sPref & sAno & Format(1, formatoNum)
    ' A tabela tem registro; então, vai para o último
    Else
    t.MoveLast
    'Obtém código e data e prefixo do último pedido
    strUltPedido = t![CodPedido]
    dataUltPedido = t![Data]
    numUltPedido = Val(Right(strUltPedido, Len(formatoNum)))

    ' Novo pedido é feito no mesmo ano do anterior
    If Year(Now) = Year(dataUltPedido) Then
    [CodPedido] = [OrderTypePrefix] & sAno & Format(numUltPedido + 1, formatoNum)
    ' O ano atual é diferente; reinicia a contagem
    Else
    [CodPedido] = [OrderTypePrefix] & sAno & Format(1, formatoNum)
    End If
    End If

    ' Fecha a tabela e o banco de dados
    t.Close
    db.Close
    End If

    Form_BeforeUpdate_Fim:
    Exit Sub
    Form_BeforeUpdate_Err:
    MsgBox Err.Description
    Resume Form_BeforeUpdate_Fim
    End Sub


    Se a BD não estiver dividida, funciona na perfeiçao... Quando a divido, acontece o mesmo erro e não funciona.

    Obrigada!!!!!!!!!

    Fernando Bueno
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1819
    Registrado : 13/04/2012

    Re: VBA não funciona depois de dividir BD - Access 2007

    Mensagem  Fernando Bueno em Sex 23 Maio 2014, 19:58

    O correto seria você ter feito um backup antes..

    Vejamos se tem haver com o caminho do banco:

    Clique com o botão direito do mouse em alguma tabela que ficou dividida, depois em

    gerenciador de tabelas vinculadas, ache seu back end que vinculara as tabelas.

    Aguardamos seu retorno


    .................................................................................
    Um abraço
    Fernando Bueno


    O aumento do conhecimento é como uma esfera dilatando-se no espaço
    quanto maior a nossa compreensão,
    maior o nosso contacto com o desconhecido
    [Você precisa estar registrado e conectado para ver esta imagem.]

    marianeves
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Feminino
    Localização : Portugal
    Mensagens : 5
    Registrado : 22/05/2014

    Re: VBA não funciona depois de dividir BD - Access 2007

    Mensagem  marianeves em Sex 23 Maio 2014, 20:31

    Obrigada Fernando!

    Eu fiz um backup, tenho a BD original (sem divisão) guardada!!!

    As tabelas ligadas estão a apontar para o sítio correcto, para a tabela ***_be.accdb

    Aguardo a vossa ajuda!!

    Fernando Bueno
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1819
    Registrado : 13/04/2012

    Re: VBA não funciona depois de dividir BD - Access 2007

    Mensagem  Fernando Bueno em Sab 24 Maio 2014, 04:09

    Boa noite Maria.

    Tenta anexar apenas as partes envolvidas do banco para vermos um meio de ajuda-la.


    .................................................................................
    Um abraço
    Fernando Bueno


    O aumento do conhecimento é como uma esfera dilatando-se no espaço
    quanto maior a nossa compreensão,
    maior o nosso contacto com o desconhecido
    [Você precisa estar registrado e conectado para ver esta imagem.]

    Fernando Bueno
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1819
    Registrado : 13/04/2012

    Re: VBA não funciona depois de dividir BD - Access 2007

    Mensagem  Fernando Bueno em Ter 27 Maio 2014, 16:02

    Boa tarde Maria,

    Como anda esta duvida? Se resolveu o problema peço que marque como Resolvido

    para fechar o tópico.


    .................................................................................
    Um abraço
    Fernando Bueno


    O aumento do conhecimento é como uma esfera dilatando-se no espaço
    quanto maior a nossa compreensão,
    maior o nosso contacto com o desconhecido
    [Você precisa estar registrado e conectado para ver esta imagem.]

    marianeves
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Feminino
    Localização : Portugal
    Mensagens : 5
    Registrado : 22/05/2014

    Re: VBA não funciona depois de dividir BD - Access 2007

    Mensagem  marianeves em Qui 29 Maio 2014, 22:45

    Olá, boa noite!

    Ainda ando às voltas, tenho estado doente... Agradeço se puder manter o tópico...

    Obg

    Fernando Bueno
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1819
    Registrado : 13/04/2012

    Re: VBA não funciona depois de dividir BD - Access 2007

    Mensagem  Fernando Bueno em Sex 30 Maio 2014, 02:11

    Ok, ficamos no aguardo para qualquer duvida.

    Melhoras para sua saúde!


    .................................................................................
    Um abraço
    Fernando Bueno


    O aumento do conhecimento é como uma esfera dilatando-se no espaço
    quanto maior a nossa compreensão,
    maior o nosso contacto com o desconhecido
    [Você precisa estar registrado e conectado para ver esta imagem.]

    Fernando Bueno
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1819
    Registrado : 13/04/2012

    Re: VBA não funciona depois de dividir BD - Access 2007

    Mensagem  Fernando Bueno em Sab 14 Jun 2014, 16:53

    Boa tarde, como anda essa duvida?


    .................................................................................
    Um abraço
    Fernando Bueno


    O aumento do conhecimento é como uma esfera dilatando-se no espaço
    quanto maior a nossa compreensão,
    maior o nosso contacto com o desconhecido
    [Você precisa estar registrado e conectado para ver esta imagem.]

      Data/hora atual: Seg 05 Dez 2016, 16:33