Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Tablas planas (https://www.clubdelphi.com/foros/forumdisplay.php?f=20)
-   -   No puedo crear Indice Secundario (https://www.clubdelphi.com/foros/showthread.php?t=73665)

jhonalone 08-05-2011 21:57:35

No puedo crear Indice Secundario
 
Hola, compañeros.
Os agradecería un poco de ayuda.
Estoy intentando crear un índice secundario en una Tabla, para utilizar el método Table.SetRange([fecha1], [fecha2]);

Bien. Tengo una tabla detail con un campo "Fech"

En el Object Inspector, selecciono la propiedad "IndexDefs". Ya existe un índice primario. Pulso en el boton Add New, se abre el selector de propiedades, le pongo un nombre, selecciono el campo "Fech" y lo cierro.

Vuelvo a las propiedades de la tabla, pulso en la propiedad "IndexName" y no me aparece en el desplegable.

Vuelvo a "IndexDefs" y, para mi sorpresa, ha desaparecido el nuevo índice creado.

Lo he intentado varias veces y siempre igual. He mirado en el fichero .dfm y aparece el índice. Pero cuando vuelvo de nuevo, ya lo ha quitado.

Queda claro que no soy nada experto en tablas, pero esto me sobrepasa en mucho.

Si alguien puede echarme una mano... GRACIAS.

marcoszorrilla 09-05-2011 06:44:22

Dinos que tipo de tablas estás utilizando, para poderte ayudar y con que utilidad estás creando el índice.

Un Saludo.

jhonalone 09-05-2011 16:46:50

Bien, gracias Marcos.
Las tablas son Paradox y la utilidad es el IDE de Delphi7.
El índice primario que tengo creado, ya incluye el campo "Fech" con la hora y el número de cliente.
Un Saludo.

newtron 09-05-2011 17:09:31

¿No usas el database desktop?

jhonalone 09-05-2011 17:55:43

Si, Newtron. Es fácil crear aquí el índice Secundario.

Pero si no tengo entendido mal, esto sirve para una tabla ya creada.

Lo que yo pretendo es crear la tabla con sus índices desde el propio programa. No se si me explico, porque no comprendo muy bien el funcionamiento de las tablas, todavía.

Gracias por tu sugerencia.

newtron 09-05-2011 18:47:27

Cita:

Empezado por jhonalone (Mensaje 399437)
...esto sirve para una tabla ya creada.

Negativo, con el database desktop puedes crear o modificar tablas ya creadas, de todas formas lo ideal es hacer tú mismo la gestión de tus tablas desde la aplicación.

Te he preparado un ejemplo de como se crea una tabla con un índice primario y otro secundario, espero que te sirva.

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
with TTable.create(self) do
begin
  DatabaseName := 'C:\TEMP';
  TableName := 'Clientes';
  TableType := ttParadox;
  with FieldDefs do begin
    Add('CODIGO', ftInteger, 0, True);
    Add('FECHA1', ftDate, 0, False);
    Add('FECHA2', ftDate, 0, False);
  end;
  IndexDefs.Add('Primario','ID', [ixPrimary, ixUnique]);
  IndexDefs.Add('Secundario','FECHA1;FECHA2', []);
  CreateTable;
end;

Recuerda que tienes que añadir al "uses" del formulario las unidades "dbtables" y "db".

Saludos

jhonalone 09-05-2011 19:59:43

Gracias Newtron por tu esfuerzo y tu interés en ayudarme.

La idea es buena y te lo agradezco.

Ten en cuenta, que ya tengo dos TTable declaradas en la fase de diseño, con sus respectivos TDatabase, con sus respectivos campos e índices definidos, conectadas Master/Detail y con varias instrucciones y acciones sobre ellas distribuídas en varios formularios.

El programa comienza con un sencillo:

Código Delphi [-]
     
     if not FileExists('Clien2.DB') // si no está la base2
     then begin  // Creamos todas 
          Fclien.database1.Session.NetFileDir:=DirActual;
          FClien.ActosDB.DatabaseName:=DirActual;
          FClien.ActosDB.CreateTable;
          FClien.ClienDB.DatabaseName:=DirActual;
          FClien.ClienDB.CreateTable;
          end;


Comprende que hacer manualmente la definición de las bases es lo último que desearía tener que hacer.
¡Con lo sencillo que sería que el IDE me aceptara la definición del nuevo índice...!

Si no tengo más remedio tendré que utilizar el recurso que me aconsejas, pero entenderás que primero tengo que agotar los caminos más sencillos.

Gracias, de todos modos.
Un Saludo.

marcoszorrilla 09-05-2011 21:47:56

Bueno, con tablas Paradox, a parte del código que ya te indican lo más sencillo es utilizar el DataBaseDesktop, abres la tabla le añades el índice secundario y arreglado.

Nota:Es obligatorio tener uno primario.

Un Saludo.

jhonalone 10-05-2011 17:10:32

Gracias por tu ayuda e interés, Marcos.

Acabo de conseguir crear la tabla con sus dos indices, el primario, (que bien dices es obligatorio), y el secundario con la fecha.

Probando y probando, se me ocurrió borrar la tabla anterior y el PDOXUSRS.NET y creo que este es el motivo por el que me ha dejado crear el índice en el Object Inspector en la pestaña correspondiente a la propiedad IndexDefs.

Lo dejo aquí por si alguien tuviera el mismo problema que yo.

Saludos.

Micho Takura 11-12-2011 09:20:53

Tampoco
 
Lamento malanoticiar que borrar el PDOXUSRS.NET no es la solución, al menos para mi caso, pero vale la pena internarlo. El asunto es que tampoco funciona con las tablas de ejemplo que trae Delphi (DBDemo), por lo que puede ser:
  • Uso el Windows bajo un usuario sin derechos de administración.
  • Una incorrecta instalación del Delphi.

Si alguien sabe por qué no se puede crear un índice secundario en una tabla Paradox, agradecería la ayuda.

jhonalone 31-12-2011 19:07:16

Hola Micho.

¿Has probado a borrar las dos cosas: el PDOXUSRS.NET y todos los ficheros de la tabla que tienes en el disco? " MiTabla.* " (Aunque estén vacíos) y crear los índices antes de crear la tabla.

Un saludo.


La franja horaria es GMT +2. Ahora son las 02:56: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