PDA

Ver la Versión Completa : Eliminar Espacios en Blanco


eudy.net
08-12-2007, 05:44:08
Hola a todos,

Tengo una Base de Datos en SQL que me almacena la dirección de una imagen, de modo que la base de datos no se haga tan pesada.
Entonces lo que hago es guardar el FileName de la imagen, y luego cuando vaya a consultar la imagen, se cargue en un Timage sin necesidad de guardarse en la base de datos. (Tal vez mi explicacion fue un poco redundante, pero es mejor para que entiendan bien mi inquietud :D)

Mi problema es el siguiente: a la hora de guardar el filename de la imagen en la base de datos (se guarda en un campo que abarca hasta 100 caracteres), siempre quedan espacios en blanco, y a la hora de cargar el filename en la Timage me da el error de que no reconoce la extension de la imagen (porque siempre despues del tipo de imagen hay espacios, ejemplo: 'c:delphi.jpg ' esos dos espacios que quedaron despues del .jpg causan que delphi no pueda leer la imagen)

Existe alguna forma, truco o método de modo que pueda eliminar esos espacios en blanco, o en SQL SERVER 2000 (el que uso) puedo hacer campos que se ajusten al tamaño del registro????

Cualquier ayuda es agradecida

Se despide,

eudy.net

dec
08-12-2007, 05:50:44
Hola,

En MySQL, desde luego, se cuenta con el tipo "VARCHAR", que adapta su tamaño a la cadena que se guarde, incluso si hay algún límite (que tal vez por defecto ya lo haya). Quiero decir, si tengo un "VARCHAR" y guardo esto:


C:\imagen.jpg


Eso será lo que obtenga. Sólo si yo guardo espacios en blanco obtendré espacios en blanco, no sé si me explico.

Tal vez a la hora de guardar los datos debas aplicar alguna función como "Trim()" que elimine los espacios en blanco al comienzo y al final de la cadena que vas a guardar.

Y, en todo caso, siempre puedes recuperar el valor usando una función "Trim()" (si es que existe en SQL Server, en MySQL creo que sí que existe, casi seguro que así sea) o bien utilizar la función "Trim()" de Delphi antes de tratar averiguar si la imagen en cuestión existe o puedes cargarla y el "TImage".

No sé. Se me hace raro que tú no guardes espacios en blanco y esto se añadan por el motor de bases de datos... entiendo que pueda querer ajustarse a cierto tamaño un determinado campo (por cierto, ¿de qué tipo hablamos?), pero, no entiendo que se rellene con espacios en blanco, porque, estos no son caracteres "nulos", sino que pueden tener un significado claro y práctico... como puedes comprobar...

eudy.net
08-12-2007, 19:56:18
Oye dec Muchisimas Gracias :D
Usé la función Trim de Delphi y me funcionó bastante bien
Lo que pasaba era que SQL me aumentaba la longitud del registro(hasta los 100 caracteres) añandiendoles espacios en blanco, no sé porque pero lo hacía.

Se despide,

eudy.net

jachguate
08-12-2007, 20:12:35
Lo que pasaba era que SQL me aumentaba la longitud del registro(hasta los 100 caracteres) añandiendoles espacios en blanco, no sé porque pero lo hacía.

¡Para cumplir con el estándar!

Porque has definido tu campo como tipo char(100) (o un equivalente en tu motor) y no como varchar(100). Ya se ha mencionado antes en este hilo.

Al hacer eso, le indicás al motor que querés que siempre te retorne cadenas de longitud fija. Para lograrlo, el motor rellenará con espacios en blanco a la derecha la cadena original... algunos de hecho, lo hacen al almacenar el dato, otros, como firebird, lo hacen al recuperarlo.

Hasta luego.

;)

Gabo
09-12-2007, 10:34:27
Para lograrlo, el motor rellenará con espacios en blanco a la derecha la cadena original... algunos de hecho, lo hacen al almacenar el dato, otros, como firebird, lo hacen al recuperarlo.


Esto no lo sabía, supongo que lo hace para ahorrar espacio, ¿o no?

Punto para Firebird. ;)

jachguate
10-12-2007, 01:54:02
Esto no lo sabía, supongo que lo hace para ahorrar espacio, ¿o no?

Punto para Firebird. ;)
Efectivamente, de hecho, según recuerdo haber leído, el encargado de ponerle dichos espacios, es el cliente, por lo que tampoco significan carga extra para la red.

Hasta luego.

;)

maeyanes
10-12-2007, 06:30:58
Punto para Firebird. ;)

Y para Interbase... digo, hay que ser justos... :)

wascar2003
15-01-2008, 18:03:49
Thanks Tenia Problemas Al Consultar El Campo De Un Registro Ya Que Este Aunque Yo Le Decia En Delphi Que Me Quitara Los Espacios Con Un Trim Lo Guardaba Con Los Espacios En El Sql. Lo Que Hice Fue Al Llamarlo Usar El Trim Tambien. Ya Veo Que No Necesito El Trim Al Mandar Al Guardar Sino Al Consultar.

egostar
15-01-2008, 18:22:08
Thanks Tenia Problemas Al Consultar El Campo De Un Registro Ya Que Este Aunque Yo Le Decia En Delphi Que Me Quitara Los Espacios Con Un Trim Lo Guardaba Con Los Espacios En El Sql. Lo Que Hice Fue Al Llamarlo Usar El Trim Tambien. Ya Veo Que No Necesito El Trim Al Mandar Al Guardar Sino Al Consultar.

[OFF TOPIC]

Hola wascar2003, te puedo preguntar si no te es dificil escribir como escribes :confused:, al leerlo mi mente me hizo tartamudear (Corrijo, detenerme a cada palabra), no me imagino intertar escribir así.....:eek:

[/OFF TOPIC]

Salud OS

maeyanes
15-01-2008, 18:23:17
Hola...

wascar2003, veo que eres relativamente nuevo en estos foros... y me imagino que ya te habrán remitido a la Guía de Estilo (http://www.clubdelphi.com/foros/guiaestilo.php) de estos foros. También me gustaría que leyeras esta otra Guía de Estilo (http://www.clubdelphi.com/foros/showthread.php?t=26446).


Saludos...

jachguate
16-01-2008, 06:23:18
Veo Que No Necesito El Trim Al Mandar Al Guardar Sino Al Consultar.

O bien declarar el campo como varchar, pues si realmente no necesitas los espacios, ¿para qué declararlo como char?

Hasta luego.

;)

wascar2003
17-01-2008, 14:19:30
Gracias Por Los Consejos. En Realidad Soy Nuevo En Los Foros. Con Respecto A Declarar Los Campos Varchar Y No Char Los Declaro Char Porque Me Han Dicho Que El Tipo Varchar Puede Llegar A Dar Problemas Luego Al Consultar. Gracias A Todos Y Espero Mejorar Pronto. Muchos Saludos. :)

Lepe
17-01-2008, 15:53:16
[OFF TOPIC]

Hola wascar2003, te puedo preguntar si no te es dificil escribir como escribes :confused:, al leerlo mi mente me hizo tartamudear (Corrijo, detenerme a cada palabra), no me imagino intertar escribir así.....:eek:

[/OFF TOPIC]

Salud OS

Por favor egostar, no se trata de dificultad, se trata de cumplir el estandard Camel case :p.

Saludos

maeyanes
17-01-2008, 15:56:41
Al menos está separando las palabras... no me imagino:

GraciasPorLosConsejos. EnRealidadSoyNuevoEnLosForos. ConRespectoADeclararLosCamposVarcharYNoCharLosDeclaroCharPorqueMeHanDichoQueElTipoVarcharPuedeLlegar ADarProblemasLuegoAlConsultar. GraciasATodosYEsperoMejorarPronto. MuchosSaludos.

:D

Saludos...

ContraVeneno
17-01-2008, 16:13:14
pues más bien diles a esos que te dijeron, que te digan que problemas, cuando y como pasan esos problemas. Yo no me he topado con ninguno.

Y los tipos de datos están todos por alguna razón, no nada más por que sí. En tu caso es mil veces mejor utilizar un tipo varchar... (en todo caso, podrías utilizar la función RTRIM de SQL Server). Es como usar un campo "float" para guardar datos monetarios, en ese caso te daría problemas con los redondeos y para evitar eso, está el tipo de dato "money".

En fin, por favor, ya no escribas así que nos haces tartamudear a todos. (¿De verdad te vas deteniendo en cada palabra para poner una mayúscula?)

maeyanes
17-01-2008, 16:18:26
De seguro escribe todo en MS Word en minúsculas, luego selecciona todo y hace [Shift][F3] [Shift][F3] [Shift][F3]... :p


Saludos...

jachguate
17-01-2008, 18:33:12
Con Respecto A Declarar Los Campos Varchar Y No Char Los Declaro Char Porque Me Han Dicho Que El Tipo Varchar Puede Llegar A Dar Problemas Luego Al Consultar.

Pues quien te ha dicho, desde mi punto de vista, no tiene idea de lo que habla. Quizás él o ella se topó con algún problema bajo ciertas circunstancias, pero generalizar de esa manera, ¡vamos!, ¡no tiene sentido!

Puedo garantizar que en las bases de datos que conozco el tipo varchar funciona decentemente bajo el comportamiento que puede esperarse de él.

Hasta luego.

;)

peccatum
09-06-2008, 17:34:52
TRIM: No me funciona.
TrimRight y TrimLeft: Si andan.

¿y como se explica eso?

un saludo.

ContraVeneno
09-06-2008, 18:00:47
TRIM: No me funciona.
TrimRight y TrimLeft: Si andan.

¿y como se explica eso?

un saludo.

¿y porque no te funciona?
¿lo estas usando correctamente?
¿te marca un error?

Solo espero a que tengas más experiencia en encontrar errores, para que te des cuenta cuan irritante es escuchar "no funciona" y no escuchar el porque. :D