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]Código com erro de syntax (missing operator)

    Compartilhe

    drib
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Feminino
    Localização : Brasil
    Mensagens : 14
    Registrado : 23/04/2014

    [Resolvido]Código com erro de syntax (missing operator)

    Mensagem  drib em Qua 12 Ago 2015, 21:08

    Boa tarde mestres!

    Preciso da ajuda de vocês mais uma vez.
    Tenho um banco de dados que importa arquivos para consultas posteriores.
    São duas tabelas: BaseTaxa e BaseAmostra, com relacionamento 1 para muitos (1 taxa e muitas amostras).
    Ao importar o arquivo através do MenuImportar, o usuário insere os dados da taxa e depois clica em um botão para importar o arquivo com as amostras, primeiro para uma tabela provisoria, chamada ImportarBase, e depois passa para a tabela BaseAmostra.
    Ao testar a importação eu verifiquei que importando o arquivo ou não, o código dava a mensagem de que foi importado com sucesso.
    Aí resolvi alterar o meu código anterior para que o access verificasse em passos se havia sido importado o arquivo realmente ou não e começou o meu problema, meu código não funciona mais direito.
    Atualmente aparece o erro missing operator e ele não adiciona o caminho no campo Link da BaseTaxa pelo código.
    A BaseTaxa é alimentada pelo formulário e o único campo que é alimentado pelo código é o Link (caminho do endereço na rede que o usuário selecionou)

    O código deveria executar corretamente os seguintes passos:
    1. Abre a janela do office para selecionar o arquivo;
    2. Insere o caminho do arquivo na variável Caminho;
    3. Importa os dados do arquivo para a tabela ImportarBase;
    4. Atualiza o IDTaxa na tabela ImportarBase (chave primária da BaseTaxa);
    5. Adiciona o Caminho no campo Link da tabela BaseTaxa;
    6. Conta quantos registros tem na tabela ImportarBase >> se = zero, cancela tudo; senão, transfere os dados da ImportarBase para a BaseAmostra.

    O Access também está criando uma tabela chamada "Name AutoCorrect Save Failures", que eu não entendo porque está sendo criada já que não foi necessário nenhuma correção de nomes...

    Segue o código abaixo:  bounce


    Código:
    Private Sub BtImportar_Click()

    Call AbrirArquivo
       
    End Sub

    Function AbrirArquivo()

    ' Requer referencia a Microsoft Office 14 Object Library
    On Error GoTo PROC_ERR

    'DoCmd.SetWarnings False
    'Desativa as mensagens de aviso do sistema

       Dim Caminho As String 'Caminho do arquivo
       Dim fDialog As Office.FileDialog
       Dim strTabela As String

       strTabela = "ImportarBase"

    ' inicia a verificação se há dados na tabela ImportarBase para função Elseif
       Dim db As DAO.DataBase
       Dim rs As DAO.Recordset
       Dim contaReg As Integer

       Set db = CurrentDb()
       Set rs = db.OpenRecordset(strTabela)
       contaReg = rs.RecordCount
               
       'Configura caixa de seleção do arquivo
       Set fDialog = Application.FileDialog(msoFileDialogFilePicker)
       
       With fDialog
           .AllowMultiSelect = False 'Habilita ou desabilita a seleção de múltiplos arquivos
           .Title = "Selecionar arquivo..."
           .InitialFileName = "\\brspfs04\WORKFA\Users\Valuation Group\Business Valuation\SERVIÇOS\"
           'Caminho inicial para seleção
           
           'Configura filtros da caixa de seleção
           .Filters.Clear 'Limpa os filtros
           .Filters.Add "Arquivos Excel - .xlsx", "*.xlsx" 'Adiciona filtro para arquivos .xlsx
           .Filters.Add "Arquivos Excel - .xls", "*.xls" 'Adiciona filtro para arquivos .xlsb
           .Filters.Add "Arquivos Excel - .xlsm", "*.xlsm" 'Adiciona filtro para arquivos .xlsm
           
                           
           If .Show = True Then
               
           Caminho = .SelectedItems.Item(1)    'Local + arquivo selecionados são passados para a variável chamada de "Caminho"
           
           DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, strTabela, Caminho, True, "BDBeta!" & "A1:Q50"
           'Importa as informações do arquivo indicado na janela de opções
           
           DoCmd.OpenQuery "AddIDTaxa", acViewNormal, acEdit
           'Atualiza o campo ID taxa na tabela ImportarBase
           
    'O erro está a partir desta linha:       
           CurrentDb.Execute "UPDATE BaseTaxas INNER JOIN ImportarBase ON ImportarBase.IDTaxa = BaseTaxas.IDTaxa SET BaseTaxas.Link = ' " & Caminho & " ' WHERE ((BaseTaxas.IDTaxa)=(ImportarBase.IDTaxa))"
           'Atualiza o campo link com a informação do endereço do arquivo selecionado
                   
               rs.MoveLast
            
                If rs.RecordCount = 0 Then
                MsgBox "Os dados da taxa de desconto não foram importados." _
                & vbCrLf & vbCrLf & "Favor verificar:" _
                & vbCrLf & "(i) Se TODOS os campos da planilha BD Beta do seu arquivo da taxa de desconto estão preenchidos, sem exceção." _
                & vbCrLf & "(ii) Se os campos estão linkados corretamente, conforme indicado no cabeçalho da planilha BDBeta." _
                & vbCrLf _
                & vbCrLf & "Caso seu arquivo esteja correto e o problema persistir, contate o Administrador do Sistema.", vbInformation, "Ocorreu um problema"
            
                DoCmd.CancelEvent
                DoCmd.DeleteObject acTable, "Name AutoCorrect Save Failures"
                  
               Else
           
               Me.Form.Requery
                   
               DoCmd.OpenQuery "ConsImportarBase"
               'Adiciona os dados que estão na tabela temporária Importar Base para a tabela BaseAmostras
           
               DoCmd.RunSQL "Delete * from ImportarBase"
               'Deleta os registros adicionados na Tabela Temporária ImportarBase
           
               MsgBox "Dados importados com sucesso!", vbInformation, "Agradecemos a colaboração"
                               
               DoCmd.DeleteObject acTable, "Name AutoCorrect Save Failures"
           
               End If
           
       Else
       MsgBox "Arquivo não selecionado.", vbInformation, "Atenção!"
           
       End If
       End With
       

    PROC_EXIT:
       Exit Function
       
    PROC_ERR:
       DoCmd.Hourglass False
       If Err.Number = 3011 Then
          LocalXML = ""
          MsgBox ("Arquivo inválido.")
       Else
           MsgBox Err.Description
       End If
       Resume PROC_EXIT

    'DoCmd.SetWarnings True
    'Ativa as mensagens de aviso do sistema

    End Function


    Desde já agradeço a atenção!!

    LiveBrain
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 182
    Registrado : 15/05/2011

    Re: [Resolvido]Código com erro de syntax (missing operator)

    Mensagem  LiveBrain em Qui 13 Ago 2015, 00:29

    Em que linha do seu código está ocorrendo o Erro?


    As vezes acontece isso na sintaxe da SQL por exemplo, se eu tiver a SQL abaixo no meu projeto

    Código:
    Select into MinhaTabela (Campo1Texto, Campo2Numero) Values ('VariavelTexto', VariavelNumero)

    Agora vamos supor que os valores para as Variáveis sejam
    VariavelTexto= MeuNome
    VariavelNumero= 5

    Então a SQL seria

    Código:
    Select into MinhaTabela (Campo1Texto, Campo2Numero) Values ('MeuNome', 5)

    Mas e se minha VariavelNumero tivesse o valor de 5,5?

    A SQL ficaria
    Código:
    Select into MinhaTabela (Campo1Texto, Campo2Numero) Values ('MeuNome', 5,5)

    Dessa forma, a instrução retornaria erro pois entenderia que estou informando dois campos e passando 3 valores
    Poderia resolver isso transformando a VariavelNumero em texto e passando o valor de 5.5, mas na tabela deixaria como número mesmo
    Código:
    Select into MinhaTabela (Campo1Texto, Campo2Numero) Values ('MeuNome', '5.5')

    Isso acontece tambem com alguma string que possua o apostrofo, por exemplo o nome Joana D'Arc

    se essa informação não te ajudar, não se esqueça de nos informar em qual linha está dando o erro


    .................................................................................
    Abraços

    Live Brain Tutoriais

    "Fraca é a pessoa que não conhece a força que possui nos amigos"

    drib
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Feminino
    Localização : Brasil
    Mensagens : 14
    Registrado : 23/04/2014

    Re: [Resolvido]Código com erro de syntax (missing operator)

    Mensagem  drib em Sex 14 Ago 2015, 15:02

    Olá bom dia!

    Obrigada pelo retorno!
    O código é extenso, não queria colocar em maiúscula mas talvez deveria para destacar a linha, mas está lá:

    'O erro está a partir desta linha:      
          CurrentDb.Execute "UPDATE BaseTaxas INNER JOIN ImportarBase ON ImportarBase.IDTaxa = BaseTaxas.IDTaxa SET BaseTaxas.Link = ' " & Caminho & " ' WHERE ((BaseTaxas.IDTaxa)=(ImportarBase.IDTaxa))"
          'Atualiza o campo link com a informação do endereço do arquivo selecionado

    Não estou conseguindo anexar o BD, o access é 2010, com o formulário que está apresentando erro...

    Mas agradeço a ajuda!

    Att,
    Dafne

    JPaulo
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8907
    Registrado : 04/11/2009

    Re: [Resolvido]Código com erro de syntax (missing operator)

    Mensagem  JPaulo em Sex 14 Ago 2015, 15:25

    Ola;

    Um pitaco apenas;

    Isso ocorre porque você está a tentar importar dados do Excel para a mesma tabela que está aberta pelo Recordset.

    1º Faz a importação
    2º É que manda abrir o Recordset da mesma tabela

    Código:
          CurrentDb.Execute "UPDATE BaseTaxas INNER JOIN ImportarBase ON ImportarBase.IDTaxa = BaseTaxas.IDTaxa SET BaseTaxas.Link = ' " & Caminho & " ' WHERE ((BaseTaxas.IDTaxa)=(ImportarBase.IDTaxa))"
          'Atualiza o campo link com a informação do endereço do arquivo selecionado
                 
      Set db = CurrentDb()
      Set rs = db.OpenRecordset(strTabela)
      contaReg = rs.RecordCount
                         
              rs.MoveLast
           
                If rs.RecordCount = 0 Then

    No seu código está a deletar a tabela de erros

    DoCmd.DeleteObject acTable, "Name AutoCorrect Save Failures"

    Mas ela é importante para descrever o erro, e eu reproduzi aqui para poder ver.


    .................................................................................
    Sucesso e Bons Estudos
    Success and Good Studies

    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]

    drib
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Feminino
    Localização : Brasil
    Mensagens : 14
    Registrado : 23/04/2014

    Re: [Resolvido]Código com erro de syntax (missing operator)

    Mensagem  drib em Sex 14 Ago 2015, 21:46

    Oi João Paulo.

    Obrigada por analisar.
    Eu fiz a alteração que sugeriu mas ainda assim dá erro de syntax.
    A mensagem de erro que aparece é exatamente essa:

    Syntax error (missing operator) in query expression "\\Endereço da rede\endereço do arquivo.xlsx WHERE ((BaseTaxas.IDTaxa)=(ImportarBase.IDTaxa))'.

    O \\Endereço da rede\endereço do arquivo.xlsx que coloquei acima é a variável Caminho que ele captura na seleção do arquivo, então entendo que está corretamente capturando na seleção.

    Não sei se o problema é nas aspas que estão erradas....

    Não consigo fazer um upload do arquivo aqui no fórum, dá uma mensagem de limite excedido. Sad

    LiveBrain
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 182
    Registrado : 15/05/2011

    Re: [Resolvido]Código com erro de syntax (missing operator)

    Mensagem  LiveBrain em Sab 15 Ago 2015, 00:28

    Eu acho que é desnecessário, nesse caso, o uso do Where, já que vc está fazendo o Join através dos mesmos campos.





    .................................................................................
    Abraços

    Live Brain Tutoriais

    "Fraca é a pessoa que não conhece a força que possui nos amigos"

    JPaulo
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8907
    Registrado : 04/11/2009

    Re: [Resolvido]Código com erro de syntax (missing operator)

    Mensagem  JPaulo em Seg 17 Ago 2015, 09:44

    Olá;

    Reproduzi aqui e funcionou, verifique se tem alguma diferença para além do caminho e ficheiro;

    Código:
    Public Function AbrirArquivo()
    ' Requer referencia a Microsoft Office 14 Object Library ou superior
    On Error GoTo PROC_ERR

    'DoCmd.SetWarnings False
    'Desativa as mensagens de aviso do sistema

      Dim Caminho As String 'Caminho do arquivo
      Dim fDialog As Office.FileDialog
      Dim strTabela As String

      strTabela = "ImportarBase"

    ' inicia a verificação se há dados na tabela ImportarBase para função Elseif
      Dim db As DAO.Database
      Dim rs As DAO.Recordset
      Dim contaReg As Integer


      'Configura caixa de seleção do arquivo
      Set fDialog = Application.FileDialog(msoFileDialogFilePicker)
     
      With fDialog
          .AllowMultiSelect = False 'Habilita ou desabilita a seleção de múltiplos arquivos
          .Title = "Selecionar arquivo..."
          .InitialFileName = "D:\Teste para BD\Importa BD\Teste.xlsx"
          'Caminho inicial para seleção
         
          'Configura filtros da caixa de seleção
          .Filters.Clear 'Limpa os filtros
          .Filters.Add "Arquivos Excel - .xlsx", "*.xlsx" 'Adiciona filtro para arquivos .xlsx
          .Filters.Add "Arquivos Excel - .xls", "*.xls" 'Adiciona filtro para arquivos .xlsb
          .Filters.Add "Arquivos Excel - .xlsm", "*.xlsm" 'Adiciona filtro para arquivos .xlsm
         
                         
          If .Show = True Then
             
          Caminho = .SelectedItems.Item(1)    'Local + arquivo selecionados são passados para a variável chamada de "Caminho"
         
          DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, strTabela, Caminho, True, "Sheet1!" & "A1:A50"
          'Importa as informações do arquivo indicado na janela de opções
         
          ' DoCmd.OpenQuery "AddIDTaxa", acViewNormal, acEdit
          'Atualiza o campo ID taxa na tabela ImportarBase
           
    'O erro está a partir desta linha:
          CurrentDb.Execute "UPDATE BaseTaxas" _
          & " INNER JOIN ImportarBase" _
          & " ON ImportarBase.IDTaxa = BaseTaxas.IDTaxa" _
          & " SET BaseTaxas.Link = ' " & Caminho & " '" _
          & " WHERE BaseTaxas.IDTaxa=ImportarBase.IDTaxa"
          'Atualiza o campo link com a informação do endereço do arquivo selecionado
                 
      Set db = CurrentDb()
      Set rs = db.OpenRecordset(strTabela)
      contaReg = rs.RecordCount
                         
              rs.MoveLast
           
                If rs.RecordCount = 0 Then
                MsgBox "Os dados da taxa de desconto não foram importados." _
                & vbCrLf & vbCrLf & "Favor verificar:" _
                & vbCrLf & "(i) Se TODOS os campos da planilha BD Beta do seu arquivo da taxa de desconto estão preenchidos, sem exceção." _
                & vbCrLf & "(ii) Se os campos estão linkados corretamente, conforme indicado no cabeçalho da planilha BDBeta." _
                & vbCrLf _
                & vbCrLf & "Caso seu arquivo esteja correto e o problema persistir, contate o Administrador do Sistema.", vbInformation, "Ocorreu um problema"
           
                DoCmd.CancelEvent
                'DoCmd.DeleteObject acTable, "Name AutoCorrect Save Failures"
                 
              Else
         
              'Me.Form.Requery
                 
            '  DoCmd.OpenQuery "ConsImportarBase"
              'Adiciona os dados que estão na tabela temporária Importar Base para a tabela BaseAmostras
         
            '  DoCmd.RunSQL "Delete * from ImportarBase"
              'Deleta os registros adicionados na Tabela Temporária ImportarBase
         
            '  MsgBox "Dados importados com sucesso!", vbInformation, "Agradecemos a colaboração"
                             
            '  DoCmd.DeleteObject acTable, "Name AutoCorrect Save Failures"
         
              End If
         
      Else
      MsgBox "Arquivo não selecionado.", vbInformation, "Atenção!"
         
      End If
      End With
     

    PROC_EXIT:
      Exit Function
     
    PROC_ERR:
      DoCmd.Hourglass False
      If Err.Number = 3011 Then
          LocalXML = ""
          MsgBox ("Arquivo inválido.")
      Else
          MsgBox Err.Description
      End If
      Resume PROC_EXIT

    'DoCmd.SetWarnings True
    'Ativa as mensagens de aviso do sistema

    End Function


    .................................................................................
    Sucesso e Bons Estudos
    Success and Good Studies

    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]

    drib
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Feminino
    Localização : Brasil
    Mensagens : 14
    Registrado : 23/04/2014

    Re: [Resolvido]Código com erro de syntax (missing operator)

    Mensagem  drib em Qua 19 Ago 2015, 17:46

    Olá!

    Mestres, segui as dicas mas ainda não funcionou

    Como não consigo disponibilizar o bd aqui, coloquei lá no dropbox.


    Muito obrigada pela atenção!

    Abs.


    Última edição por drib em Ter 25 Ago 2015, 05:05, editado 2 vez(es)

    drib
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Feminino
    Localização : Brasil
    Mensagens : 14
    Registrado : 23/04/2014

    Re: [Resolvido]Código com erro de syntax (missing operator)

    Mensagem  drib em Sex 21 Ago 2015, 14:22

    Up! bounce

    JPaulo
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8907
    Registrado : 04/11/2009

    Re: [Resolvido]Código com erro de syntax (missing operator)

    Mensagem  JPaulo em Sex 21 Ago 2015, 15:23

    Olá;

    Pode anexar apenas o Excel com dados virtuais de como seria a importação ?

    Fiz aqui um pequeno teste criando uma função num modulo e voltou a funcionar;

    Código:
    Function teste()
    Dim Caminho As String
    Caminho = "\\brspfs04\WORKFA\Users\Valuation Group\Business Valuation\SERVIÇOS\Layout Importação BD Beta.xlsx"
            CurrentDb.Execute "UPDATE BaseTaxas" _
            & " INNER JOIN ImportarBase" _
            & " ON ImportarBase.IDTaxa = BaseTaxas.IDTaxa" _
            & " SET BaseTaxas.Link = '" & Caminho & "'" _
            & " WHERE BaseTaxas.IDTaxa=ImportarBase.IDTaxa"
    End Function


    .................................................................................
    Sucesso e Bons Estudos
    Success and Good Studies

    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]

    drib
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Feminino
    Localização : Brasil
    Mensagens : 14
    Registrado : 23/04/2014

    Re: [Resolvido]Código com erro de syntax (missing operator)

    Mensagem  drib em Ter 25 Ago 2015, 18:04

    Boa tarde Mestres!

    Consegui resolver com um código postado em outro [Você precisa estar registrado e conectado para ver este link.], muuuuuito mais simples do que eu estava fazendo.

    Alterei a configuração do Caminho para Variant ao invés de String, adicionei um campo invisível no formulário e substituí o código por Me.Link = Caminho.

    Obrigada pela ajuda de todos!
    cheers Laughing cheers Laughing


    JPaulo
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8907
    Registrado : 04/11/2009

    Re: [Resolvido]Código com erro de syntax (missing operator)

    Mensagem  JPaulo em Qua 26 Ago 2015, 16:41

    Quem procura, sempre acha.

    Obrigado pelo retorno o forum agradece,


    .................................................................................
    Sucesso e Bons Estudos
    Success and Good Studies

    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]

      Data/hora atual: Ter 06 Dez 2016, 05:43