MaximoAccess

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

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
    avatar
    Fernando Bueno
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1820
    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.]
    avatar
    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!!!!!!!!!
    avatar
    Fernando Bueno
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1820
    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!!
    avatar
    Fernando Bueno
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1820
    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.]
    avatar
    Fernando Bueno
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1820
    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
    avatar
    Fernando Bueno
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1820
    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.]
    avatar
    Fernando Bueno
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1820
    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: Qui 27 Jul 2017, 09:43