none
Dúvida sobre passagem de dados de VBA excel para banco de dados ACCESS (SELECT) RRS feed

  • Pergunta

  • Gente é o seguinte eu tenho um banco de dados e dentro dele eu tenho 2 tabelas Data_Producao (onde são armazenados todos os dados referentes ao dia de produção (horas, turno e afins), tenho a producao (onde eu insiro os dados de producao) e eu estou tentando fazer a seguinte inserção

    sCommand = "INSERT INTO [Producao] (Att, Producao, Acumulada, Nome_Do_Produto, Data_Producao ) VALUES (""" & ATT & """,""" & Producao & """,""" & Acumulada & """,""" & NomeProd & """, '(SELECT RegistraDia FROM Data_Producao WHERE  Data = """ & Data & """ AND Intervalo_De_Tempo = """ & Intervalo & """)"")"

    a ideia é inserir os dados na tabela producao normalmente e na hora de inserir a chave estrangeira que referencia Data_Producao (RegistraDia) eu faço um select comparando dois dados  (a data e o intervalo de tempo) ambos vem nas seguintes formatações Data: dd/mm/aaaa    e Intervalo hh:mm - hh:mm e venho recebendo o seguinte erro:  erro de sintaxe na sequencia de caracteres na expressao de consulta '(SELECT RegistraDia FROM Data_Producao WHERE  Data = "22/07/2015" AND Intervalo_De_Tempo = "14:00 - 15:00")")'

    ja tentei tambem fazer sem parenteses e fazer usando '" ao inves de """ mas nada adiantou

    quarta-feira, 22 de julho de 2015 17:56

Respostas

  • strsql = ("SELECT RegistraDia FROM [TB_Data_Producao] " & _
    "WHERE [Intervalo_De_Tempo] = """ & intervalo & """ AND [Linha de Prod] = """ & Linha & """  AND   [Data] = #" & Data & "# ")

    scommand2 = strsql
    dbCommand.CommandText = scommand2
    dbCommand.Execute
    strsql = dbCommand.Execute.GetString

    scommand = "INSERT INTO [Producao] (Att, Producao, OE , Nome_Do_Produto,[Data_Producao] ) VALUES (""" & ATT & """,""" & Producao & """,""" & OE & """,""" & NomeProd & """, """ & strsql & """ )"
    dbCommand.CommandText = scommand
    dbCommand.Execute

    eu resolvi dividindo em duas consultas diferentes, faço a primeira consulta, depois pego a string que ela gera e jgoo na segunda consulta que pede essa chave estrangeira, mesmo assim agradeço pela ajuda

    • Marcado como Resposta Oliveira Bruno sexta-feira, 24 de julho de 2015 17:34
    sexta-feira, 24 de julho de 2015 17:33

Todas as Respostas

  • A data deve estar entre '#" e não entre aspas..

    exemplo: "...DT = #" & data & "#"

    quinta-feira, 23 de julho de 2015 18:21
  • eu tentei essa configuração hoje tambem só que #" & data "# sem as ultimas aspas, o erro persistiu, tentarei amanhã com essas ultimas aspas, mas ainda sim quando eu retirei o campo de data da consulta o erro persistiu, o campo de intervalo deve seguir esta mesma configuração?
    quinta-feira, 23 de julho de 2015 23:13
  • Qual o tipo de dados do campo intervalo na tabela do access ?

    Se for data/hora, sempre use #.

    Se for texto, ai use aspas simples.

    sexta-feira, 24 de julho de 2015 10:51
  • o intervalo é uma string no banco e uma string no codigo

    scommand2 = "INSERT INTO [Producao] (Att, Producao, Acumulada, Nome_Do_Produto,[Data_Producao] ) VALUES (""" & ATT & """,""" & Producao & """,""" & Acumulada & """,""" & NomeProd & """,  SELECT RegistraDia FROM [TB_Data_Producao]  WHERE [Data] = #" & Data & "#" ')" eu mudei para esta configuação e esta dando erro de sintaxe na expressao de consulta

    sexta-feira, 24 de julho de 2015 11:42
  • Uma dica seria fazer o seguinte:

    Construa essa consulta no modo Design do Access, depois selecione o modo SQL

    Ele constrói a cláusula para você e teria que ser feitas apenas algumas alterações.

    Experimente fazer isto e postar a cláusula aqui para que possamos avaliar com mais facilidade.

    sexta-feira, 24 de julho de 2015 17:05
  • strsql = ("SELECT RegistraDia FROM [TB_Data_Producao] " & _
    "WHERE [Intervalo_De_Tempo] = """ & intervalo & """ AND [Linha de Prod] = """ & Linha & """  AND   [Data] = #" & Data & "# ")

    scommand2 = strsql
    dbCommand.CommandText = scommand2
    dbCommand.Execute
    strsql = dbCommand.Execute.GetString

    scommand = "INSERT INTO [Producao] (Att, Producao, OE , Nome_Do_Produto,[Data_Producao] ) VALUES (""" & ATT & """,""" & Producao & """,""" & OE & """,""" & NomeProd & """, """ & strsql & """ )"
    dbCommand.CommandText = scommand
    dbCommand.Execute

    eu resolvi dividindo em duas consultas diferentes, faço a primeira consulta, depois pego a string que ela gera e jgoo na segunda consulta que pede essa chave estrangeira, mesmo assim agradeço pela ajuda

    • Marcado como Resposta Oliveira Bruno sexta-feira, 24 de julho de 2015 17:34
    sexta-feira, 24 de julho de 2015 17:33
  • Que bom que deu certo, qualquer dúvida é só postar !
    sexta-feira, 24 de julho de 2015 17:48