PDA

Ver la Versión Completa : Compresion de campos


coso
11-08-2008, 18:50:32
Hola a todos, tengo un problema que me lleva de cabeza toda la tarde (foro, google, ...). Pongo el codigo y luego explico :


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;



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;
....


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 :confused::confused::confused:. 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.

luisgutierrezb
11-08-2008, 19:00:46
el problema esta en como creas los campos, el char llena todo con espacios aqui mejor utiliza el varchar ese si, si pones 2 solo te regresa 2

coso
11-08-2008, 19:05:57
ok lo pruebo, gracias por la respuesta

coso
11-08-2008, 19:08:04
si era eso :D muchas gracias