SALVANDO ERRADO NO MYSQL ?
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[Ô]
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[Ô]
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.
Se não me engano, se vc inserir utilizando parameters isso não é necessário.
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 ..
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 ..
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:
e na hora de ler novamente o replace
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,[Ô]//[Ô], [Ô]\\[Ô])
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
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
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.
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.
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!
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