INCLUSÃO DE DADOS COM APOSTROFE NO BANCO

MILTONSILVA94 05/07/2016 20:05:47
#464509
Sempre que digito um [ô](apostrofe) em um campo de texto na minha tela ele apresenta [ô]Erro de sintaxe (operador faltando) na expressão de consulta[ô]...

Nas telas que tem diversos campos, vou colocar replace para cada campo?

Abaixo um exemplo de outro formulário, como deveria fazer para ele não apresentar o erro ao salvar no banco?
lsql = [Ô]INSERT INTO AGENDAMENTOS (id_agendamento, data_hora, nome, telefone, data, horario, descricao, valor_total_rs, status_agendamento, atualizado_por, ultima_atualizacao) Values ([Ô] & txtIdAgendamento.Text & [Ô], [ô][Ô] & txtDataHora.Text & [Ô][ô], [ô][Ô] & txtNome.Text & [Ô][ô], [ô][Ô] & txtTelefone.Text & [Ô][ô], [ô][Ô] & txtData.Text & [Ô][ô], [ô][Ô] & txtHorario.Text & [Ô][ô], [ô][Ô] & txtDescricao.Text & [Ô][ô], [ô][Ô] & FormatNumber(txtValorTotalRs.Text, 2) & [Ô][ô], [ô][Ô] & [Ô]AGENDADO[Ô] & [Ô][ô], [ô][Ô] & lblAtualizadoPor.Caption & [Ô][ô], [ô][Ô] & lblUltimaAtualizacao.Caption & [Ô][ô])[Ô]
KERPLUNK 05/07/2016 20:38:26
#464510
[txt-color=#e80000]PARE[/txt-color] de usar concatenação para SQL. Use comandos parametrizados.
MILTONSILVA94 05/07/2016 22:03:24
#464514
IRENKO 05/07/2016 22:22:59
#464515
Resposta escolhida
Talvez ajude com essa função:

Public Function ComApostrofo(Str As String, Optional lngPos As Long = 1) As String

Dim intPosStr As Integer [ô]variavel que recebe a posicao do caracter da string

intPosStr = InStr(lngPos, Str, [Ô][ô][Ô])
If intPosStr > 0 Then
ComApostrofo = Left(Str, intPosStr) & [Ô][ô][Ô] & Mid(Str, intPosStr + 1)
Str = ComApostrofo
End If

If InStr(intPosStr + 2, Str, [Ô][ô][Ô]) > 0 Then
Str = ComApostrofo(Str, intPosStr + 2)
End If

ComApostrofo = Str
End Function

Chamando:
ComApostrofo(txtNome.Text)
NILSONTRES 05/07/2016 22:56:14
#464518
Se não puder fazer como disse o Kerpelunk, então faça assim:
Exemplo:[ô][Ô] & Replace(txtDescricao.Text,[Ô][ô][Ô],[Ô][ô][ô][Ô]) & [Ô][ô]
KERPLUNK 06/07/2016 00:57:05
#464524
Gente, tentem ver isso como uma crítica construtiva: Enquanto ficarem focados nesses [Ô]workarounds[Ô], nunca vão conseguir aprender de verdade. Não vá pela via do [Ô]remediar[Ô], ao invés disso, faça do jeito certo que nunca mais vai ter problemas e mesmo que tenha, eles serão muito mais fáceis de serem resolvidos. Usem orientação à objetos, usem ORM[ô]s para seus projetos, usem sempre as melhores práticas. Elas não são para [Ô]ter código bonitinho[Ô], elas existem e são adotadas pelos melhores profissionais porque são realmente melhores, não é questão estética, não é questão de modinha, simplesmente são as melhores práticas mesmo. Ficar insistindo nos erros, não vai levar à lugar algum, pelo contrário, vai só atrasar sua evolução profissional.
MICHAELL 06/07/2016 01:17:21
#464526
concordo com Kerplunk,
estou a apenas 3 semanas estudando C#, tentando utilizar as melhores práticas possíveis
e não há um dia sequer que não vejo vantagens sobre o VB6. Me arrependo profundamente de não ter migrado antes.

realmente um sql concatenado desse jeito chega doer na alma quando se conhece recursos novos.








PERCIFILHO 06/07/2016 07:19:01
#464529
MiltonSilva, concordo em gênero, número e grau com o Kerplunk. Já tive muitos problemas como esses que você está tendo e também [Ô]apanhei[Ô] muito até conseguir resolver todos, porém, depois que descobri novas técnicas mostradas pelo Kerplunk nos vídeos do canal dele, confesso que fiquei maravilhado com as vantagens. Ainda ontem eu estava pensando nisso, antigamente, para se fazer um simples cadastro eu gastava horas codificando e corrigindo os erros que apareciam (sempre apareciam), hoje com orientação a objetos e reflection, eu consigo fazer um simples cadastro em menos da metade desse tempo, e com menos erros para corrigir.
Não gosto de dizer isso, mas creio que já está na hora de você também migrar para o C#, você pode pensar que é difícil, porém o que muda é simplesmente a sintaxe e isso com o tempo você vai se acostumando. A lógica será sempre a mesma. Quando você ver o que é capaz de fazer com o C#, você vai se arrepender de não ter migrado antes, como disse o nosso amigo Michaell. Pense nisso!!
ROOLSI 06/07/2016 10:01:55
#464536
Milton, tu pode usar o próprio ADO para inserir um registro na tabela, a propriedade ADDNEW irá fazer a inclusão, e não terá problemas com o apóstrofe.
JCM0867 06/07/2016 11:00:10
#464541
Uma vez só usava concatenação, ainda tenho muitas consultas assim, mas quando faço alguma manutenção ou novas colsultas uso Parametrizado @
não tive mais problemas com o apostrofo


_____________________________________________
[txt-color=#0000f0]Precisando de um Sistema de Gestão Educacional?[/txt-color]
Desenvolvido em VB.NET + SQL Server + Crystal Reports
Conheça nossa Solução: www.cjsystem.com.br
MILTONSILVA94 19/07/2016 17:39:48
#464951
Citação:

:
Talvez ajude com essa função:

Public Function ComApostrofo(Str As String, Optional lngPos As Long = 1) As String

Dim intPosStr As Integer [ô]variavel que recebe a posicao do caracter da string

intPosStr = InStr(lngPos, Str, [Ô][ô][Ô])
If intPosStr > 0 Then
ComApostrofo = Left(Str, intPosStr) & [Ô][ô][Ô] & Mid(Str, intPosStr + 1)
Str = ComApostrofo
End If

If InStr(intPosStr + 2, Str, [Ô][ô][Ô]) > 0 Then
Str = ComApostrofo(Str, intPosStr + 2)
End If

ComApostrofo = Str
End Function

Chamando:
ComApostrofo(txtNome.Text)



IRENKO, irei testar hoje e fechar o tópico, obrigado

Muito obrigado aos demais pelas sugestões dada.
Página 1 de 2 [11 registro(s)]
Tópico encerrado , respostas não são mais permitidas