Ver Mensaje Individual
  #1  
Antiguo 11-08-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Reputación: 0
coso Va por buen camino
Compresion de campos

Hola a todos, tengo un problema que me lleva de cabeza toda la tarde (foro, google, ...). Pongo el codigo y luego explico :

Código Delphi [-]
function ConnectString(s : string) : string;
begin
     ConnectString := 'Provider=Microsoft.Jet.OLEDB.4.0;' +   // creem una conection sring standard
          'Password="";User ID=Admin;Data Source=' + s + ';' +
          'Mode=Share Deny None;Extended Properties="";' +
          'Jet OLEDB: System database="";' +
          'Jet OLEDB: Registry Path="";' +
          'Jet OLEDB: Database Password="";' +
          'Jet OLEDB: Engine Type=5;' +
          'Jet OLEDB: Database Locking Mode=1;' +
          'Jet OLEDB: Global Partial Bulk Ops=2;' +
          'Jet OLEDB: Global Bulk Transactions=1;' +
          'Jet OLEDB: New Database Password="";' +
          'Jet OLEDB: Create System Database=False;' +
          'Jet OLEDB: Encrypt Database=False;' +
          'Jet OLEDB: Don''t Copy Locale on Compact=False;' +
          'Jet OLEDB: Compact Without Replica Repair=False;' +
          'Jet OLEDB: SFP=False;';
end;

Código Delphi [-]
function Crear_taula_agenda(s : string) : boolean;
var
        q : TAdoQuery;
        c : TAdoConnection;
        r : boolean;
begin
        c := TAdoConnection.Create(nil);

        c.Connected := false;
        c.LoginPrompt := false;
        c.ConnectionString := ConnectString(s);
        c.Connected := true;

        q := TAdoQuery.Create(nil);
        q.Connection := c;

        r := false;
        try
        q.Active := false;
        q.SQL.Text := 'create table agenda('+
                      'id integer primary key, '+
                      'prioritat integer, '+
                      'fet bit, '+
                      'data date, '+
                      'ref char(10) with compression, '+
                      'treballador char(20) with compression, '+
                      'descripcio char(100) with compression, '+
                      'fei_urgencia char(10) with compression, '+
                      'fei_ref char(10) with compression, '+
                      'fei_data_entrada date, '+
                      'fei_descripcio char(100) with compression'+
                      ')';
        q.ExecSQL;
        ....
Código Delphi [-]
function Crear_base_de_dades(n : string) : boolean;
var
        db : OleVariant;
        rs : boolean;
begin
        try
        db := CreateOleObject('dao.dbengine.36');
        db := db.CreateDatabase(n,';langid=0x040a;cp=1252;country=0;');
        rs := true;
        except
        rs := false;
        end;

        if not rs then
        try
        db := CreateOleObject('ADOX.Catalog');
        db.Create('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + n+ ';');
        rs := true;
        except
        rs := false;
        end;

        if not rs then
        try
        db := CreateOleObject('Access.Application');
        db := db.NewCurrentDatabase(n);
        rs := true;
        except
        rs := false;
        end;

        Crear_base_de_dades := rs;
        db := unassigned;
end;

La cuestión es que mediante Crear_base_de_dades creo una base de datos de agenda, luego dentro de ella mediante la consulta sql creo las tablas. El problema viene que no me lo comprime en unicode, o algo parecido. Vamos, que si los campos char son de 10 y luego lleno tansolo 2 caracteres, me pone 8 espacios despues. Esto es, me hace algo asi:
si introduzco 'CAMPO' -> 'CAMPO '
por ejemplo.
Lo peor es que tampoco puedo eliminarlos por codigo: ni trim desde delphi, ni desde sql, por lo que deduzco que debe ser de alguna propiedad en el momento de crear la base de datos o la tabla . Es mas, si abro la base de datos con access, si bien me pone que tiene compresión unicode el campo de texto en concreto, los registros que ya tienen algun dato se mantienen con los espacios, aunque los cambie. No se si el 'permitir longitud cero' tiene algo que ver, no se establecerlo mediante sql.

Agradezco cualquier ayuda porque estas piedrecillas son muy, muy molestas

Lo dicho, saludos y gracias.
Responder Con Cita