PDA

Ver la Versión Completa : Delphi7 e indices con expresiones


Troffed
23-06-2006, 18:16:53
Estoy convirtiendo una aplicación que utiliza ficheros dBase (aún) a D7 (viene de D5) y me he encontrado con un problema que no se resolver.

En un par de tablas tengo indices con expresiones del tipo "STR(ID_ART,10)+STR(ID_PROV,10)", tengo puesto que el indices es único y de expresión [ixUnique,ixExpression] y cuando creo los indices me salta una excepción diciendo "Invalid index descriptor". El mismo código en D5 si que funciona... :confused:

¿Alguien sabe algo del tema? Porque he buscado en el foro, en Google, y no aparece nada, eso me hace confirmar que posiblemente sea fallo mío, pero no lo encuentro.

PLEASE HELP ME!!! ;)

marcoszorrilla
23-06-2006, 21:43:19
Pues en un principio no veo porque no vaya a funcionar en D7, teniendo en cuenta que en ambos caso se está utilizando el BDE, tendrás el alias bien configurado para Dbase? Desde dónde creas los índices desde el DatabaseDesktop o lo haces por código?.

Un Saludo.

Troffed
28-06-2006, 13:48:00
Los indices los recreo por código, en un proceso de reindexado que llevo utilizando en D5 desde hace tiempo. No se... continuamos investigando.

Gracias.

Ing_Fajardo
28-06-2006, 15:27:58
tal vez sea que en Delphi 7 no existen las funciones STR, sino que si tu campo es numerio entero necesitas usar INTTOSTR, si es numerico flotante necesitas usar FLOATTOSTR etc..etc...

Troffed
28-06-2006, 16:14:11
Pues parece que el tema está relacionado en que no se porque diferencia entre D5 y D7 los IndexDefs, cuando llegan a mi función que reindexa han perdido la propiedad Expression, es decir, está vacía :eek: y, evidentemente, me da el susodicho error porque estoy intentando crear un índice sin expresión y sin campos... :rolleyes:

Continuaremos informando ...

Gracias.

Troffed
28-06-2006, 17:30:33
Por fin...

A ver, tenía en el código lo siguiente:



IdxList := TIndexDefs.Create(nil);
IdxList.Assign(tbl.IndexDefs);




Para guardarme los índices, porque lo que hago es crear desde cero una copia del DBF...

Pues eso en D5 funciona y en D7 no, con índices Expression... :eek: Creo que tiene algo que ver con que al asignar la propiedad Expression del TIndexDef correspondiente se limpia el Fields y viceversa, al final tengo.


IdxList := TIndexDefs.Create(nil);
for i := 0 to tbl.IndexDefs.Count - 1 do
begin
o := tbl.IndexDefs[i];
d := IdxList.AddIndexDef;
d.Name := o.Name;
d.Options := o.Options;
d.Source := o.Source;
if o.Expression <> '' then
d.Expression := o.Expression
else
d.Fields := o.Fields;
end;



Bueno... solucionado. Gracias a todos.