none
Select com variável não funciona RRS feed

  • Pergunta

  • Olá, fiz um código VBA Sql para consultar dados de uma tabela e atribuí os valores dos dados em 3 variveis, porem uma das váriaveis não funciona corretamente.

    Os dados desta variavel que não funciona possui letras e números, pois os dados da tabela referente a esta variavel possui letras e números.

    Quando coloco o valor direto dentro do select o código funciona, mas com variável não da certo.

    Também funciona quando retiro esta variável.

    No código o nome da variável é PREFIX

    O erro que aparece é esse:

    Run-time error '-2147217900 (80040e14)':

    [Microsoft][ODBC SQL Server Driver][SQL Server] Invalid column name 'Y18HW'.


    segue o código completo:

    Sub sb_RetornaConsulta()
    
    Application.ScreenUpdating = False
    
        Dim obj_Connection As New ADODB.Connection
        Dim obj_RecordSet As New ADODB.Recordset
        Dim str_SQL As String
        Dim str_PlanilhaDestino As String
        Dim str_ConnString As String
        Dim str_LinhaInicial As String
        Dim nr_coluna As Integer
        Dim Prefix As Variant
        Dim S_Inicia As Variant
        Dim S_Fina As Variant
        
         Prefix = frm_Serie.Pref.Value        'Valor do prefixo digitado no textbox da userform = Y18HW 
         S_Inicia = frm_Serie.S_Inicial.Value 'Valor do Inicial digitado no textbox da userform = 177781 
         S_Fina = frm_Serie.S_Final.Value     'Valor do Final digitado no textbox da userform = 179780
              
        str_PlanilhaDestino = "Resultado"
        str_ConnString = "Driver={SQL Server};server=NOME DO SERVER; Database=NOME DA BASE; UID=USUÁRIO;PWD=SENHA"
        str_LinhaInicial = 3
        
        
        
        str_SQL = "SELECT TABELA.NRSerie AS Serie, TABELA.BancadaID AS Bancada, " & _
                    " TABELA.ResQn AS Qn, TABELA.ResQt AS Qt, " & _
                    " TABELA.ResQm AS Qm, TABELA.Data AS [Data Produção] " & _
                    " FROM TABELA " & _
                    " WHERE TABELA.Serie >= " & S_Inicia & " " & _
                    " AND TABELA.Serie <= " & S_Fina & " "
                    " AND INFOHIDRO.dbo.afericoes.Prefixo = " & S_Inicia & " " & _
                    " ORDER BY TABELA.NRSerie DESC "
    
            
        ' Limpa dados
        Sheets(str_PlanilhaDestino).Select
        Cells.Select
        Selection.ClearContents
        Range("A1").Select
     
        ' Executa query no SQL
        obj_Connection.Open str_ConnString
        obj_RecordSet.Source = obj_Connection
        obj_RecordSet.Open str_SQL, obj_Connection
            
        ' Inclui cabeçalhos da query:
        For nr_coluna = 0 To obj_RecordSet.Fields.Count - 1
            Worksheets(str_PlanilhaDestino).Cells(str_LinhaInicial, nr_coluna + 1).Value = obj_RecordSet.Fields(nr_coluna).Name
        Next
         
        ' Salva dados no Excel
        Sheets(str_PlanilhaDestino).Cells(CInt(str_LinhaInicial + 1), 1).CopyFromRecordset obj_RecordSet
     
        ' Finaliza conexão e objetos
        obj_RecordSet.Close
        obj_Connection.Close
        Set obj_RecordSet = Nothing
        Set obj_Connection = Nothing
         
         
         Application.ScreenUpdating = True
         
         frm_Serie.Hide
         
    End Sub

    sábado, 13 de outubro de 2018 04:37

Respostas

Todas as Respostas

  • Deleted
    sábado, 13 de outubro de 2018 11:49
  • José, obrigado pela respota.

    Na verdade digitei errado o código nas linhas 6 e 7, o código correto é:

    ...
     1   str_SQL = "SELECT TABELA.NRSerie AS Serie, TABELA.BancadaID AS Bancada, " & _
     2               " TABELA.ResQn AS Qn, TABELA.ResQt AS Qt, " & _
     3               " TABELA.ResQm AS Qm, TABELA.Data AS [Data Produção] " & _
     4               " FROM TABELA " & _
     5               " WHERE TABELA.Serie >= " & S_Inicia & " " & _
     6               " AND TABELA.Serie <= " & S_Fina & " " & _
     7               " AND TABELA.Prefixo = " & Prefix & " " & _
     8               " ORDER BY TABELA.NRSerie DESC "
    ...

    Na TABELA que faz a consulta existem as seguintes colunas:

    NRSerie, Serie, Prefixo, BancadaID, Fucnionário, ResQn, ResQt, ResQm, Data,

    No entanto, preciso das colunas:

    NRSerie, BancadaID, ResQn, ResQt, ResQm, Data,

    A coluna NRSerie é a junção da coluna Prefixo + Coluna Serie.

    Quando faço a consulta, tenho as informações de Prefixo e Serie, porém existe uma sequencia numérica da Serie, onde tenho a Serie inicial e final.


    segunda-feira, 15 de outubro de 2018 20:40
  • Deleted
    • Sugerido como Resposta Mariana Del Nero terça-feira, 16 de outubro de 2018 16:12
    • Marcado como Resposta Carlos Primo terça-feira, 16 de outubro de 2018 16:40
    segunda-feira, 15 de outubro de 2018 21:32
  • José, consegui com sua sugestão na linha 7   --> '" & Prefix & "' " & _  e variavel declarada como string.

    Deu certo. 

    Obrigado pela ajuda meu amigo.

    terça-feira, 16 de outubro de 2018 16:05