PROBLEMAS NO SQL UPDATE

MANOELACFILHO 23/04/2014 16:04:44
#437527
Amigos, estou me deparando com um problema bem estranho. Em certas partes do meu código tenho algumas SQL UPDATES, uma delas é a seguinte:

  SQL = [Ô]UPDATE [Part_list] SET [CSCODE]=[ô][Ô] & TXT_proccod_PCP.Text & [Ô][ô],[DESCRICAO]=[ô][Ô] & PCP_txtretrieve.Text & [Ô][ô],[UNIDADE]=[ô][Ô] & PCP_txtunidade.Text & [Ô][ô],[DESENHO]=[ô][Ô] & PCP_txtdesenho.Text & [Ô][ô],[REVISAO]=[ô][Ô] & PCP_txtrevisao.Text & [Ô][ô],[ICMS]=[ô][Ô] & PCP_txticms.Text & [Ô][ô],[IPI]=[ô][Ô] & PCP_txtipi.Text & [Ô][ô],[PIS]=[ô][Ô] & PCP_txtpis.Text & [Ô][ô],[II]=[ô][Ô] & PCP_txtii.Text & [Ô][ô],[DATA1]=[ô][Ô] & DATA1 & [Ô][ô],[FAMILIA]=[ô][Ô] & PCP_txtfamilia.Text & [Ô][ô],[NCM]=[ô][Ô] & PCP_txtncm.Text & [Ô][ô],[CST1]=[ô][Ô] & PCP_txtcusto1.Text & [Ô][ô],[DATA2]=[ô][Ô] & DATA2 & [Ô][ô],[CST2]=[ô][Ô] & PCP_txtcusto2.Text & [Ô][ô],[CSTMEDIO]=[ô][Ô] & PCP_txtvmedio.Text & [Ô][ô],[ESTOQUE]=[ô][Ô] & PCP_txtestoque.Text & [Ô][ô],[LOCAL]=[ô][Ô] & PCP_txtlocal.Text & [Ô][ô],[INSPECAO]=[ô][Ô] & INSP & [Ô][ô],[CLASSE]=[ô][Ô] & CLS & [Ô][ô],[EST_MINIMO]=[ô][Ô] & PCP_txtestoquemin.Text & [Ô][ô],[PESO]=[ô][Ô] & PCP_txtpeso.Text & [Ô][ô] WHERE [CODIGO]=[Ô] & PCP_txtsys.Text & [Ô][Ô] 


Até então tudo beleza com o código, porém no campo descrição, que vem de um SELECT e preenche a textbox [Ô]txtretrieve.Text[Ô] de vez em quando aparece, coisas do tipo:

ANEL O[ô]RING 31,4X25,4XDIAM 2,95MM ou ainda;
HASTE DE COMANDO N1 1/2[Ô] IPS - 1200MM.

Esses materiais vem do banco de dados, e os caracteres [ô] e [Ô] estão realmente complicando minha vida na SQL UPDATE, eles quebram a SQL pois os caracteres [ô] e [Ô] são delimitadores da string SQL.

Será que ha solução será eliminar do banco de dados os caracteres [ô] e [Ô], e ainda proibir que estes sejam digitados nas textboxe[ô]s? Gostaria de descobrir uma solução pois estes caracteres são importantes nas descrições dos materiais de nosso uso, e nosso banco de dados é razoavelmente grande..

Alguma ideia Amigos?

Agradeço desde já.

Abraços.
NETMANIA 23/04/2014 16:31:23
#437528
Olá Manoel.

Tente fazer isso nos trechos de insert/update/select, onde você precise colocar a informação referente a aspa simples: REPLACE(texto, [ô][ô][ô][ô] ,[ô][ô]).

Já tive este problema, e foi assim que resolvi.
OCELOT 23/04/2014 17:31:59
#437529
Use parâmetros e nunca mais tenha esses e outros tipos de problemas que se pode ter ao concatenar valores em uma string para formar a SQL
MANOELACFILHO 23/04/2014 21:04:35
#437541
Amigos,

Obrigado pelas respostas.

OCELOT, com relação a parametrização, se eu fizer isso somente para as variáveis que carregam os caracteres será suficiente?

Abraços
MOUSER 23/04/2014 21:07:45
#437543
Manoel, Sim. Vai dar um pouco de trabalho, mas a sim.
MANOELACFILHO 23/04/2014 22:34:52
#437551
Realmente,

Segundo o concelho do OCELOT, achei um artigo e li a respeito, vejam que interessante.

Citação:

http://www.mhavila.com.br/topicos/bd/sqlbind.html



Vou rever já meu código e parametrizar tudo que for entrada de dados.

Abraços.
OCELOT 24/04/2014 09:35:33
#437557
Essa é a melhor coisa que você pode fazer, quando se acostumar com isso vai achar até melhor fazer assim, concatenar strings vai parecer uma bagunça.

Só uma dica, no site que você postou ele usa ? para marcar os parâmetros, só que isso pode variar de acordo com o banco de dados, por exemplo se for um banco do access você vai usar ? mesmo, e não lembro se ele aceita parâmetros nomeados, mas se não me engano ele só vai aceitar os parâmetros se adicionados na ordem correta, que deve ser a mesma que aparece na SQL.

Já no SQL Server por exemplo você usa parâmetros nomeados do tipo @nomeDoParametro, e não importa a ordem em que eles são adicionados depois, o importante é que tenha todos.
MOUSER 24/04/2014 21:54:38
#437602
No projeto você separa por classes ou coloca o código de execução do SQL tudo junto? Digo isso pq já tive problemas similares, depois que comecei a trabalhar com classes separadas para tudo, ficou muitas classes, mas ficou mais organizado e fácil para encontrar erros também. Por exemplo: Uma classe para conectar com banco, outra classe só para executar os comandos do banco, uma classe só com as funções dos botões, depois vou importando só o necessário.
MANOELACFILHO 24/04/2014 22:24:25
#437603
Amigos, boa noite.

OCELOT, tranquilo, valeu pelas dicas e, quanto ao ?, @ etc, eu sei, só me referi ao conteúdo, que é muito bem explicado e tem tudo haver com esse problema que eu não entendi direito a princípio.

MAUSER, com relação ao meu código, eu não crio essas classes, fica tudo junto, ou seja, cada FORM tem seu código, mais eu me entendo bem com esse jeito, acho que vou permanecer. O que vou fazer nesse FDS e rever as minhas SQL[ô]s, e arrumar esse problema, mais ainda tenho muito que aprender sem dúvidas..

Na verdade sou muito bom e experiente para escrever em C e assembly, mais para microcontroladores, onde os recursos são bem escassos, memória etc. Em VB eu tenho apenas uns seis meses de programação, mais fico feliz, pois os recursos são bem legais, quem me dera que para microcontroladores fosse assim também. As vezes tenho que escrever firmwares complexos em 4K de memória, kkk podem dar risada...

Obrigado mais uma vez a todos, esse fórum está de parabéns.

Sds.
Faça seu login para responder