Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-09-2012
Aurepilo Aurepilo is offline
Miembro
 
Registrado: may 2010
Posts: 18
Poder: 0
Aurepilo Va por buen camino
Como evitar los espacios blancos fantasma??

Os cuento , trabajo con ACCESS y adoquery. Creo la siguiente tabla de forma dinámica:
Código:
begin
    WITH ADOQUERY1 DO
    BEGIN
    Close;
        with SQL do
      begin
        Clear;
        Add('create table '+taula+' (');
        Add('IdFactura autoincrement,');
        Add('IdCliente STRING,');
        Add('IdEmpleado string,');
        Add('IdDocumento string,');
        Add('FechaFactura   datetime,');
        Add('CantidadTotal      currency,');
        Add('Cliente  char(30),');
        Add('Referencia  char(30),');
        Add('Conceptes  char(30),');
        Add('IVA  char(30),');
        Add('NumFactura  string,');
        Add('NumFac  int DEFAULT 1,');
        Add('Pagada     yesno,');
        Add('primary key (IdFactura))');
       end;
        try
      ExecSQL;
    except
Por alguna razón, cuando añado datos a traves de INSERT o UPDATE, estos se incrementan con un monton de espacios en blanco... eso es un problema porque si hago un SELECT filtrando los datos con WHERE nunca me encuentra el registro en cuestión porque, evidentemente, los datos no coinciden. Porqué ocurre eso? como se puede evitar?
Responder Con Cita
  #2  
Antiguo 28-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
No sé con access, pero en otros sistemas el tipo char rellena de espacios, y el tipo varchar lo "limpia".
Quiere decir que en lugar de usar, ejemplo: nombre char(30) debes usar nombre varchar(30)
Responder Con Cita
  #3  
Antiguo 28-09-2012
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por Casimiro Notevi Ver Mensaje
No sé con access, pero en otros sistemas el tipo char rellena de espacios, y el tipo varchar lo "limpia".
Quiere decir que en lugar de usar, ejemplo: nombre char(30) debes usar nombre varchar(30)
No es que lo limpie sino que varchar es de tamaño variable, ajustando el campo según el contenido del texto. Cuando uno declara al campo varchar le está indicando el tamaño máximo para el campo.
De este modo, por ejemplo ante un campo varchar(30) si para un registro guardamos un texto de 10 caracteres, el tamaño del campo para éste será de 10 y no se desperdicia memoria.

Por su parte el char reserva directamente ese tamaño de memoria de modo que si guardamos contenido de menos caracteres, se llena totalmente el texto de "espacios" hasta la totalidad del campo.

Es mejor hacer esta aclaración antes de que llamar "limpiar" ¿no crees?

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #4  
Antiguo 28-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Tienes toda la razón, además de que sé perfectamente que es así, tal y como has explicado.
Como se dice habitualmente: se me ha ido la pinza
Responder Con Cita
  #5  
Antiguo 28-09-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
De todas formas, este tipo de cosas suceden con Access pero no con otros motores. Aunque un tipo char(30) ocupe un espacio fijo de 30 caracteres en la base de datos, esto no quiere decir que el valor devuelto enn una consulta SQL tenga la cadena rellena de espacios.

// Saludos
Responder Con Cita
  #6  
Antiguo 29-09-2012
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Estas en lo cierto Roman. Parece que solo Access hace eso, copiado del viejo estandar de xBASE donde cada registro debía tener el mismo número de bytes, por lo que campos tipo char que ocuparan menos del tamaño declarado, en efecto se rellenaban con espacios para cumplir con la regla. Ah que tiempos aquellos...
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como eliminar espacios en el centro de una cadena? JoAnCa Varios 4 10-06-2010 22:53:57
Porqué los blancos tienen el culo negro. Lord Delfos Humor 1 01-02-2010 08:48:10
Función que elimine caracteres blancos!!! Sole_l Varios 2 01-04-2009 09:16:46
la vibracion fantasma o como el celular nos afecta gmontes La Taberna 6 22-06-2007 18:22:18
blancos por el final empty Varios 2 11-07-2004 18:21:07


La franja horaria es GMT +2. Ahora son las 06:59:54.


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
Copyright 1996-2007 Club Delphi