[Lazarus-es] Crear índice secundario doble en una tabla DBase

Antonio Caballero Martínez antonio.caballero.martinez en gmail.com
Mar Ago 11 12:42:10 CEST 2009


Hola a tod en s ...

Quizás sea una pregunta de principiante, o de novel; pero no consigo 
encontrar información por ningún sitio ...

Utilizo el componente TDbf por defecto que incluye Lazarus (versión 0.9 
si no recuerdo mal del componente; y versión Daily Snapshoot de no hace 
muchos días).

Tengo una tabla DBase (*.dbf) sobre la que quiero crear un índice doble 
secundario (es decir, un índice secundario basado en DOS campos de la 
tabla). Para un índice basado en un solo campo, se tiene [sí, es lo 
mismo que en el tutorial 
http://wiki.lazarus.freepascal.org/Lazarus_Tdbf_Tutorial]:
     MyDbf.Exclusive := True;
     MyDbf.Open;
     MyDbf.AddIndex('custid', 'Id', [ixPrimary, ixUnique]);
     MyDbf.AddIndex('custname','Name', [ixCaseInsensitive]);
     MyDbf.Close;
En lo anterior, supongo que MyDbf es un TDbf1 con campos de nombre Id 
(AutoInc), Name (String 80), y Surname (String 80) ...

En el código anterior, creamos un índice único y primario para el Id de 
cliente; y análogamente uno secundario para el nombre.

Pero, supongamos que por requerimientos necesito tener separado el 
nombre y los apellidos en diferentes campos; y por lo tanto mi pregunta es:
¿Cómo puedo crear por código un índice secundario basado en los campos 
Name y Surname simultáneamente?

Para una posterior relación master-detail; puedo referirme a varios 
campos de la tabla separando los 2 campos por un punto y coma. Es decir:
     MyDbf.IndexName := 'IndiceDobleNombreyApellidos'; // este es el 
índice secundario doble anterior ...
     MyDbf.MasterSource := dsClientes;
     MyDbf.MasterFields := 'Name;Surname';

El problema, conforme he dicho antes, es cómo crear en tiempo de 
ejecución (por código), el índice basado en el nombre y los apellidos ..
¿Alguna sugerencia? ¿Alguna idea?

Muchas gracias de antemano a todos ...




More information about the Lazarus-es mailing list