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)
-   -   Da Error al crear un indice una tabla DBF (https://www.clubdelphi.com/foros/showthread.php?t=25789)

Antuan 04-10-2005 11:38:33

Da Error al crear un indice una tabla DBF
 
1 Archivos Adjunto(s)
Trato de crear un indice con una tabla AMIGOS.DBF en tiempo ejecucion con un boton y me da error diciendo que el fichero amigos.MDX no exite.
Algo estoy haciendo mal y no veo donde tengo el fallo.
Utilizo un componente Ttable en modo diseño y un boton donde tengo el codigo.
Esto esta solo en un Form.

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  Table1: TTable;
begin
  Table1 := nil;
  try
    // Abro la tabla
    Table1 := TTable.Create(nil);
    Table1.DatabaseName:= ExtractFilePath(Application.ExeName);
    Table1.TableName :='amigos.dbf';
    Table1.Name := 'Table1';
    with Table1 do begin
      AddIndex('Nombre', 'Nombre',[ixPrimary, ixUnique]);
      IndexName := 'Nombre';
      First;
      ShowMessage(FieldByName('amigos').AsString);
      IndexName := '';
      Close;
      Exclusive := True;
      Open;
      DeleteIndex('Nombre');
    end;
  except
    Table1.Free;
    raise;
  end;
  Table1.Free;
end;
La tabla tiene 3 campos "NOMBRE, APELLIDO1, APELLIDO2"
Trato de crear un fichero que se llame NOMBRE.MDX y me es imposible.
Y al mismo tiempo quiero que me cree el indice APELLIDO1.MDX y APELLIDO2.MDX.
Pongo en un zip el ejemplo por si me lo pueden corregir
Es que estoy aprendiendo y cuando lo termine he prometido subirlo al foro.
Muchas gracias.

Neftali [Germán.Estévez] 04-10-2005 12:37:04

Elimina la opción de: ixPrimary
Si revisas la ayuda de las opciones verás que dice:

//----------------------------------------------------------------------
...
ixPrimary: The index is the primary index of the table. (Not applicable to dBASE tables).
...
//----------------------------------------------------------------------

Creo que no da lugar a dudas...;)

Antuan 04-10-2005 18:24:01

Me sigue dando el mismo error
 
Me sigue dando el mismo error. File amigos.MDX no existe.
Asi que no se por donde atacarle
He dejado mi ejemplo en un zip en mi primer hilo.
Muchas gracias

roman 04-10-2005 20:17:58

He estado haciendo algunas pruebas y da la impresión de que en algún momento ya tenías creado el índice y borraste el archivo amigos.mdx. Cuando haces esto, en el archivo dbf queda la marca de que hay un índice pero el archivo no existe.

La forma en que pude arreglarlo fue colocando una componente TTable en el formulario, apuntándola a la tabla amigos.dbf. Al intentar activarla me apareció un mensaje indicando el error y me daba algunas opciones para abrir la tabla. Escogí "Detach" y asunto solucionado.

// Saludos

Antuan 04-10-2005 20:41:41

Que es el Detach?
 
El componente Table ya lo tengo puesto en el ejemplo del file zip de mi primer hilo y me dices que con el DeTach esta solucionado.
No se que es esto recuerda que soy super novato.
Si me puedes correjir mi ejemplo?
Y tambien que el fichero indice no se llame como la tabla sino por el campo que que es indexado. En este caso Nombre.mdx
Muchas gracias

roman 04-10-2005 21:08:12

El como arreglarlo ya te lo dije. Lo acabo de probar con tu archivo y sí funciona. Lo del Detach lo sabrás en el momento que hagas lo que te indiqué en mi mensaje anterior.

Lo de cambiar el nombre no creo que sea posible. Me parece que dbase guarda en un sólo archivo todos los índices y este archivo, hasta donde veo, sólo puede llamarse igual que el dbf.

// Saludos

Antuan 04-10-2005 21:50:04

Al fin lo he visto
 
Lo que pasa es que si lo borro tengo que volver de nuevo a modo diseño.
Esto no se puede hacer en modo ejecucion?
y ademas he visto que si ya esta creado me da un error que que ya exixte.
Osea que no puedo actualizar los indices atraves de un boton. Cuando yo quiera
Por lo que veo.
Mucgas gracias

roman 04-10-2005 21:53:57

Pero, ¿para qué los quieres actualizar si ya los tienes creados? Y lo de borrar el índice sí que se puede, usando DeleteIndex. Es sólo que no puedes borrarlo a mano tú mismo.

Y si por alguna razón requieres recrear el índice entonces bórralo primero y luego agrégalo nuevamente. Tú lo estás haciendo alrevés: primero lo creas y luego lo borras.

// Saludos

Antuan 04-10-2005 22:02:16

Es que yo los borro a mano
 
Entonces siempre que los borre primero y luego los cree. Tengo que hacerlo en modo diseño?
Con esto ya terminamos estos hilos.
Muchas gracias por tu paciencia.

roman 04-10-2005 22:11:07

Cita:

Empezado por Antuan
Entonces siempre que los borre primero y luego los cree. Tengo que hacerlo en modo diseño?

¡No! Lo del tiempo de diseño es sólo para arreglar el dbf en caso de que se borre el archivo mdx manualmente.

En tu aplicación simplemente agrega una rutina para borra el índice, usando DeleteIndex, y otra para crearlo. O bien una sóla que primero use DeleteIndex y luego AddIndex.

Así, desde tu aplicación ejecutándose puedes recrear el índice.

// Saludos


La franja horaria es GMT +2. Ahora son las 21:30:35.

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