Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   Que Tipo de Campo Usar?? (https://www.clubdelphi.com/foros/showthread.php?t=18651)

MasterXP 18-02-2005 10:02:28

Que Tipo de Campo Usar??
 
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:
Código:

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ódigo:

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

Utilizar la propiedad Params de una Query
 
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:
Cita:

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:

Cita:

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

Propiedad 'Params'
 
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

Cita:

Empezado por roman
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.

Cita:

Empezado por jbaleriola
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.


La franja horaria es GMT +2. Ahora son las 18:40:50.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi