INCLUSÃO DE DADOS COM APOSTROFE NO BANCO
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 & [Ô][ô])[Ô]
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 & [Ô][ô])[Ô]
[txt-color=#e80000]PARE[/txt-color] de usar concatenação para SQL. Use comandos parametrizados.
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)
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)
Se não puder fazer como disse o Kerpelunk, então faça assim:
Exemplo:[ô][Ô] & Replace(txtDescricao.Text,[Ô][ô][Ô],[Ô][ô][ô][Ô]) & [Ô][ô]
Exemplo:[ô][Ô] & Replace(txtDescricao.Text,[Ô][ô][Ô],[Ô][ô][ô][Ô]) & [Ô][ô]
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.
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.
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.
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!!
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!!
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.
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
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
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.
Tópico encerrado , respostas não são mais permitidas