Estoy creando una web con el programa Visual Fox Pro y tengo problema con la edición de imágenes.

Hola haber si me podéis ayudar porque tengo un grave problema que me urge:
Yo guardo (MYSQL) la dirección de la imagen en un campo (VARCHAR 200), el problema es que en mysql, no se porque, se me come las "\" (barras) y luego no se me muestra la imagen, ¿cuál es la solución para que me guarde la dirección como yo se la mando guardar?
He estado pensando, que si trabajo en red las imágenes no se van a ver en todos los ordenadores porque la dirección de la imagen no corresponde a todos los ordenadores al no estar las imágenes en todos los ordenadores, ¿cuál es la forma correcta para guardar y mostrar imágenes en un programa con entorno de red o con base de datos en un servidor?
Ayuda urgente por favor, gracias por tu atención y Saludos.

1 respuesta

Respuesta
1
El problema que estás teniendo se debe a que en MySQL (y en otros motores también) hay ciertos caracteres que son especiales y para poder guardarlos como corresponde hay que "escaparlos". Si tenés que guardar una barra invertida, una comilla, etc. (en el manual de MySQL te da la lista de caracteres especiales) habría que pasarle una barra invertida adicional antes de cada carácter especial.
Por ejemplo, para guardar una ruta C:\CARPETA\ARCHIVO.EXT habría que decirle a MySQL que lo guarde como C:\\CARPETA\\ARCHIVO.EXT; si quisieras guardar una cadena así: Mi hija es un "Sol" (que lo es, je! ) tendrías que guardar esto: Mi hija es un \"Sol\".
Te podrías hacer una pequeña función que escape todos los caracteres especiales de una cadena dada. Por ejemplo:
FUNCTION LimpiaTextoSQL
    PARAMETERS limpia_Cadena
    limpia_Cadena = STRTRAN(limpia_Cadena, "\", "\\")
    limpia_Cadena = STRTRAN(limpia_Cadena, CHR(0), "\0")
    limpia_Cadena = STRTRAN(limpia_Cadena, "'", "\´")
    limpia_Cadena = STRTRAN(limpia_Cadena, '"', '\"')
    limpia_Cadena = STRTRAN(limpia_Cadena, CHR(127), "\b")
    limpia_Cadena = STRTRAN(limpia_Cadena, CHR(10), "\n")
    limpia_Cadena = STRTRAN(limpia_Cadena, CHR(13), "\r")
    limpia_Cadena = STRTRAN(limpia_Cadena, CHR(9), "\t")
RETURN limpia_Cadena

Este ejemplo puede estar incompleto, así que habría que pulirlo. Pero esa es la idea.
Hay otra alternativa también, y mucho más sencilla, pero que se puede aplicar solamente a ciertos casos. La idea es asignar el valor de la cadena a una variable (que no sea de alcance LOCAL) y pasarle esa variable en el script SQL que ejecutás con SQLEXEC(). Te doy un ejemplo:
sCadena = "C:\CARPETA\ARCHIVO.EXT"
SQLEXEC(nIdConn, "UPDATE tabla SET ruta = ?sCadena")
Y listo. De esta forma no tenés que ni siquiera preocuparte por el tipo de datos que le pasás. Entre VFP y el driver ODBC "traducen" los valores que corresponden a la cadena ya escapada.
Otro ejemplo:
dFecha = {01/05/2010}
SQLEXEC(nIdConn, "UPDATE tabla2 SET fecha = ?dFecha")
Y también funciona.
Espero te sirva. Cualquier cosa volveme a preguntar.
Te paso un dato adicional: el manejo de cadenas en MySQL y los caracteres especiales:
http://dev.mysql.com/doc/refman/5.0/es/string-syntax.html
Suerte.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas