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