Notifications
Clear all

Inclusão de Dados com Aspa Simples

14 Posts
2 Usuários
0 Reactions
3,580 Visualizações
(@rafaelp)
Posts: 89
Trusted Member
Topic starter
 

Boa tarde.

Galera,

Estou começando a aprender a integração do Excel com Access e me deparei com um problema.
Quando vou incluir algum dado com aspas simples ( ' ) ocorre o seguinte erro:

Eu pensei em validar os campos antes da inserção para não permitir as aspas porém, alguns formulários terão inúmeros TextBox e isso daria muito trabalho (validar um por um).
Queria uma forma mais fácil de validar todos os campos de uma vez ou algum jeito de incluir as informações com o caractér (procurei muito na internet e não encontrei nada que me atenda).

Erro em tempo de execução '-2147217900 (80040e14)':

Erro de sintaxe (operador faltando) na expressão de consulta "'Rafael", '1', 'S')'.

Desde já obrigado!

 
Postado : 20/06/2018 1:28 pm
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

rafaelp,

Boa tarde!

Não há qualquer problema quando você tem campos string no SQL (que precisam ser repassados com aspas simples). Basta colocar aspas duplas na variável string do VBA que armazena o comando SQL. Veja exemplo abaixo que retirei de um arquivo meu:

'ComadoSQL é uma variável String criada no VBA
'Valor é uma caixa de texto. Veja que depois do sinal de igual tem uma aspa dupla e uma simples. Depois _
de Valor tem uma aspa dupla, uma simples e uma dupla.
ComandoSQL = "WHERE Cep = '" & Valor & "'"

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 20/06/2018 2:45 pm
(@rafaelp)
Posts: 89
Trusted Member
Topic starter
 

Bom dia.

wagner,

Muito obrigado pela resposta.

Então, eu estou fazendo desta forma que você mencionou porém, quando eu coloco algum dado com aspas simples ele me retorna o erro.
Segue o código da Query:

    Sql = ""
        Sql = "INSERT INTO usuarios (nome, usuario, senha, grupo, bloqueado) VALUES ("
        Sql = Sql & "'" & Trim(fm.tbNome.Value) & "', "
        Sql = Sql & "'" & Trim(fm.tbUsuario.Value) & "', "
        Sql = Sql & "'" & Trim(fm.tbSenha.Value) & "', "
        Sql = Sql & "'" & fm.cbGrupo.Value & "', "
        Sql = Sql & "'" & bloq & "'"
        Sql = Sql & ")"
        
    cn.Execute Sql
 
Postado : 21/06/2018 4:33 am
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

Deixe seu arquivo Excel e seu arquivo Access com o mesmo layout original, porém, apenas com umas 5 linhas cada um. Compacte com .ZIP.

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 21/06/2018 9:15 am
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

rafaelp,

Boa tarde!

Bom... consegui testar seu arquivo aqui e... tudo que fiz foi montar um novo arquivo Access com a tabela e os campos mencionados em seu código. Nada mais. Desse modo, não ocorreu nenhum erro aqui.

Carreguei o formulário de cadastro de clientes normalmente e inseri lá os dados nas caixas de texto. Depois cliquei em cadastrar e os dados foram inseridos no BD normalmente, inclusive com mensagem de sucesso que você colocou no código.

Segue os arquivos funcionando normalmente.

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 22/06/2018 10:58 am
(@rafaelp)
Posts: 89
Trusted Member
Topic starter
 

wagner, boa tarde!

Cara estranho, eu testei este arquivo que você me mandou também e da o mesmo erro.
Fui incluir campos com aspas simples e ocorreu conforme abaixo:

Você tentou incluir alguma dado nos campos com aspas simples?
Por exemplo: 'Rafael

Erro em tempo de execução '-2147217900 (80040e14)':

Erro de sintaxe (operador faltando) na expressão de consulta '"Rafael', '1', 'S')'.
 
Postado : 22/06/2018 11:21 am
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

rafaelp,

Estranho mesmo...

Veja:

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 22/06/2018 1:27 pm
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

rafaelp,

Lembrei-me de uma coisa agora: Quando você enviou esse seu último posto informando que havia testado o arquivo que enviei e que o problema ocorreu novamente, leombrei que quando executei de tarde também ocorreu um erro semelhante. Verifiquei, entretanto que era apenas o caminho para o Banco de Dados que fica lá na aba Parâmetros. Aí foi só alterar para o da minha máquina que funcionou normalmente e colei para você ver inclusive as imagens que enviei.

Você tá observando isso? Se o caminho que está lá em Parâmetros é o caminho aonde está o seu BD?

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 22/06/2018 6:29 pm
(@rafaelp)
Posts: 89
Trusted Member
Topic starter
 

wagner,

Bom dia!

Acho que eu to explicando errado pra você ou você entendeu errado. :?
Os dados desta foto que você mandou inclui tranquilo aqui pra mim, o problema é quando eu coloco um dado com aspas simples no inicio, meio ou final da string.
Tente incluir o usuário assim: Rafael'Padua
O erro está nesta situação.

 
Postado : 25/06/2018 6:18 am
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

rafaelp,

Bom dia!

kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk! Se você tivesse falado antes...

Nesse caso, basta fazer um pequeno tratamento no evento Exit da caixa de texto do nome pois o o SQL só aceita você inserir uma aspa simple (que faz parte do nome de uma string) se tiver outra aspa simples antes da aspa simples. Coloque o código abaixo no evento Exit do TextBox alusivo ao nome:

Private Sub tbNome_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    tbNome.Text = Replace(tbNome.Text, "'", "''", , , vbTextCompare)
End Sub

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 25/06/2018 7:38 am
(@rafaelp)
Posts: 89
Trusted Member
Topic starter
 

Foi um mal entendido. :lol:

Ah agora entendi, então acho melhor eu bloquear a inclusão da aspas simples no campo.
Você tem alguma forma mais fácil de validar os campos de uma vez ao invés de eu ter que colocar em um por um a validação? Pergunto pois haverá formulário com muitos campos no meu sistema.

Muito obrigado!

 
Postado : 25/06/2018 10:04 am
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

Rafael,

O Exemplo anexo faz a formatação de máscara de moeda para cada textbox existente no userform. Existe uma rotina só que é chamada no evento Change de cada textbox. É um pouco diferente do que você precisa, porém, a lógica é idêntica. Apenas você não vai usar o evento Change e sim o evento KeyPress das caixas de texto para fazer validação de entrada de dados.

Outro detalhe é que se existir algum textbox que não há necessidade de fazer esse tipo de validação (texbox que receberá valores, por exemplo), você deve, ainda em tempo de design, atribuir um valor a propriedade TAG desse botão e lá na rotina de validação fazer um if para que as caixas de texto que tenham essa TAG não sejam afetadas.

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 25/06/2018 11:03 am
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

Rafael,

Este outro exemplo, trabalha também com validação de dados em caixas de texto, todavia, já envolve conceitos mais complexos pois faz isso com o uso de módulos de classe. Ele é muito interessante porque também demonstra como se pode criar caixas de texto virtuais em tempo de execução.

Assim que você abrir o arquivo, é apresentado o formulário e existe um botão chamado Criar. Você digitando um número (por exemplo 3) na caixa de texto e clicando em Criar, serão criadas 3 linhas com duas caixas de texto em cada linha. Se tentar digitar texto não numérico em qualquer umas das caixas de texto, a caixa de texto bloqueia. Ela só aceita números e backspace.

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 25/06/2018 11:17 am
(@rafaelp)
Posts: 89
Trusted Member
Topic starter
 

wagner,

Boa tarde!

O Exemplo anexo faz a formatação de máscara de moeda para cada textbox existente no userform. Existe uma rotina só que é chamada no evento Change de cada textbox. É um pouco diferente do que você precisa, porém, a lógica é idêntica. Apenas você não vai usar o evento Change e sim o evento KeyPress das caixas de texto para fazer validação de entrada de dados.

Cara, consegui resolver com este exemplo.

Já a respeito do outro realmente é muito interessante porém, com meu nível de conhecimento ainda é bem complexo. :lol: Mas com certeza salvarei para uso em alguma situação que seja necessária.

Muito obrigado pela grande ajuda de sempre!!

 
Postado : 25/06/2018 2:56 pm