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


3 participantes

    [Resolvido]Criar tabela temp local com base em consulta em banco MySQL

    Eloirp
    Eloirp
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 222
    Registrado : 15/06/2013

    [Resolvido]Criar tabela temp local com base em consulta em banco MySQL Empty [Resolvido]Criar tabela temp local com base em consulta em banco MySQL

    Mensagem  Eloirp 22/7/2014, 13:09

    Estou trabalhando com banco on-line em base MySQL e pelo que pesquisei para gerar relatórios vou ter que criar tbls temporárias na base local com base na consulta SQL feita no MySQL, então gostaria de uma ajuda para criar a tbl temp, se possível, com os mesmos nomes de colunas existentes na tabela original, pois acho que isso facilitaria muito! Pesquisei no fórum e não consegui encontrar nada que me indicasse como fazer...

    Por exemplo, para a consulta abaixo, criar uma tbl temp:


       strRS = "SELECT tbl_Produto.Produto, tbl_ProdutoTipo.Tipo, tbl_Produto.Comercial2 " & _
                   "FROM tbl_ProdutoTipo INNER JOIN (tbl_Produto INNER JOIN tbl_ProdutoKit ON tbl_Produto.Codigo = tbl_ProdutoKit.ProdutoKit) ON tbl_ProdutoTipo.Codigo = tbl_Produto.TipoProduto " & _
                   "WHERE (((tbl_Produto.Status)='ATIVO') AND ((tbl_ProdutoKit.status)='ATIVO') AND ((tbl_ProdutoKit.Produto)='" & Me.Codigo & "')) " & _
                   "GROUP BY tbl_Produto.Produto, tbl_ProdutoTipo.Tipo " & _
                   "ORDER BY tbl_Produto.Produto"
       End If
               
       Call Cnn_Open
       Set rs = New ADODB.Recordset
       With rs
           Set .ActiveConnection = Cnn
           .Source = strRS
           .LockType = adLockOptimistic
           .CursorType = adOpenKeyset
           .Open
       End With
    Avelino Sampaio
    Avelino Sampaio
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Criar tabela temp local com base em consulta em banco MySQL Empty Re: [Resolvido]Criar tabela temp local com base em consulta em banco MySQL

    Mensagem  Avelino Sampaio 22/7/2014, 14:17

    Olá!

    Vc chegou a pesquisar no Maestro como havia sugerido ? Veja este outro exemplo que utiliza a construção de tabela temporária em tempo de execução.

    http://www.usandoaccess.com.br/tutoriais/tuto54.asp?id=1#inicio

    Basta introduzir a cláusula INTO e o nome da tabela temporária na sua consulta e depois usar o Execute, já que a consulta seleção foi transformada em uma consulta de AÇÃO.

    Bom estudo!


    .................................................................................
    Vídeos, livros, kit MontaRibbons e acesso vitalício ao site UsandoAcces  
    Clique AQUI e analise o custo beneficio do material oferecido.
    Eloirp
    Eloirp
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 222
    Registrado : 15/06/2013

    [Resolvido]Criar tabela temp local com base em consulta em banco MySQL Empty Re: [Resolvido]Criar tabela temp local com base em consulta em banco MySQL

    Mensagem  Eloirp 22/7/2014, 15:27

    Olá Avelino,
    Dei uma olhada sim, mas dentro do meu limite que conhecimento não consegui resolver, pois eu tenho uma tbl origem numa conexão MySQL e tenho que salvar na base local e neste exemplo trabalha tudo local...tentei seguir o modelo fazendo uma adaptação bem básica para tentar rodar mas não roda...

    Fiz assim:
    Private Sub Comando0_Click()
       Dim strsql As String
       
       tblTemp = "tmp_Teste"
       
       strsql = "SELECT tbl_Porto.* INTO " & tblTemp & " FROM tbl_Porto ;"

       Call Cnn_Open
       Set rs = New ADODB.Recordset
       With rs
       Set .ActiveConnection = Cnn
           .Source = strsql
           .LockType = adLockOptimistic
           .CursorType = adOpenKeyset
           .Open
       End With
       
    Call fncCriarTabela(strsql, tblTemp, 102030)


    End Sub
    Avelino Sampaio
    Avelino Sampaio
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Criar tabela temp local com base em consulta em banco MySQL Empty Re: [Resolvido]Criar tabela temp local com base em consulta em banco MySQL

    Mensagem  Avelino Sampaio 22/7/2014, 16:00

    Creio que vc deva utilizar o método EXECUTE do ADO e não o método OPEN, já que se trata de uma consulta AÇÃO.

    Aguardamos


    .................................................................................
    Vídeos, livros, kit MontaRibbons e acesso vitalício ao site UsandoAcces  
    Clique AQUI e analise o custo beneficio do material oferecido.
    Eloirp
    Eloirp
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 222
    Registrado : 15/06/2013

    [Resolvido]Criar tabela temp local com base em consulta em banco MySQL Empty Re: [Resolvido]Criar tabela temp local com base em consulta em banco MySQL

    Mensagem  Eloirp 22/7/2014, 18:20

    Não sei se seria exatamente isso, mas agora dá um erro de variável não declarada: tmp_tblTeste

    Option Compare Database
    Option Explicit
    Dim tblTemp As String
    Dim strSQL As String

    Private Sub Comando0_Click()
     
       tblTemp = "tmp_tblTeste"
       
       strSQL = "SELECT tbl_Porto.* INTO " & tblTemp & " FROM tbl_Porto ;"
       Call Cnn_Open
       Cnn.Execute strSQL
       
       Call fncCriarTabela(strSQL, tblTemp, 102030)
       
       Set Cnn = Nothing: Close

    End Sub
    Eloirp
    Eloirp
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 222
    Registrado : 15/06/2013

    [Resolvido]Criar tabela temp local com base em consulta em banco MySQL Empty Re: [Resolvido]Criar tabela temp local com base em consulta em banco MySQL

    Mensagem  Eloirp 23/7/2014, 14:20

    Consegui fazer rodar da forma abaixo, porém ainda falta evitar ter que criar a tbl e a instrução INSERT INTO tudo na mão, preciso ajuda para automatizar...

    Private Sub Comando0_Click()
     
      ' crio a tbl na base local
       Dim strTbl As String
       strTbl = "tmp_tblPorto"
       CurrentDb.Execute "CREATE TABLE " & strTbl & "  " & _
                           "(                          " & _
                           "codigo int,                " & _
                           "porto varchar(255),        " & _
                           "user varchar(255),         " & _
                           "data varchar(255),         " & _
                           "status varchar(255)        " & _
                           ");                         "
       
      ' busco os dados da tbl_Porto no MySQL
       strRS = "SELECT * FROM tbl_Porto Where Status='Ativo'"
       Call Cnn_Open
       Set rs = New ADODB.Recordset
       With rs
           Set .ActiveConnection = Cnn
           .Source = strRS
           .LockType = adLockOptimistic
           .CursorType = adOpenKeyset
           .Open
       End With
       
       ' carrego os dados da tbl_Porto do MySQL para a tabela Local tmp_tblPorto
       Do While Not rs.EOF
           CurrentDb.Execute ("INSERT INTO " & strTbl & " (Codigo,Porto,User,Data,Status) VALUES (" & rs!Codigo & ",'" & rs!Porto & "','" & rs!User & "','" & rs!Data & "','" & rs!Status & "')")
           rs.MoveNext
       Loop
       Set rs = Nothing: Close
       Set Cnn = Nothing: Close
       
    End Sub
    Eloirp
    Eloirp
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 222
    Registrado : 15/06/2013

    [Resolvido]Criar tabela temp local com base em consulta em banco MySQL Empty Re: [Resolvido]Criar tabela temp local com base em consulta em banco MySQL

    Mensagem  Eloirp 30/7/2014, 13:00

    Como não consegui ajuda, por hora resolvido....
    Avelino João
    Avelino João
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Angola
    Mensagens : 316
    Registrado : 10/03/2012

    [Resolvido]Criar tabela temp local com base em consulta em banco MySQL Empty Re: [Resolvido]Criar tabela temp local com base em consulta em banco MySQL

    Mensagem  Avelino João 30/7/2014, 14:50

    Eloirp Boa Tarde gostaria saber onde voce quer criar a tabela temporaria no Access ou Mysql?


    .................................................................................
    Proaccess - Angola
    Eloirp
    Eloirp
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 222
    Registrado : 15/06/2013

    [Resolvido]Criar tabela temp local com base em consulta em banco MySQL Empty Re: [Resolvido]Criar tabela temp local com base em consulta em banco MySQL

    Mensagem  Eloirp 30/7/2014, 15:22

    Olá Avelino,

    Busco os dados no MySQL e crio uma tmp_TBL no Access para poder gerar relatório....
    Com o código acima eu consegui fazer isso, porém tenho que criar tudo na mão e isso dá muito trabalho, então pensei se não tem como criar a tmp_TBL com os nomes das colunas que vem da consulta feita no MySQL, sem precisar digitar! No exemplo acima os dados são apenas de uma tbl, mas na maioria dos casos são consultas maiores tipo:

       strRS = "SELECT tbl_Produto.Codigo, tbl_ProdutoTipo.Tipo, tbl_Aplicacao.AplApl, tbl_Produto.Obs, tbl_Montadora.Montadora, tbl_ModeloRed.ModeloReduz, tbl_Modelo.Modelo, tbl_Aplicacao.AplDetalhe, tbl_Aplicacao.AplAnoIni, tbl_Aplicacao.AplAnoFim, tbl_Produto.Comercial2, tbl_Produto.EmbEstrias, tbl_Produto_Preco.Preco, tbl_Produto.EmbDiam " & _
               "FROM (tbl_ModeloRed INNER JOIN (tbl_ProdutoTipo INNER JOIN (tbl_Produto INNER JOIN (tbl_Montadora INNER JOIN (tbl_Modelo INNER JOIN tbl_Aplicacao ON tbl_Modelo.Codigo = tbl_Aplicacao.AplMod) ON tbl_Montadora.Codigo = tbl_Aplicacao.AplMont) ON tbl_Produto.Produto = tbl_Aplicacao.AplApl) ON tbl_ProdutoTipo.Codigo = tbl_Produto.TipoProduto) ON tbl_ModeloRed.Codigo = tbl_Aplicacao.ModeloReduz) INNER JOIN tbl_Produto_Preco ON tbl_Produto.Codigo = tbl_Produto_Preco.Produto " & _
               "WHERE (((tbl_Produto_Preco.Status)='ATIVO') AND ((tbl_Aplicacao.Status)='ATIVO') AND ((tbl_Produto.Status)='ATIVO') AND ((tbl_Produto.Comercial2)='SIM')) " & _
               "GROUP BY tbl_Produto.Codigo, tbl_ProdutoTipo.Tipo, tbl_Aplicacao.AplApl, tbl_Produto.Obs, tbl_Montadora.Montadora, tbl_ModeloRed.ModeloReduz, tbl_Modelo.Modelo, tbl_Aplicacao.AplDetalhe, tbl_Aplicacao.AplAnoIni, tbl_Aplicacao.AplAnoFim, tbl_Produto.Comercial2, tbl_Produto.EmbEstrias, tbl_Produto_Preco.Preco, tbl_Produto.EmbDiam " & _
               "ORDER BY tbl_Aplicacao.AplApl, tbl_Montadora.Montadora, tbl_ModeloRed.ModeloReduz, tbl_Modelo.Modelo, tbl_Aplicacao.AplDetalhe, tbl_Aplicacao.AplAnoIni, tbl_Aplicacao.AplAnoFim "
    Avelino João
    Avelino João
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Angola
    Mensagens : 316
    Registrado : 10/03/2012

    [Resolvido]Criar tabela temp local com base em consulta em banco MySQL Empty Re: [Resolvido]Criar tabela temp local com base em consulta em banco MySQL

    Mensagem  Avelino João 30/7/2014, 16:58

    Testa esse código

    Código:
    Criar uma função que copia-se uma tabela sem os seus registros.

    Public Sub subCreateTableCopy(strTableName As String)
    ' Cria a cópia temporária de uma tabela com o prefixo 'temp'
    Dim dbs As Database
    Dim tdf As TableDef
    Dim strTempTable As String

    On Error GoTo Error_subCreateTableCopy

    Set dbs = CurrentDb

    Let strTempTable = "temp" & strTableName

    ' Checa se a tabela existe e deleta-a
    For Each tdf In dbs.TableDefs
        If tdf.Name = strTempTable Then
            DoCmd.DeleteObject acTable, strTempTable
            GoTo DeletedTable
        End If
    Next

    ' Cria a cópia da tabela antes de atualizá-la.
    DeletedTable:
    DoCmd.CopyObject , strTempTable, acTable, strTableName ' cria a copia

    Exit_subCreateTableCopy:
    Exit Sub

    Error_subCreateTableCopy:
    MsgBox "Erro " & Err.Number & " - " & Err.Description
    Resume Exit_subCreateTableCopy
    End Sub



    .................................................................................
    Proaccess - Angola

    Conteúdo patrocinado


    [Resolvido]Criar tabela temp local com base em consulta em banco MySQL Empty Re: [Resolvido]Criar tabela temp local com base em consulta em banco MySQL

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 28/4/2024, 14:20