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

    Compartilhe

    wsenna
    Developer
    Developer

    Respeito às Regras 100%

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

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

    Mensagem  wsenna em Ter 04 Out 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.



    [img][Você precisa estar registrado e conectado para ver esta imagem.][/img]


    WSenna


    Última edição por wsenna em Sab 08 Out 2016, 02:39, editado 2 vez(es)

    ahteixeira
    Moderador
    Moderador

    Respeito às Regras 100%

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

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

    Mensagem  ahteixeira em Ter 04 Out 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:
    [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver este link.]
    Abraço

    wsenna
    Developer
    Developer

    Respeito às Regras 100%

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

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

    Mensagem  wsenna em Ter 04 Out 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

    ahteixeira
    Moderador
    Moderador

    Respeito às Regras 100%

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

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

    Mensagem  ahteixeira em Ter 04 Out 2016, 16:09

    Olá, veja exemplo que criei:
    [Você precisa estar registrado e conectado para ver esta imagem.]

    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
    Developer
    Developer

    Respeito às Regras 100%

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

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

    Mensagem  wsenna em Ter 04 Out 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

    ahteixeira
    Moderador
    Moderador

    Respeito às Regras 100%

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

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

    Mensagem  ahteixeira em Ter 04 Out 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
    Developer
    Developer

    Respeito às Regras 100%

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

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

    Mensagem  wsenna em Ter 04 Out 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

    ahteixeira
    Moderador
    Moderador

    Respeito às Regras 100%

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

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

    Mensagem  ahteixeira em Ter 04 Out 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
    Developer
    Developer

    Respeito às Regras 100%

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

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

    Mensagem  wsenna em Ter 04 Out 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][Você precisa estar registrado e conectado para ver esta imagem.][/img]


    Abraços, WSenna



    wsenna
    Developer
    Developer

    Respeito às Regras 100%

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

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

    Mensagem  wsenna em Ter 04 Out 2016, 18:18

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


    [img][Você precisa estar registrado e conectado para ver esta imagem.][/img]



    Abraços, WSenna

    ahteixeira
    Moderador
    Moderador

    Respeito às Regras 100%

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

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

    Mensagem  ahteixeira em Ter 04 Out 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
    Developer
    Developer

    Respeito às Regras 100%

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

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

    Mensagem  wsenna em Qua 05 Out 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

    ahteixeira
    Moderador
    Moderador

    Respeito às Regras 100%

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

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

    Mensagem  ahteixeira em Qua 05 Out 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
    Developer
    Developer

    Respeito às Regras 100%

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

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

    Mensagem  wsenna em Qui 06 Out 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

    ahteixeira
    Moderador
    Moderador

    Respeito às Regras 100%

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

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

    Mensagem  ahteixeira em Qui 06 Out 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
    Developer
    Developer

    Respeito às Regras 100%

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

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

    Mensagem  wsenna em Qui 06 Out 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

    ahteixeira
    Moderador
    Moderador

    Respeito às Regras 100%

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

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

    Mensagem  ahteixeira em Qui 06 Out 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
    Developer
    Developer

    Respeito às Regras 100%

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

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

    Mensagem  wsenna em Sex 07 Out 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

    ahteixeira
    Moderador
    Moderador

    Respeito às Regras 100%

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

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

    Mensagem  ahteixeira em Sex 07 Out 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
    Developer
    Developer

    Respeito às Regras 100%

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

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

    Mensagem  wsenna em Sex 07 Out 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;

    ahteixeira
    Moderador
    Moderador

    Respeito às Regras 100%

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

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

    Mensagem  ahteixeira em Sex 07 Out 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

    ahteixeira
    Moderador
    Moderador

    Respeito às Regras 100%

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

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

    Mensagem  ahteixeira em Sex 07 Out 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
    Developer
    Developer

    Respeito às Regras 100%

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

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

    Mensagem  wsenna em Sex 07 Out 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.
    Anexos
    ExemploTeixeira.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (85 Kb) Baixado 4 vez(es)

    ahteixeira
    Moderador
    Moderador

    Respeito às Regras 100%

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

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

    Mensagem  ahteixeira em Sab 08 Out 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
    TempWsenna.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (99 Kb) Baixado 2 vez(es)

    ahteixeira
    Moderador
    Moderador

    Respeito às Regras 100%

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

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

    Mensagem  ahteixeira em Sab 08 Out 2016, 01:06

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

    wsenna
    Developer
    Developer

    Respeito às Regras 100%

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

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

    Mensagem  wsenna em Sab 08 Out 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

    ahteixeira
    Moderador
    Moderador

    Respeito às Regras 100%

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

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

    Mensagem  ahteixeira em Sab 08 Out 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
    Developer
    Developer

    Respeito às Regras 100%

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

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

    Mensagem  wsenna em Sab 08 Out 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

    ahteixeira
    Moderador
    Moderador

    Respeito às Regras 100%

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

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

    Mensagem  ahteixeira em Sab 08 Out 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
    Developer
    Developer

    Respeito às Regras 100%

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

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

    Mensagem  wsenna em Sab 08 Out 2016, 15:35

    Fiz isso Amigão, ficou perfeito.

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

    WSenna

    ahteixeira
    Moderador
    Moderador

    Respeito às Regras 100%

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

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

    Mensagem  ahteixeira em Seg 10 Out 2016, 14:04

    cheers

      Data/hora atual: Sex 09 Dez 2016, 13:26