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]Função para criar tabela no backend.

    wsenna
    wsenna
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 491
    Registrado : 22/12/2009

    [Resolvido]Função para criar tabela no backend. Empty [Resolvido]Função para criar tabela no backend.

    Mensagem  wsenna 4/10/2016, 13:36

    Olá Feras de Plantão, bom dia.

    Seguinte: Trabalho com uma função que revincula todas as tabelas do BackEnd automaticamente e funciona perfeitamente bastando que em um formulário próprio eu indique o caminho da base de dados toda vez que eu alterar esse caminho, exemplo: \\Coord-1\Infobasic\EasyMemo_be.mdb. (imagem abaixo)
    O problema é que tenho uma Consulta Criar Tabela que executa esta ação no BackEnd, e exatamente por esse motivo, caso eu altere o caminho da base de dados sou obrigado a alterar manualmente essa consulta no mdb para depois criar meu mde novamente.
    Então, a pergunta é esta: Existe uma função que reconheça o novo caminho e informe o novo caminho para a consulta Criar Tabela?

    Aguardando, e um grande abraço.



    [Resolvido]Função para criar tabela no backend. <img src=" />


    WSenna


    Última edição por wsenna em 17/1/2017, 17:59, editado 3 vez(es)
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7996
    Registrado : 15/03/2013

    [Resolvido]Função para criar tabela no backend. Empty Re: [Resolvido]Função para criar tabela no backend.

    Mensagem  Alvaro Teixeira 4/10/2016, 15:03

    Olá wsenna,
    Mostre a consulta no modo SQL, acho que se colocar a mesma a executar via código pode alterar o caminho.

    Fiz uma busca aqui no fórm, veja se ajuda:
    https://www.maximoaccess.com/t6999-resolvidoonde-por-o-operador-in-na-sql
    https://www.maximoaccess.com/t8675-resolvidoexecutar-consultas-em-bd-diferentes
    Abraço
    wsenna
    wsenna
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 491
    Registrado : 22/12/2009

    [Resolvido]Função para criar tabela no backend. Empty Re: [Resolvido]Função para criar tabela no backend.

    Mensagem  wsenna 4/10/2016, 15:55

    Grande Teixeira, bom dia.

    Amigão, eu já havia feito uma busca exaustiva aqui no Fórum e no Google também mas não obtive êxito algum.
    Os links que o amigo me sugeriu não atendem meu propósito. Sei que é deveras complicado.
    Deixe-me explicar melhor: Quando vamos criar uma consulta ação do tipo Criar Tabela após criar a consulta escolhemos a ação e na caixa que se abre você clica em procurar e indica o caminho. No meu caso eu digito \\Coord-1\Infobasic\EasyMemo_be.mdb e pronto.
    Devo lembrar que a função que revincula as tabelas da base de dados exige uma tabela em que você inscreve o caminho do Backend e caso o Frontend não localiza sua base abre-se o formulário acima para que você indique o novo caminho e a coisa rola de forma esplêndida.
    Meu único problema é que ao alterar o caminho, o aplicativo localiza o novo caminho desde que eu o indique no formulário acima já exposto, mas a consulta Criar Tabela permanece com o caminho antigo.

    Grande abraço, WSenna
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7996
    Registrado : 15/03/2013

    [Resolvido]Função para criar tabela no backend. Empty Re: [Resolvido]Função para criar tabela no backend.

    Mensagem  Alvaro Teixeira 4/10/2016, 16:09

    Olá, veja exemplo que criei:
    [Resolvido]Função para criar tabela no backend. Zjtq1d

    Em VBA será usar a instrução SQL abaixo:
    Código:
    SELECT Tabela1.ID, Tabela1.Campo1, Tabela1.Campo2 INTO teste IN 'C:\Temp\back_end.accdb' FROM Tabela1;

    Abraço
    wsenna
    wsenna
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 491
    Registrado : 22/12/2009

    [Resolvido]Função para criar tabela no backend. Empty Re: [Resolvido]Função para criar tabela no backend.

    Mensagem  wsenna 4/10/2016, 16:46

    Então, isso é o que fazemos quando mudamos o caminho manualmente numa consulta ação tipo Criar Tabela, certo?

    No meu caso acredito que a "coisa" deve estar inserida nesse código abaixo que verifica o caminho do backende e se não encontra abre o formulário acima:

    mod_checavínculo

    Option Compare Database
    Option Explicit
    Public CaminhoAtual     As String
    Public booNovaChecagem  As Boolean
    Public booOk            As Boolean
    Public booSair          As Boolean
    Public Function fncChecaVinculo() As Boolean
    Dim PathBe    As String
    Dim NomeBE    As String
    Dim Contador  As Byte
    Dim box       As String

    On Error GoTo TrataErro

    '------------------------------------------------------
    'Passa o caminho e o nome do back-end para as variáveis
    '------------------------------------------------------
    PathBe = Nz(DLookup("path_0", "tblCaminhoBe"), "vazio")
    NomeBE = Nz(DLookup("NomeBe", "tblCaminhoBe"), "vazio")

    '-----------------------------------------------------------------
    'Verifica se o nome do back-end se encontra na tabela tblcaminhoBe
    '-----------------------------------------------------------------
    If NomeBE = "vazio" Then
       MsgBox "Entre com o nome do back-end no campo NomeBE da tabela tblCaminhoBe...", vbCritical, "Aviso"
       fncChecaVinculo = True
       Exit Function
    End If

    '---------------------------------------------------------------------------
    'Verifica se o caminho atual do back-end esta gravado na tabela tblCaminhoBe
    '---------------------------------------------------------------------------
    If PathBe = "vazio" Then
       CurrentDb.Execute "UPDATE tblCaminhoBe SET path_0 ='" & CurrentProject.path & "\" & NomeBE & "'"
       PathBe = CurrentProject.path & "\" & NomeBE
    End If

    '-------------------------------------------------------------------------------------
    'Passa o caminho do back-end, que está gravado no vínculo das tabelas, para a variável
    '-------------------------------------------------------------------------------------
    CaminhoAtual = fncBackEndAtual

    '-----------------------------------------------
    'Verifica se o back-end existe no local indicado
    '-----------------------------------------------
    If Len(Dir(PathBe) & "") > 0 Then
       '----------------------------------------------------
       'Verifica se o local atual do back-end corresponde
       'ao local gravado no vínculo.  caso não corresponda,
       'abre a barra de progresso para refazer os vinculos
       '----------------------------------------------------
       If CaminhoAtual <> PathBe Then
           CaminhoAtual = PathBe
           DoCmd.Close acForm, "Inicial"
           DoCmd.OpenForm "frmBarraProgresso", OpenArgs:=1
       Else
           If Len(Trim(DLookup("formPrincipal", "tblCaminhoBe")) & "") > 0 Then
               DoCmd.OpenForm DLookup("formPrincipal", "tblCaminhoBe")
           End If
       End If
    Else
       '----------------------------------------------------------------
       'Abre o formulário para indicar a nova localização do back-end
       '----------------------------------------------------------------
       DoCmd.OpenForm "frmCaminhoBe", , , , , acDialog, 1
       If booSair = True Then
           fncChecaVinculo = True
           Exit Function
       End If
       If booNovaChecagem Then fncChecaVinculo
    End If

    Sair:
       Exit Function
    TrataErro:
       Select Case err.Number
           Case 76, 52
               DoCmd.OpenForm "frmCaminhoBe", , , , , acDialog, 1
           Case 2102
               MsgBox "O formulário principal '" & DLookup("formPrincipal", "tblCaminhoBe") & "' não existe...", vbInformation, "Aviso"
               fncChecaVinculo = True
           Case Else
               MsgBox "Erro: " & err.Number & vbCrLf & err.Description, vbCritical, "Aviso", err.Helpfile, err.HelpContext
               fncChecaVinculo = True
           End Select
    End Function

    Private Function fncBackEndAtual() As String
    Dim strCon As String
    Dim strTabelaLink As String
    Dim tbl As DAO.TableDef

    On Error GoTo TrataErro

    '-----------------------------------------------
    'capturando o nome da última tabela vinculada
    '-----------------------------------------------
    For Each tbl In CurrentDb.TableDefs
       If Len(tbl.Connect & "") > 0 Then strTabelaLink = tbl.Name
    Next
    '-----------------------------------------------------
    'Passando o caminho do vínculo para a variável
    '-----------------------------------------------------
    strCon = CurrentDb.TableDefs(strTabelaLink).Connect
    '-----------------------------------------------------
    'Agora vou retirar apenas o caminho do accdb,
    'sem o ";DATABASE=" que o precede na string Connect.
    '-----------------------------------------------------

    fncBackEndAtual = right$(strCon, (Len(strCon) - (InStr(1, strCon, ";DATABASE=", 2) + 9)))

    Sair:
       Exit Function
    TrataErro:
       MsgBox "Erro: " & err.Number & vbCrLf & err.Description, vbCritical, "Aviso", err.Helpfile, err.HelpContext
       Resume Sair:
    End Function


    Estou a esmiuçar estas funções acima para tentar elaborar algo que resolva este problema.

    Abraços, WSenna
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7996
    Registrado : 15/03/2013

    [Resolvido]Função para criar tabela no backend. Empty Re: [Resolvido]Função para criar tabela no backend.

    Mensagem  Alvaro Teixeira 4/10/2016, 16:58

    Olá, respondendo à sua pergunta , Sim.
    Quanto ao código parece ser o do colega Avelino Sampaio para ligar tabelas.
    Agora, apenas demonstrei que é possível executar uma consulta criar tabela noutra base de dados.
    Para ser sincero, não compreendo onde está a sua dúvida.
    Abraço
    wsenna
    wsenna
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 491
    Registrado : 22/12/2009

    [Resolvido]Função para criar tabela no backend. Empty Re: [Resolvido]Função para criar tabela no backend.

    Mensagem  wsenna 4/10/2016, 17:14

    Caro Teixeira, veja:

    Conforme sua última sugestão "SELECT Tabela1.ID, Tabela1.Campo1, Tabela1.Campo2 INTO teste IN 'C:\Temp\back_end.accdb' FROM Tabela1;"

    Isso quer dizer: Você indicou o caminho 'C:\Temp\back_end.accdb', certo?

    Agora, imagine que no meu caso, o caminho envolve um computador de rede tipo '\\Coord-1\InfoBasic\back_end.accdb' caminho este que já estaria inscrito na sua sugestão, e de uma hora para a outra tivesse eu, por algum motivo, transferir o backend para uma outra máquina de rede tipo  '\\Digitallis\InfoBasic\back_end.accdb', como faria para ajustar automaticamente o caminho sugerido por você?

    Lembrando que o banco de dados é um MDE e entregue ao cliente. Assim teria eu que toda vez que o cliente transferisse o backend para outra máquina fazer os ajustes manualmente num mdb e depois criar o novo mde já com o caminho modificado.

    A idéia é: Como a função acima identifica caso haja modificações no caminho e proporciona ao cliente através do formulário postado lá na inicial indicar o novo caminho, tal facilidade tambem ocorresse na formulação para a criação da tabela no referido backend.

    Expliquei melhor?

    WSenna
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7996
    Registrado : 15/03/2013

    [Resolvido]Função para criar tabela no backend. Empty Re: [Resolvido]Função para criar tabela no backend.

    Mensagem  Alvaro Teixeira 4/10/2016, 17:42

    Olá, sim explicou melhor.
    Na minha opinião a questão está na consulta criar tabela.
    Ainda não postou, como quando e onde é que é invocada.
    Vamos imaginar que é em determinada função ou form.
    O que terá que fazer é alterar a chamada da consulta que tem armazenada por uma consulta em VBA.
    Aí pode consultar qual a tabela do backEnd e atribuir ao codigo da instruçao SQL o caminho e nome da tabela.
    Abraço
    wsenna
    wsenna
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 491
    Registrado : 22/12/2009

    [Resolvido]Função para criar tabela no backend. Empty Re: [Resolvido]Função para criar tabela no backend.

    Mensagem  wsenna 4/10/2016, 18:01

    Exatamente, na mosca.

    Tenho um formulário que é baseado em uma consulta que para ser exibido é deveras lento devido uma série de cálculos que esta consulta faz como por exemplo Quantos dias úteis existem num determinado mês, qual a carga horária que um determinado bolsista obteve nesses dias úteis desse determinado mês, se ele obteve horas extras ou se ficou devendo, quanto lhe será pago de acordo com a jornada empreendida nesse mês (lembrando que envolve dias de feriados e ponto facultativos).
    Tudo isso tornava o aplicativo muito lento, daí a solução que encontrei é que no primeiro dia dia do mês o Administrador do Banco de Dados execute essa consulta através de um botão de comando que leva em torno de um minuto para criar uma tabela no backend e todas as máquina que possuem o frontend pode consultar esses dados em frações de segundos.

    Formulário:

    [img][Resolvido]Função para criar tabela no backend. Qrnfvp[/img]


    Abraços, WSenna


    wsenna
    wsenna
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 491
    Registrado : 22/12/2009

    [Resolvido]Função para criar tabela no backend. Empty Re: [Resolvido]Função para criar tabela no backend.

    Mensagem  wsenna 4/10/2016, 18:18

    Dessa tabela criada no BackEnd me proporciona que emita relatórios rápidos como abaixo:


    [img][Resolvido]Função para criar tabela no backend. Zx60kl[/img]



    Abraços, WSenna
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7996
    Registrado : 15/03/2013

    [Resolvido]Função para criar tabela no backend. Empty Re: [Resolvido]Função para criar tabela no backend.

    Mensagem  Alvaro Teixeira 4/10/2016, 18:59

    Olá, estou no celular e não é fácil.
    Mas é isso, tem que alterar a consulta que o administrador chama mensalmente.

    Em código VBA, não esqueça.

    Veja no código acima já tem parte que pode utilizar para obter o caminho utilizado e nome da base de dados, Veja:

    PathBe = Nz(DLookup("path_0", "tblCaminhoBe"), "vazio")
    NomeBE = Nz(DLookup("NomeBe", "tblCaminhoBe"), "vazio")

    Wsenna, toca a por a mão na massa.
    Se tiver dificuldade, poste aqui a instrução SQL da consulta que tem.

    Abraço
    wsenna
    wsenna
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 491
    Registrado : 22/12/2009

    [Resolvido]Função para criar tabela no backend. Empty Re: [Resolvido]Função para criar tabela no backend.

    Mensagem  wsenna 5/10/2016, 00:52

    Caro Teixeira, sente o drama:

    SQL


    SELECT DISTINCT tblFrequência.Ano, Month([DataEvento]) AS Mês, Format([DataEvento],"mmmm/yyyy") AS MêsRef, tblTime.DataEvento, DTS(First([FirstDia]),Last([LastDay])) AS DiasPrevistos, tblFrequência.CodUsuario, tblFrequência.Usuario, tblFrequência.Bolsa, Int(DateDiff("n",0,[JornadaDia])*[DiasPrevistos]/60) & ":" & Format((DateDiff("n",0,[JornadaDia])*[DiasPrevistos] Mod 60),"00") AS JornadaPrevista, ([Bolsa]/Left((DTS(First([FirstDia]),Last([LastDay])))*Int(Left([JornadaDia],2)) & ":00",2)) AS ValorHora, tblTime.Início, tblTime.Final, tblFrequência.JornadaDia, IIf(IsNull([Início]) Or IsNull([Final]),0,fncIntervalo([Início],[Final])) AS HorasTrabalhadas INTO tblBancoHoras IN '\\Coord-1\InfoBasic\EasyMemo_Be.mdb'
    FROM (tblFrequência INNER JOIN tblMeses ON (tblFrequência.Ano = tblMeses.Ano) AND (tblFrequência.MêsTrab = tblMeses.MêsTrab)) INNER JOIN tblTime ON tblFrequência.IdFreq = tblTime.IdFreq
    GROUP BY tblFrequência.Ano, Month([DataEvento]), Format([DataEvento],"mmmm/yyyy"), tblTime.DataEvento, tblFrequência.CodUsuario, tblFrequência.Usuario, tblFrequência.Bolsa, tblTime.Início, tblTime.Final, tblFrequência.JornadaDia, IIf(IsNull([Início]) Or IsNull([Final]),0,fncIntervalo([Início],[Final])), tblFrequência.IdFreq
    HAVING (((tblFrequência.Ano)=Year(Date())) AND ((Month([DataEvento]))ORDER BY tblFrequência.Ano DESC , Month([DataEvento]) DESC , tblFrequência.CodUsuario, tblFrequência.IdFreq;


    Coisa braba não?

    Abraços, WSenna
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7996
    Registrado : 15/03/2013

    [Resolvido]Função para criar tabela no backend. Empty Re: [Resolvido]Função para criar tabela no backend.

    Mensagem  Alvaro Teixeira 5/10/2016, 10:14

    Olá Amigo Wsenna,

    Já sabe que deve passar a chamar a consulta via VBA, exemplo:
    DoCmd.RunSQL "SELECT DISTINCT tblFrequência.Ano . . . blFrequência.IdFreq;"

    Depois deve alterar onde tem:
    IN '\\Coord-1\InfoBasic\EasyMemo_Be.mdb' FROM

    por:
    IN '" & DLookup("path_0", "tblCaminhoBe") & "' FROM

    Como pode verificar, irá buscar à tabela tblCaminhoBe o caminho e nome da base dados que está configurado e em utilização.
    Abraço
    wsenna
    wsenna
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 491
    Registrado : 22/12/2009

    [Resolvido]Função para criar tabela no backend. Empty Re: [Resolvido]Função para criar tabela no backend.

    Mensagem  wsenna 6/10/2016, 12:33

    Grande Teixeira, bom dia.

    Amigão, confesso que a idade já pesa e não consegui aplicar a sua sugestão.


    Abraços, WSenna
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7996
    Registrado : 15/03/2013

    [Resolvido]Função para criar tabela no backend. Empty Re: [Resolvido]Função para criar tabela no backend.

    Mensagem  Alvaro Teixeira 6/10/2016, 17:42

    Olá Wsenna, idade ... ahaha, é como o vinho do Porto, quanto mais velho melhor!

    Vamos fazer assim, disse que "...Administrador do Banco de Dados execute essa consulta através de um botão de comando ".
    Pode postar o código da sub desse botão?
    Abraço
    wsenna
    wsenna
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 491
    Registrado : 22/12/2009

    [Resolvido]Função para criar tabela no backend. Empty Re: [Resolvido]Função para criar tabela no backend.

    Mensagem  wsenna 6/10/2016, 20:55

    Olá Teixeira, boa tarde.

    Amigão, na verdade não é um botão de comando e sim uma listbox denominada List2 que de acordo com uma combo esta listbox exibe vários grupos de ítens referentes ao ítem selecionado na Combox acima.
    Neste formulário ainda possuo um campo oculto que verifica a função do usuário, se ele é administrador, developer ou subcoordenador.

    O código é o seguinte:

    If Me.List2= "Atualizar Dados do Banco de Horas" Then
    If Me.txtFunção <> "Administrador" And Me.txtFunção <> "Developer" And Me.txtFunção <> "Sub-Coordenador" Then
    MsgBox "Perdão " & Me.txtNome & ". " & Chr(13) & "Você não possui prerrogativas para atualizar o Banco de Horas, " & Chr(13) & "solicite ajuda à Coordenação. ", vbInformation, " InfoBasic Smart System"
    DoCmd.CancelEvent
    Else
    MsgBox "Este procedimento pode demandar alguns minutos. ", vbInformation, " InfoBasic Smart System"
    DoCmd.SetWarnings False
    Dim stDocName As String
    stDocName = "Consulta100C"
    DoCmd.OpenQuery stDocName, acNormal, acEdit
    DoCmd.SetWarnings True
    MsgBox "Dados atualizados com sucesso. ", vbInformation, " InfoBasic Smart System"
    DoCmd.CancelEvent
    End If


    Abraços, WSenna
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7996
    Registrado : 15/03/2013

    [Resolvido]Função para criar tabela no backend. Empty Re: [Resolvido]Função para criar tabela no backend.

    Mensagem  Alvaro Teixeira 6/10/2016, 21:11

    Olá Wsenna,
    Então com base no código:
    Código:
    stDocName = "Consulta100C"
    DoCmd.OpenQuery stDocName, acNormal, acEdit
    é aqui que está a chamar a consulta.
    Pode postar novamente a consulta Consulta100C em modo de visualização SQL
    A que está acima apresentava alguns erros, é para ter a certeza.
    Se possível coloque numa de caixa de código como fiz acima (clicar no simbolo <> antes de colar)
    Abraço


    wsenna
    wsenna
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 491
    Registrado : 22/12/2009

    [Resolvido]Função para criar tabela no backend. Empty Re: [Resolvido]Função para criar tabela no backend.

    Mensagem  wsenna 7/10/2016, 12:36

    Ok Grande Teixeira.


    Para facilitar, vamos utilizar uma nova estratégia:
    Ao invés de uma listbox passemos a utilizar um botão de comando mesmo, certo?

    Heis o código:

    Código:
    Private Sub Comando17_Click()
        On Error GoTo Err_Comando17_Click

        MsgBox "Este procedimento pode demandar alguns minutos. ", vbInformation, " InfoBasic Smart System"
        DoCmd.SetWarnings False
        Dim stDocName As String
        stDocName = "Consulta100C"
        DoCmd.OpenQuery stDocName, acNormal, acEdit
        DoCmd.SetWarnings True
        MsgBox "Dados atualizados com sucesso. ", vbInformation, " InfoBasic Smart System"
        DoCmd.CancelEvent
        End If

    Exit_Comando17_Click:
        Exit Sub

    Err_Comando17_Click:
        MsgBox err.Description
        Resume Exit_Comando17_Click
        
    End Sub


    Facilitou?

    Abraços, WSenna
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7996
    Registrado : 15/03/2013

    [Resolvido]Função para criar tabela no backend. Empty Re: [Resolvido]Função para criar tabela no backend.

    Mensagem  Alvaro Teixeira 7/10/2016, 13:17

    Olá, não tem problema, pode ser de ambas as formas, a que preferir.

    O que pedi foi para colocar é a instrução SQL que tem na mensagem nº 12 numa caixa de codigo.
    Copie novamente da sua consulta "Consulta100C" e poste numa caixa de código.
    A razão é que a da mensagem nº 12 apresentava erro, e pretendo que poste novamente.
    Abraço
    wsenna
    wsenna
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 491
    Registrado : 22/12/2009

    [Resolvido]Função para criar tabela no backend. Empty Re: [Resolvido]Função para criar tabela no backend.

    Mensagem  wsenna 7/10/2016, 14:37

    Desculpe-me Teixeira, aí vai:


    Código:
    SELECT DISTINCT tblFrequência.Ano, Month([DataEvento]) AS Mês, Format([DataEvento],"mmmm/yyyy") AS MêsRef, tblTime.DataEvento, DTS(First([FirstDia]),Last([LastDay])) AS DiasPrevistos, tblFrequência.CodUsuario, tblFrequência.Usuario, tblFrequência.Bolsa, Int(DateDiff("n",0,[JornadaDia])*[DiasPrevistos]/60) & ":" & Format((DateDiff("n",0,[JornadaDia])*[DiasPrevistos] Mod 60),"00") AS JornadaPrevista, ([Bolsa]/Left((DTS(First([FirstDia]),Last([LastDay])))*Int(Left([JornadaDia],2)) & ":00",2)) AS ValorHora, tblTime.Início, tblTime.Final, tblFrequência.JornadaDia, IIf(IsNull([Início]) Or IsNull([Final]),0,fncIntervalo([Início],[Final])) AS HorasTrabalhadas INTO tblBancoHoras IN '\\Coord-1\InfoBasic\EasyMemo_Be.mdb'
    FROM (tblFrequência INNER JOIN tblMeses ON (tblFrequência.Ano = tblMeses.Ano) AND (tblFrequência.MêsTrab = tblMeses.MêsTrab)) INNER JOIN tblTime ON tblFrequência.IdFreq = tblTime.IdFreq
    GROUP BY tblFrequência.Ano, Month([DataEvento]), Format([DataEvento],"mmmm/yyyy"), tblTime.DataEvento, tblFrequência.CodUsuario, tblFrequência.Usuario, tblFrequência.Bolsa, tblTime.Início, tblTime.Final, tblFrequência.JornadaDia, IIf(IsNull([Início]) Or IsNull([Final]),0,fncIntervalo([Início],[Final])), tblFrequência.IdFreq
    HAVING (((tblFrequência.Ano)=Year(Date())) AND ((Month([DataEvento]))<Month(Date())) AND ((tblTime.Final) Is Not Null))
    ORDER BY tblFrequência.Ano DESC , Month([DataEvento]) DESC , tblFrequência.CodUsuario, tblFrequência.IdFreq;
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7996
    Registrado : 15/03/2013

    [Resolvido]Função para criar tabela no backend. Empty Re: [Resolvido]Função para criar tabela no backend.

    Mensagem  Alvaro Teixeira 7/10/2016, 17:35

    Olá amigo Wsenna,
    Estou a ver, mas são muitos campos com formatações.
    Para facilitar, poderia postar base de dados com:

    1-Tabelas, pode ser com meia duzia de dados demonstrativos, apenas para executar a consulta como tem;
    2-a consulta em questão Consulta100C e caso seja dependente de outras, as dependentes também;
    3-e pode ser um form, com um botão da mensagem nº 18.

    Assim ficaria mais fácil, podetá ser?
    Abraço
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7996
    Registrado : 15/03/2013

    [Resolvido]Função para criar tabela no backend. Empty Re: [Resolvido]Função para criar tabela no backend.

    Mensagem  Alvaro Teixeira 7/10/2016, 18:43

    Olá, Entretanto a olho, Shocked
    Código:
    Private Sub Comando17_Click()
        On Error GoTo Err_Comando17_Click

        MsgBox "Este procedimento pode demandar alguns minutos. ", vbInformation, " InfoBasic Smart System"
       
        'inicio, definir variaveis
        Dim strSql, strCaminho
        'vai consultar caminho
        strCaminho = DLookup("path_0", "tblCaminhoBe")

        'construir instrução SQL
        strSql = "SELECT DISTINCT tblFrequência.Ano, Month([DataEvento]) AS Mês, Format([DataEvento],'mmmm/yyyy') AS MêsRef, " & _
                "tblTime.DataEvento, DTS(First([FirstDia]),Last([LastDay])) AS DiasPrevistos, " & _
                "tblFrequência.CodUsuario, tblFrequência.Usuario, tblFrequência.Bolsa, " & _
                "Int(DateDiff('n',0,[JornadaDia])*[DiasPrevistos]/60)" & ":" & _
                "Format((DateDiff('n',0,[JornadaDia])*[DiasPrevistos] Mod 60),'00') AS JornadaPrevista, " & _
                "([Bolsa]/Left((DTS(First([FirstDia]),Last([LastDay])))*Int(Left([JornadaDia],2)) & ':00',2)) AS ValorHora, " & _
                "tblTime.Início, tblTime.Final, tblFrequência.JornadaDia, IIf(IsNull([Início]) Or " & _
                "IsNull([Final]),0,fncIntervalo([Início],[Final])) AS HorasTrabalhadas INTO tblBancoHoras " & _
                "IN '" & strCaminho & "' FROM (tblFrequência INNER JOIN tblMeses ON (tblFrequência.Ano = tblMeses.Ano) AND " & _
                "(tblFrequência.MêsTrab = tblMeses.MêsTrab)) INNER JOIN tblTime ON tblFrequência.IdFreq = tblTime.IdFreq " & _
                "GROUP BY tblFrequência.Ano, Month([DataEvento]), Format([DataEvento],'mmmm/yyyy'), tblTime.DataEvento, " & _
                "tblFrequência.CodUsuario, tblFrequência.Usuario, tblFrequência.Bolsa, tblTime.Início, tblTime.Final, " & _
                "tblFrequência.JornadaDia, IIf(IsNull([Início]) Or IsNull([Final]),0,fncIntervalo([Início],[Final])), " & _
                "tblFrequência.IdFreq HAVING (((tblFrequência.Ano) = Year(Date)) And ((Month([DataEvento])) < Month(Date)) " & _
                "And ((tblTime.Final) Is Not Null)) ORDER BY tblFrequência.Ano DESC , Month([DataEvento]) DESC , " & _
                "tblFrequência.CodUsuario, tblFrequência.IdFreq;"

        'aqui pode depois ser retirado é para ver a instrução SQL
        MsgBox strSql
       
        'aqui chama a consulta
        DoCmd.RunSQL (strSql)

        DoEvents
        MsgBox "Dados atualizados com sucesso. ", vbInformation, " InfoBasic Smart System"

    Exit_Comando17_Click:
        Exit Sub

    Err_Comando17_Click:
        MsgBox Err.Description
        Resume Exit_Comando17_Click
       
    End Sub

    Veja no que dá Rolling Eyes
    Abraço
    wsenna
    wsenna
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 491
    Registrado : 22/12/2009

    [Resolvido]Função para criar tabela no backend. Empty Re: [Resolvido]Função para criar tabela no backend.

    Mensagem  wsenna 7/10/2016, 20:02

    Ok Mestre, ai vai:



    Segue uma pequena amostra zipada (Access 2003)

    Seguinte: Devo informar que tentei utilizar o código sugerido por você e deu erro.
    É deveras compreensível já que no olho a "coisa" fica mais complicada ainda, certo?
    Espero que com o exemplo abaixo possa contribuir para uma elucidação mais rápida.
    Note que pós alguns segundo surge a mensagem de que não foi possível concluir a execução da consulta pois o caminho não foi encontrado.
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7996
    Registrado : 15/03/2013

    [Resolvido]Função para criar tabela no backend. Empty Re: [Resolvido]Função para criar tabela no backend.

    Mensagem  Alvaro Teixeira 8/10/2016, 00:54

    Olá Wsenna, pequena mas grande amostra para concluir.

    Nota, estava a falar a tabela tblCaminhoBe, repare que é lá que vai consultar o caminho e nome da base de dados de BackEnd.
    Ficou assim:
    Código:
    Private Sub Comando17_Click()
        On Error GoTo Err_Comando17_Click

        MsgBox "Este procedimento pode demandar alguns minutos. ", vbInformation, " InfoBasic Smart System"
        
        'inicio, definir variaveis
        Dim strSql, strCaminho
        'vai consultar caminho
        strCaminho = DLookup("path_0", "tblCaminhoBe")

        'construir instrução SQL
        strSql = "SELECT DISTINCT tblFrequência.Ano, Month([DataEvento]) AS Mês, Format([DataEvento],'mmmm/yyyy') AS MêsRef, " & _
                 "tblTime.DataEvento, DTS(First([FirstDia]),Last([LastDay])) AS DiasPrevistos, " & _
                 "tblFrequência.CodUsuario, tblFrequência.Usuario, tblFrequência.Bolsa, " & _
                 "Int(DateDiff('n',0,[JornadaDia])*[DiasPrevistos]/60) &':'& " & _
                 "Format((DateDiff('n',0,[JornadaDia])*[DiasPrevistos] Mod 60),'00') AS JornadaPrevista, " & _
                 "([Bolsa]/Left((DTS(First([FirstDia]),Last([LastDay])))*Int(Left([JornadaDia],2)) & ':00',2)) AS ValorHora, " & _
                 "tblTime.Início, tblTime.Final, tblFrequência.JornadaDia, IIf(IsNull([Início]) Or " & _
                 "IsNull([Final]),0,fncIntervalo([Início],[Final])) AS HorasTrabalhadas INTO tblBancoHoras " & _
                 "IN '" & strCaminho & "' FROM (tblFrequência INNER JOIN tblMeses ON (tblFrequência.Ano = tblMeses.Ano) AND " & _
                 "(tblFrequência.MêsTrab = tblMeses.MêsTrab)) INNER JOIN tblTime ON tblFrequência.IdFreq = tblTime.IdFreq " & _
                 "GROUP BY tblFrequência.Ano, Month([DataEvento]), Format([DataEvento],'mmmm/yyyy'), tblTime.DataEvento, " & _
                 "tblFrequência.CodUsuario, tblFrequência.Usuario, tblFrequência.Bolsa, tblTime.Início, tblTime.Final, " & _
                 "tblFrequência.JornadaDia, IIf(IsNull([Início]) Or IsNull([Final]),0,fncIntervalo([Início],[Final])), " & _
                 "tblFrequência.IdFreq HAVING tblFrequência.Ano = Year(Date()) And Month([DataEvento]) < Month(Date()) " & _
                 "And tblTime.Final Is Not Null ORDER BY tblFrequência.Ano DESC , Month([DataEvento]) DESC , tblFrequência.CodUsuario;"

      
        'aqui chama a consulta
        DoCmd.SetWarnings False
        DoCmd.RunSQL (strSql)

        DoEvents
        DoCmd.SetWarnings True
        MsgBox "Dados atualizados com sucesso. ", vbInformation, " InfoBasic Smart System"

    Exit_Comando17_Click:
        Exit Sub

    Err_Comando17_Click:
        MsgBox Err.Description
        Resume Exit_Comando17_Click
        
    End Sub

    Segue o meu teste,
    Está por defeito para rolar na pasta C:\TempWsenna
    Para outro arquivo ou pasta alterar na tabela tblCaminhoBe

    No seu programa é só colar, pois você tem a tabela com o caminho no seu FronEnd.
    Abraço
    Anexos
    [Resolvido]Função para criar tabela no backend. AttachmentTempWsenna.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (99 Kb) Baixado 36 vez(es)
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7996
    Registrado : 15/03/2013

    [Resolvido]Função para criar tabela no backend. Empty Re: [Resolvido]Função para criar tabela no backend.

    Mensagem  Alvaro Teixeira 8/10/2016, 01:06

    Olá, hoje fica para testar.
    Amanha ajusto no seu código da mensagem 16.
    Abraço
    wsenna
    wsenna
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 491
    Registrado : 22/12/2009

    [Resolvido]Função para criar tabela no backend. Empty Re: [Resolvido]Função para criar tabela no backend.

    Mensagem  wsenna 8/10/2016, 02:30

    Super, Hiper, Máximo Mestre Teixeira, boníssima noite.


    Imagine: Importei somente o formulário frmAtualização do exemplo de teste que me enviastes e a coisa funfou de forma esplêndida, explico:
    1 - No meu aplicativo a tabela tblCaminhoBe traz gravado co campo Path_0 o caminho do backende.
    2 - Caso o backend seja movido para outro local pelo código que postei na mensagem 5 lá em cima abre um formulário também postado na mensagem 1 para que você indique o novo caminho e show, um outro formulário com uma barra de progresso refaz o caminho e revincula todas as tabelas, no meu caso são 93) e ao final o aplicativo abre normalmente.
    3 - O que fiz, foi deletar a tabela tblBancoHoras do meu backend original e testei o formulário que você me enviou. Na mosca, ao final de alguns segundos lá estava ela, a tblBancoHoras criada novamente.
    4 - Em seguida mudei o meu backend para outro diretório, como poderia ter movido para outra máquina também, e executei meu aplicativo.
    5 - Como a base de dados não foi encontrada, abriu-se o formulário de revinculo automático, indiquei o novo caminho, as tabelas foram vinculadas novamente e aí, então tive o cuidado de deletar novamente a tabela tblBancoHoras só pra testar seu exemplo.
    6 - Pow, a tabela foi criada novamente como você sugeriu.

    Então, não sei mais o que o Amigo tem a ajustar, pra mim já está de bom tamanho, fico imensamente grato, contudo, caso queira dar mais um empurrãozinho fique a vontade para ajustar.

    É muito gratificante encontrar Amigos como você, o JPaulo, o Avelino, o Attila (há muito que não tenho notícias dele) e tantos outros que habitam essa Selva, verdadeiras Feras em programação VBA.

    Fique com Deus e tenha um ótimo final de semana.

    Abraços, WSenna
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7996
    Registrado : 15/03/2013

    [Resolvido]Função para criar tabela no backend. Empty Re: [Resolvido]Função para criar tabela no backend.

    Mensagem  Alvaro Teixeira 8/10/2016, 09:32

    Olá Wsenna,
    Obrigado pelas palavras gratificantes, fico feliz por ter ajudado.

    Como prometido, segue o código incluído na listbox List2 que postou:
    Código:
    If Me.List2 = "Atualizar Dados do Banco de Horas" Then
        If Me.txtFunção <> "Administrador" And Me.txtFunção <> "Developer" And Me.txtFunção <> "Sub-Coordenador" Then
            MsgBox "Perdão " & Me.txtNome & ". " & Chr(13) & "Você não possui prerrogativas para atualizar o Banco de Horas, " & Chr(13) & "solicite ajuda à Coordenação. ", vbInformation, " InfoBasic Smart System"
            DoCmd.CancelEvent
        Else
        'INICIO Parte nova==============================
        'inicio, definir variaveis
        Dim strSql, strCaminho
        'vai consultar caminho
        strCaminho = DLookup("path_0", "tblCaminhoBe")

        'construir instrução SQL
        strSql = "SELECT DISTINCT tblFrequência.Ano, Month([DataEvento]) AS Mês, Format([DataEvento],'mmmm/yyyy') AS MêsRef, " & _
                 "tblTime.DataEvento, DTS(First([FirstDia]),Last([LastDay])) AS DiasPrevistos, " & _
                 "tblFrequência.CodUsuario, tblFrequência.Usuario, tblFrequência.Bolsa, " & _
                 "Int(DateDiff('n',0,[JornadaDia])*[DiasPrevistos]/60) &':'& " & _
                 "Format((DateDiff('n',0,[JornadaDia])*[DiasPrevistos] Mod 60),'00') AS JornadaPrevista, " & _
                 "([Bolsa]/Left((DTS(First([FirstDia]),Last([LastDay])))*Int(Left([JornadaDia],2)) & ':00',2)) AS ValorHora, " & _
                 "tblTime.Início, tblTime.Final, tblFrequência.JornadaDia, IIf(IsNull([Início]) Or " & _
                 "IsNull([Final]),0,fncIntervalo([Início],[Final])) AS HorasTrabalhadas INTO tblBancoHoras " & _
                 "IN '" & strCaminho & "' FROM (tblFrequência INNER JOIN tblMeses ON (tblFrequência.Ano = tblMeses.Ano) AND " & _
                 "(tblFrequência.MêsTrab = tblMeses.MêsTrab)) INNER JOIN tblTime ON tblFrequência.IdFreq = tblTime.IdFreq " & _
                 "GROUP BY tblFrequência.Ano, Month([DataEvento]), Format([DataEvento],'mmmm/yyyy'), tblTime.DataEvento, " & _
                 "tblFrequência.CodUsuario, tblFrequência.Usuario, tblFrequência.Bolsa, tblTime.Início, tblTime.Final, " & _
                 "tblFrequência.JornadaDia, IIf(IsNull([Início]) Or IsNull([Final]),0,fncIntervalo([Início],[Final])), " & _
                 "tblFrequência.IdFreq HAVING tblFrequência.Ano = Year(Date()) And Month([DataEvento]) < Month(Date()) " & _
                 "And tblTime.Final Is Not Null ORDER BY tblFrequência.Ano DESC , Month([DataEvento]) DESC , tblFrequência.CodUsuario;"
      
        'aqui chama a consulta
        DoCmd.SetWarnings False
        DoCmd.RunSQL (strSql)

        DoEvents
        DoCmd.SetWarnings True
        MsgBox "Dados atualizados com sucesso. ", vbInformation, " InfoBasic Smart System"
        
        'FIM parte nova=========================
        DoCmd.CancelEvent
    End If

    Abraço Amigo e bom fim de semana
    cheers
    wsenna
    wsenna
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 491
    Registrado : 22/12/2009

    [Resolvido]Função para criar tabela no backend. Empty Re: [Resolvido]Função para criar tabela no backend.

    Mensagem  wsenna 8/10/2016, 13:57

    Grande Teixeira, bom dia.

    Perfeito, como afirma nosso Guru JPaulo "Funfou Legal", apenas um mínimo detalhe que corrigi de pronto:
    No início da instrução SQL faltou o campo IdFreq, veja:

    ...
    strSql = "SELECT DISTINCT tblFrequência.Ano, ...

    Daí corrigi para: ... strSql = "SELECT DISTINCT tblFrequência.IdFreq, tblFrequência.Ano, ...

    No mais, as palavras são verdadeiras e a admiração é imensa.
    Tenha um ótimo final de semana e Deus o abençoe sempre.

    Abraços, WSenna
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7996
    Registrado : 15/03/2013

    [Resolvido]Função para criar tabela no backend. Empty Re: [Resolvido]Função para criar tabela no backend.

    Mensagem  Alvaro Teixeira 8/10/2016, 15:23

    Olá Wsenna, bom dia amigo.

    Sim, deve ter falhado ao fazer os ajustes do SQL.
    Será melhor gerar um ficheiro com a versão antiga e outro com a versão nova e comparar se ficou igual.
    Abraço
    wsenna
    wsenna
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 491
    Registrado : 22/12/2009

    [Resolvido]Função para criar tabela no backend. Empty Re: [Resolvido]Função para criar tabela no backend.

    Mensagem  wsenna 8/10/2016, 15:35

    Fiz isso Amigão, ficou perfeito.

    Mais uma vez, um grande abraço e um beijo em seu coração.

    WSenna
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7996
    Registrado : 15/03/2013

    [Resolvido]Função para criar tabela no backend. Empty Re: [Resolvido]Função para criar tabela no backend.

    Mensagem  Alvaro Teixeira 10/10/2016, 14:04

    cheers
    wsenna
    wsenna
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 491
    Registrado : 22/12/2009

    [Resolvido]Função para criar tabela no backend. Empty Re: [Resolvido]Função para criar tabela no backend.

    Mensagem  wsenna 17/1/2017, 17:58

    Olá Feras de Plantão, boa tarde.

    Novamente recorro aos mestres para uma ajuda fundamental na instrução sql abaixo:

    Há aproximadamente um ano o Mestre AHTeixeira me ajudou com o código abaixo para criar uma tabela no backend e a coisa funfou esplendidamente bem.
    Naquela época eu pretendia cria uma tabela na base de dados do backend de modo a retratar todo o movimento do ano até o mês anterior ao mês atual.

    Heis o código:

    Private Sub Comando17_Click()
       On Error GoTo Err_Comando17_Click

       If MsgBox("Este procedimento pode demandar alguns minutos.   " & Chr(13) & "Você pretende continuar ?    ", vbYesNo, "  InfoBasic Smart System") = 6 Then
       
       'inicio, definir variaveis
       Dim strSql, strCaminho
       'vai consultar caminho
       strCaminho = DLookup("path_0", "tblCaminhoBe")

       'construir instrução SQL
       strSql = "SELECT DISTINCT tblFrequência.IdFreq, tblFrequência.Ano, Month([DataEvento]) AS Mês, Format([DataEvento],'mmmm/yyyy') AS MêsRef, " & _
                "tblTime.DataEvento, DTS(First([FirstDia]),Last([LastDay])) AS DiasPrevistos, " & _
                "tblFrequência.CodUsuario, tblFrequência.Usuario, tblFrequência.Bolsa, " & _
                "Int(DateDiff('n',0,[JornadaDia])*[DiasPrevistos]/60) &':'& " & _
                "Format((DateDiff('n',0,[JornadaDia])*[DiasPrevistos] Mod 60),'00') AS JornadaPrevista, " & _
                "([Bolsa]/Left((DTS(First([FirstDia]),Last([LastDay])))*Int(Left([JornadaDia],2)) & ':00',2)) AS ValorHora, " & _
                "tblTime.Início, tblTime.Final, tblFrequência.JornadaDia, IIf(IsNull([Início]) Or " & _
                "IsNull([Final]),0,fncIntervalo([Início],[Final])) AS HorasTrabalhadas INTO tblBancoHoras " & _
                "IN '" & strCaminho & "' FROM (tblFrequência INNER JOIN tblMeses ON (tblFrequência.Ano = tblMeses.Ano) AND " & _
                "(tblFrequência.MêsTrab = tblMeses.MêsTrab)) INNER JOIN tblTime ON tblFrequência.IdFreq = tblTime.IdFreq " & _
                "GROUP BY tblFrequência.Ano, Month([DataEvento]), Format([DataEvento],'mmmm/yyyy'), tblTime.DataEvento, " & _
                "tblFrequência.CodUsuario, tblFrequência.Usuario, tblFrequência.Bolsa, tblTime.Início, tblTime.Final, " & _
                "tblFrequência.JornadaDia, IIf(IsNull([Início]) Or IsNull([Final]),0,fncIntervalo([Início],[Final])), " & _
                "tblFrequência.IdFreq HAVING tblFrequência.Ano = Year(Date()) And Month([DataEvento]) < Month(Date()) " & _
                "And tblTime.Final Is Not Null ORDER BY tblFrequência.Ano DESC , Month([DataEvento]) DESC , tblFrequência.CodUsuario;"

     
       'aqui chama a consulta
       DoCmd.SetWarnings False
       DoCmd.RunSQL (strSql)

       DoEvents
       DoCmd.SetWarnings True
       MsgBox "Dados atualizados com sucesso. ", vbInformation, " InfoBasic Smart System"
       
       DoCmd.OpenForm "frmAdministrador"
       DoCmd.Close acForm, "frmAtualização"
       
       End If

    Exit_Comando17_Click:
       Exit Sub

    Err_Comando17_Click:
       MsgBox err.Description
       Resume Exit_Comando17_Click
       
    End Sub


    Acontece que a diretoria resolveu que a tabela a ser criada não expurgue os dados do ano anterior, mantendo todos os dados e apenas acrescentando os novos dados até o final do mês anterior ao atual.
    Já queimei meus neurônios e não estou conseguindo adaptar a sua instrução SQL.

    Fico aguardando a mão dos Mestres realizar esse novo milagre da informática.

    Abraços, WSenna
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7996
    Registrado : 15/03/2013

    [Resolvido]Função para criar tabela no backend. Empty Re: [Resolvido]Função para criar tabela no backend.

    Mensagem  Alvaro Teixeira 17/1/2017, 21:12

    Olá Amigo, estou no celular.
    Mas lembrei uma forma simples.
    Depois de gerar, porque não faz uma consulta a eliminar todos antes da data pretendida.
    Nota, não é solução, mas resolve no imediato.
    Abraço
    wsenna
    wsenna
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 491
    Registrado : 22/12/2009

    [Resolvido]Função para criar tabela no backend. Empty Re: [Resolvido]Função para criar tabela no backend.

    Mensagem  wsenna 17/1/2017, 21:37

    Grande Teixeira, boa tarde.

    Amigão, primeiro deixa eu lhe dizer que tive de alterar um pouco o seu código, justamente na linha onde filtrava o ano atual e o mês anterior ao mês atual, daí já deu pra notar o problema, como filtrar o ano atual e o mês anterior ao mês atual se estamos em Janeiro?
    Daí fiz o seguinte, na linha abaixo:

    "tblFrequência.IdFreq HAVING tblFrequência.Ano = Year(Date()) And Month([DataEvento]) < Month(Date()) " & _

    Mudei para:

    "tblFrequência.IdFreq HAVING tblFrequência.Ano >= Year(Date())-1 " & _

    Assim criei a tabela envolvendo todos os registros do ano anterior e mais alguns já criados no mês atual.

    Depois através de consultas fiz como o Mestre sugeriu e a coisa funfou.

    De qualquer forma minha gratidão é imensa.

    Grande abraço, WSenna
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7996
    Registrado : 15/03/2013

    [Resolvido]Função para criar tabela no backend. Empty Re: [Resolvido]Função para criar tabela no backend.

    Mensagem  Alvaro Teixeira 18/1/2017, 11:06

    Olá Wsenna,
    Se pretende fazer o calculo dos dados até um ano atrás da data atual podemos usar a função DateAdd do Access.

    DateAdd("yyyy", -1, Date())

    Neste caso vai retirar um ano à data do sistema.

    Então, depois será alterar de:
    "tblFrequência.IdFreq HAVING tblFrequência.Ano = Year(Date()) And Month([DataEvento]) < Month(Date()) " & _

    para:
    "tblFrequência.IdFreq HAVING tblFrequência.Ano = Year(DateAdd("yyyy", -1, Date())) And Month([DataEvento]) < Month(DateAdd("yyyy", -1, Date())) " & _

    Para facilitar, pode adicionar no código:
    dim dtUmAno as date
    dtUmAno = DateAdd("yyyy", -1, Date())


    Ficando então assim no Sql:
    "tblFrequência.IdFreq HAVING tblFrequência.Ano = Year(dtUmAno) And Month([DataEvento]) < Month(dtUmAno) " & _

    Abraço
    wsenna
    wsenna
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 491
    Registrado : 22/12/2009

    [Resolvido]Função para criar tabela no backend. Empty Re: [Resolvido]Função para criar tabela no backend.

    Mensagem  wsenna 18/1/2017, 15:45

    Amigão Teixeira, boa tarde.

    Eu fiz como você havia me sugerido ontem e a coisa funfou lindamente. Hoje pela manhã instalei o aplicativo no trampo e o diretor achou perfeito.
    Chegando em casa resolvi testar as modificação sugeridas acima e infelizmente deu erro nos dois modos sugeridos.

    De qualquer forma fico muito grato por tudo o que o Mestre já me ensinou e imensamente feliz por sempre poder contar com as Feras deste Fórum.

    Um grande abraço, WSenna
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7996
    Registrado : 15/03/2013

    [Resolvido]Função para criar tabela no backend. Empty Re: [Resolvido]Função para criar tabela no backend.

    Mensagem  Alvaro Teixeira 18/1/2017, 16:12

    Olá Amigo Wsenna, fico feliz por ter ajudado.

    Quanto à minha última mensagem, foi pela lógica, pois o filtro estava sobre a data do do sistema "date()"
    Repare o que faz a função com a data de hoje:
    [Resolvido]Função para criar tabela no backend. A1cty

    Talvez seja um problema de formatação de data ou tipo de campo.

    Se poder baixar o exemplo da mensagem 24 e atualizar com o último código, como tem a funcionar com alguns dados de exemplo e postar, poderei ver como se aplica a sugestão.

    Amigo, já sabe, com o MaximoAccess é sempre aprender. Wink
    Abraço
    wsenna
    wsenna
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 491
    Registrado : 22/12/2009

    [Resolvido]Função para criar tabela no backend. Empty Re: [Resolvido]Função para criar tabela no backend.

    Mensagem  wsenna 18/1/2017, 22:51

    Ok Mestre.


    Segue o exemplo zipado com as tabelas atualizadas.


    Abraços, WSenna
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7996
    Registrado : 15/03/2013

    [Resolvido]Função para criar tabela no backend. Empty Re: [Resolvido]Função para criar tabela no backend.

    Mensagem  Alvaro Teixeira 22/1/2017, 14:53

    Olá WSenna,
    Estive a tentar mas a consulta com as datas não é fácil.
    Pois está a agrupar a DataEvento por mes/ano
    O que significa que os registos são englobados na consulta e se calhar é mesmo isso que pretende.
    No entanto esta é a minha compreensão da sua consulta.
    Fiz um teste com o ficheiro que postou, veja se ajuda em alguma coisa.
    Abraço e bom Domingo
    Anexos
    [Resolvido]Função para criar tabela no backend. AttachmentBD_FrontEnd_rev1.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (197 Kb) Baixado 43 vez(es)
    wsenna
    wsenna
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 491
    Registrado : 22/12/2009

    [Resolvido]Função para criar tabela no backend. Empty Re: [Resolvido]Função para criar tabela no backend.

    Mensagem  wsenna 23/1/2017, 14:06

    Olá Grande Teixeira, bom dia.

    Amigão, uma solução muito prática, parabéns como sempre.

    Grande abraço mais uma vêz.
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7996
    Registrado : 15/03/2013

    [Resolvido]Função para criar tabela no backend. Empty Re: [Resolvido]Função para criar tabela no backend.

    Mensagem  Alvaro Teixeira 24/1/2017, 08:24

    Olá WSenna, obrigado pelo retorno.
    Abraço Amigo Wink

    Conteúdo patrocinado


    [Resolvido]Função para criar tabela no backend. Empty Re: [Resolvido]Função para criar tabela no backend.

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 21/11/2024, 16:44