MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

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!!
    avatar
    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
    avatar
    JPaulo
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 9337
    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.


    .................................................................................
    Contribua com o maximoaccess nos links abaixo, ajude a melhorar este que é o seu site na NET.

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

    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
    avatar
    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"
    avatar
    JPaulo
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 9337
    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


    .................................................................................
    Contribua com o maximoaccess nos links abaixo, ajude a melhorar este que é o seu site na NET.

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

    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
    avatar
    JPaulo
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 9337
    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


    .................................................................................
    Contribua com o maximoaccess nos links abaixo, ajude a melhorar este que é o seu site na NET.

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

    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

    avatar
    JPaulo
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 9337
    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,


    .................................................................................
    Contribua com o maximoaccess nos links abaixo, ajude a melhorar este que é o seu site na NET.

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

    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: Qua 26 Jul 2017, 17:39