SALVANDO ERRADO NO MYSQL ?

MESTRE 04/04/2014 08:54:03
#436877
Olá pessoal, tenho uma dúvida básica..

Seguinte vou explicar, tenho um formulario onde o funcionário X selecionara umas fotos, até ai beleza..

Elaborei uma rotina que no Click do Salvar foto, ele ja cria automaticamente no NAS da empresa a pasta com um Código, até ai perfeito!
ai eu dou 2 Insert[ô]s 1 no banco temporario e 1 no Mysql..

Só que o impossível acontece..

Caminho do NAS da empresa é [Ô] \\NAS-empr\Salvar_imagem [Ô]

no banco temporário ele insere direitinho no campo [Ô]\\NAS-empr\Salvar_imagem[Ô]
Já no MYSQL ele fica [Ô]\NAS-empr\Salvar_imagem[Ô] ele some com uma \

Alguém sabe pq? ja parei o projeto e o objeto referente ao caminho é o MESMO.. tanto pro Acess como pro MYSQL.. só que o MYSQL insere com 1 [Ô] \ [Ô]apenas
e o Acess insere certo no BD com as 2 [Ô]\\[Ô]

O problema é que pode ser necessário eu editar as fotos, e a rotina ta salva.. aí ele da um Select no MYSQL pra buscar a informação e jogar no Banco Temporário pro Relatório.. só que ele busca a informação no MYSQL e busca [Ô]\NAS-empr\Salvar_imagem\OS2001\foto1.jpg[Ô] só que o caminho do NAS é \\ e ele busca só [Ô]\[Ô] que grava no Mysql

Tipo do campo MYSQL ta [Ô]LongText[Ô]
NILSONTRES 04/04/2014 09:13:53
#436879
No mysql, antes da inserção vc tem que fazer um replace de [Ô]\[Ô] por [Ô]/[Ô]

Se não me engano, se vc inserir utilizando parameters isso não é necessário.
MESTRE 04/04/2014 09:55:33
#436881
Então NILSON mais ja estou salvando com [Ô] \\ [Ô] pq essa \\ vem de uma variavel chamada strCaminho.. ai dou insert no strCaminho

no Acess ele salva com as 2 barras, certinho [Ô] \\ [Ô] e no Mysql ele salva so com 1 barra [Ô] \ [Ô]

então ele ja está salvando certo ..
MARCELO.TREZE 04/04/2014 10:55:58
#436885
Bom caro colega mestre o Nilson deu a sugestão correta substitua as barras invertidas(\) por barras (/) na hora de salvar e na hora de ler substitua novamente, bom porque disso.

No mysql acontece o seguinte, em uma string, certas sequências tem um significado especial. Cada uma destas sequências começam com uma barra invertida (‘\’), conhecida como caracter de escape. O MySQL reconhece a seguinte sequência de escape:

[txt-color=#0000f0]\0[/txt-color] Um caracter ASCII 0 (NUL).

[txt-color=#0000f0]\[ô] [/txt-color] Um caracter de aspas simples (‘[ô]’).

[txt-color=#0000f0]\[Ô][/txt-color] Um caracter de aspas duplas (‘[Ô]’).

[txt-color=#0000f0]\b [/txt-color] Um caracter de backspace.

[txt-color=#0000f0]
[/txt-color] Um caracter de nova linha.

[txt-color=#0000f0] [/txt-color] Um caracter de retorno de carro.

[txt-color=#0000f0]     [/txt-color] Um caracter de tabulação.

[txt-color=#0000f0]\z[/txt-color] ASCII(26) (Control-Z). Este caracter pode ser codificado para permitir que você contorne o problema que o ASCII(26) possui comoEND-OF-FILE ou EOF (Fim do arquivo) no
Windows. (ASCII(26) irá causar problemas se você tentar usar mysql banco_dados < nome_arquivo).

[txt-color=#0000f0]\\[/txt-color] O caracter de barra invertida (‘\’) character.

[txt-color=#0000f0]\%[/txt-color] Um caracter ‘%’. Ele pode ser usado para pesquisar por instâncias literais de ‘%’ em contextos onde ‘%’ deve, de outra maneira, ser interpretado como um meta
caracter.

[txt-color=#0000f0]\_[/txt-color] Um caracter ‘_’. Ele é usado para pesquisar por instâncias literais de ‘_’ em contextos onde ‘_’ deve, de outra maneira, ser intrerpretado como um meta caracter.



Pra resolver este problema coloque na sua query um replace na hora de salvar, ex:

Replace(Caminho,[Ô]\\[Ô], [Ô]//[Ô])


e na hora de ler novamente o replace

Replace(Caminho,[Ô]//[Ô], [Ô]\\[Ô])

OCELOT 04/04/2014 11:37:57
#436889
Provavelmente você está montado a SQL concatenando strings, se for o caso passe a usar parâmetros que esse problema deve acabar

Eu não acho que substituir \\ por // seja uma solução, acho até que é uma gambiarra, o correto para se salvar o texto [Ô]\\NAS-empr\Salvar_imagem[Ô] no MySQL concatenando strings seria mandar o valor como [Ô]\\\\NAS-empr\\Salvar_imagem[Ô], assim quando ler vai pegar o texto correto.

Mas o correto ainda e usar parâmetros, isso resolve muitos problemas que se pode ter com SQL
MARCELO.TREZE 04/04/2014 12:59:05
#436899
Um tanto quanto deselegante sua resposta meu amigo OCELOT, mas tudo bem [Ô]quem nunca fez gambiarra que atire a primeira pedra[Ô], porém se tratando de algo tão simples, não vejo o problema de se usar gambiarra ( se é que uma função do próprio VB seja uma gambiarra ), uma vez que esta provavelmente seja a unica parte do código em que ele precise disto.

OCELOT 04/04/2014 13:13:40
#436901
Resposta escolhida
Não digo que o uso do Replace seja a gambiarra, a gambiarra ali é trocar as \\ por // e depois que ler trocar de volta. Isso funciona nesse caso, mas não tem como falar que não é gambiarra, se for fazer corretamente poderia ser usando o Replace mesmo, mas em vez de trocar \\ por // seria trocando \ por \\, assim gravaria corretamente e na hora de ler já viria da forma correta, e é até mais simples do que trocar na hora de gravar e depois de novo na hora de ler, mas de qualquer forma melhor que isso ainda é usar parâmetros.
MESTRE 04/04/2014 13:52:25
#436906
OBRIGADO PESSOAL PELA AJUDA!!!



Deu certoo!!!

Por pura questão de mexer menos na estrutura eu realizei o replace de \
as para \\\
as assim como o OCELOT falou..

más era uma coisa que existem inúmeras formas de se fazer rsrs.. e todas estão corretas..

Vlw galera!
Tópico encerrado , respostas não são mais permitidas