Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Delphi7 e indices con expresiones (https://www.clubdelphi.com/foros/showthread.php?t=33010)

Troffed 23-06-2006 18:16:53

Delphi7 e indices con expresiones
 
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

Funciones de D5 y D7
 
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:

Código Delphi [-]

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.

Código Delphi [-]
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.


La franja horaria es GMT +2. Ahora son las 19:32:50.

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