Ir para conteúdo
Carlos Primo

Consulta Banco de Dados usando select com variável não funciona

Recommended Posts

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]  Invalid column name 'Y18HW'.

erro.JPG.c8952d0e18999ccea4b4b91abaac0dcf.JPG

 

Segue o código:

 

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 Tabela.Prefixo = " & Prefix & " " & _
                " 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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por Loconarrativo
      Bom, no meu form, eu peço para o cliente digitar um valor (esse valor em reais), mas para continuar eu preciso me certificar que a variável que contem o valor, tenha 16 dígitos ao total, então se a pessoa digita uma 1000.00, eu preciso completar com 9 zeros a esquerda (fica assim 0000000001000.00), para eu saber quantos dígitos tem na variável, eu faço
      $i = strlen( $_POST['valor']);   ai eu faço
      $u = 8 - $i ; eu tenho o numero de zeros que preciso colocar a esquerda, mas como eu transformo isso em vários zeros? 
    • Por Kelven
      Bom dia galera tudo bem?
      Eu to com um problema, vejam o código 
      if($vencimento_carne != "") { for($i=1; $i<=$parcela; $i++){ $data_vencida = date('Y-m-d', strtotime("+1 month", strtotime($vencimento_carne))); echo $data_vencida; $sql_carne = "INSERT INTO carnes(valor, data_vencimento, valor_juros, status) VALUES ('$valor_carne', '$data_vencida', 'testet', 'Pendente')"; $query_carne = mysql_query($sql_carne); } } Minha intenção é q o mês dessa variável data vencida seja + 1 para cada linha que inserir do BD, porém desse jeito que acima eles estão ficando todos iguais com a mesma data, alguém pode me ajudar a resolver isso??
    • Por mr22robot
      Estou com uma dúvida. É possível determinar um select a partir de uma escolha?
      Ex. 
      SELECT CASE WHEN a < b THEN select * from tabela1 WHEN d < e THEN select * form tabela2 END FROM tabela; Algo parecido. Se uma condição for atendida select1 , se outra condição for atendida: select2.
      O que acontece: estou com um relatorio que preciso criar no winthor e não consigo melhorar isso. Tenho de fazer três relatorios como solução. Se eu consigo implantar isso, eu faria somente um relatorio. 
      Tipo se marcar um campo, sai um relatorio. Se marcar outro, saí outro relatorio.
    • Por scapedzn
      Olá pessoas! Estou com a seguinte dúvida. Estou fazendo um sistema que é um site onde será possível o cadastro de cursos online. O meu problema é o seguinte. O meu usuário logado salva junto com o nome do curso que ele enviou para o banco dados sua id única de cadastro. Portanto sempre quando ele adicionar qualquer curso, exemplo: aula 1 , junto com isso salva a mesma id de quando ele criou a conta dele, exemplo: 33. Sempre quando ele adicionar novo curso essa id é salva junto para eu saber qual usuário adicionou o novo curso. Porém eu gostaria de listar todos os cursos que o usuário cadastrou para ele mesmo ver. Ou seja, tenho de usar essa ID única dele para pegar todos os nomes de curso que ele adicionou. Não posso dar Select em toda a tabela pois se não ele irá trazer informações que outros usuários adicionaram. Gostaria de listar apenas as informações relacionadas diretamente com o id dele. Não sei se ficou Claro. Mas me ajudem por favor
    • Por Ruben Santos
      Boa tarde,
      Sou novo no fórum e tambem em programação SQL, no entanto não desisto de procurar soluções e tentar aprender cada vez mais e melhor.
      Venho aqui pedir ajuda sobre o seguinte assunto:

       

      Estou trabalhando com Access e a tabela em questão apresenta as operações realizadas (tempo de trabalho) no caso de ter interrupção, a interrupção tem a durabilidade desde o fim da operação até ao inicio da proxima operação
      Então sobre esta tabela, faço a seguinte pesquisa para saber, quantas interrupções tenho e a que horas interromperam:
      Dei o nome de "Inicio_interrupcoes"
       
      SELECT dbo_opr.cod_gpt, dbo_opr.cod_pt, dbo_opr.un_pt, dbo_opr.data_ini, dbo_opr.data_fim, dbo_opr.cod_interrup, * FROM dbo_opr WHERE (((dbo_opr.cod_interrup) Is Not Null));  
      Este comando, executa corretamente, retornando todos os registos em que cod.interrup seja não nulo.
      Seguindo agora o código onde preciso milagrosamente de ajuda:
       
      SELECT inicio_interrupcoes.cod_gpt, inicio_interrupcoes.cod_pt, inicio_interrupcoes.un_pt, inicio_interrupcoes.data_fim, inicio_interrupcoes.cod_interrup FROM dbo_opr INNER JOIN inicio_interrupcoes ON (dbo_opr.cod_gpt = inicio_interrupcoes.cod_gpt) AND (dbo_opr.cod_pt = inicio_interrupcoes.cod_pt) GROUP BY inicio_interrupcoes.cod_gpt, inicio_interrupcoes.cod_pt, inicio_interrupcoes.un_pt, inicio_interrupcoes.data_fim, inicio_interrupcoes.cod_interrup, dbo_opr.data_ini HAVING (((dbo_opr.data_ini)>[inicio_interrupcoes].[data_fim]));
      Passando agora a explicar o que preciso:
      Na primeira consulta "Inicio_Interrupcoes" pesquiso todas os registos que contenham o campo "cod_interrup" preenchido.
      Na segunda consulta respeitando os campos "cod_gpt" e "cod_pt", pretendo obter a data de inicio da proxima operação que nesta consulta representa o fim da interrupção.
      Segue exemplo básico:
      considerem linha 2 e linha 3 da imagem:
      Linha 2 representa produção -> Inicio = 10/01/2019 08:21:13
                                     Fim = 10/01/2019 12:54:30
      Como o registo tem "Cod_interrup" considero que "10/01/2019 12:54:30" representa o inicio da interrupcão e o proximo inicio neste caso "10/01/2019 14:04:53" será o fim da interrupção e inicio da Produção.

      Alguem me pode dar uma força neste assunto?
      Obrigado, ficarei muito grato.

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.