PDA

Ver la Versión Completa : Que Tipo de Campo Usar??


MasterXP
18-02-2005, 10:02:28
Hola a todos.

Tengo un peque~o problema y es el siguiente:

Que tipo de campo MySQL se debe usar para que me guarde una ruta de un archivo/imagen. Resulta que tengo un Campo tipo Varchar en mi DB MySQL llamado "FOTO".

hago un insert como este:
INSERT foto INTO mytable VALUES ('C:\MisImagenes\Imagen1.jpg')

el insert lo hace perfectamente, pero que hace que me convierte los espacios en "_" y los "\" los elimina, y el resultado en la base de datos queda como:

C:MisImagenesImagen1.jpg

Ley en la ayuda Mysql que en los tipos de campso varchar se sustituyen los espacios por '_', pero no logre ver ningun tipo de campo que me soporte guadar este tipo de datos (Rutas en mi caso).

Alguna idea?

jbaleriola
18-02-2005, 18:51:12
Hola, yo siempre utilizo la propiedad 'Params' de una Query, esto te permite introducir en tu base de datos cualquier cadena de texto.

Por ejemplo:

SQL.Add('insert into articulos'
+ ' (codigo, nombre) values('
+ IntToStr(wcodigo.asInteger)
+ ',:pnombre)');
Params.ParamByName('pnombre').asString := wnombre.Text;
ExecSQL;

wnombre en este caso es un TEdit pero puede ser cualquier otro objeto que su propiedad devuelva un String.

Espero haberte ayudado.

MasterXP
19-02-2005, 03:33:51
Has probado a insertar una rura en un campo varchar??

por que aunque lo insertes desde el mismo mysql (Sin delphi) le quita los espacios y los "/"...

ayuda please..

que tipo de campo soporta que el inserten cualkier tipo de caracteres?

saludo.

roman
19-02-2005, 04:43:59
El caracter \ en MySql es un caracter de escape por lo que debes usarlo doble \\. Por ejemplo, en lugar de insertar

'C:\Mis Imagenes\Imagen1.jpg'

insertas

'C:\\Mis Imagenes\\Imagen1.jpg'

Lo de los espacios no me queda nada claro. Que yo sepa MySql únicamente elimina los espacios finales en un campo VarChar pero no los iniciales ni intermedios y simplemente los elimina, no los sustituye por un _. En tu ejemplo del primer mensaje no veo que te haya quedado ningun _ y el único espacio que se "pierde" podría ser el de "Mis Imagenes" pero en tu ejemplo lo insertas sin espacio.

Revisa esto de los espacios para aseguratte de lo que pasa.

// Saludos

MasterXP
19-02-2005, 06:56:18
Hey Roman gracias, tienes razon en todo con un doble \ me funciona perfectamente desde la linea de comandos mysql>

ejemplo:
INSERT INTO empleados (Codigo, FOTOS) VALUES (2, 'C:\\Mis Imagenes\\06. Imagen2.Jpg');
queda muy bien.

ahora hay un pequeño problemita, como lo hago desde delphi? osea lo que tengo en Delphi es un componente Timage en conjunto con un OpenPictureDialog, y tomo la ruta del archivo con la propiedad Filename, ejemplo:


With Datamodule1.Querygeneral Do
Begin
Close;
SQL.clear;
SQL.Add('INSERT INTO Empleados (Codigo, Fotos) Values ');
SQL.Add('( '+Edit1.Text+', '+Quotedstr(OpenPictureDialog1.FileName)+')');

entonces el problema es que delphi le enviara la rura con un solo \, y deberia ser \\.

alguna solucion a este ultimo problema sobre esto?

PD: Disculpas por tantas preguntas :(

roman
19-02-2005, 07:29:16
Sustituye

OpenPictureDialog1.FileName

por

StringReplace(OpenPictureDialog1.FileName, '\', '\\', [rfReplaceAll])

StringReplace está en la unidad StrUtils.

// Saludos

jbaleriola
19-02-2005, 12:29:38
MasterXP escribió:

"Has probado a insertar una rura en un campo varchar??"

Por supuesto y funciona perfectamente.

"por que aunque lo insertes desde el mismo mysql (Sin delphi) le quita los espacios y los "/"..."

Eso es porque la propiedad 'Params' solamente funciona desde Delphi; además la ventaja de utilizar 'Params' es que vale para cualquier cadena incluyendo cualquier símbolo especial con independencia del motor de base de datos a utilizar.

Un saludo

MasterXP
19-02-2005, 19:42:44
Sustituye

OpenPictureDialog1.FileName

por

StringReplace(OpenPictureDialog1.FileName, '\', '\\', [rfReplaceAll])

StringReplace está en la unidad StrUtils.

// Saludos
Diosssss mio roman, eres un genio hombre, ya no se ni como agradecerte, Graciassssssssssssssss. Funciona perfectamente.

Eso es porque la propiedad 'Params' solamente funciona desde Delphi; además la ventaja de utilizar 'Params' es que vale para cualquier cadena incluyendo cualquier símbolo especial con independencia del motor de base de datos a utilizar.
Interesante, probare con params haber si se me hace mas facil.

Gracias Amigos.