Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-10-2005
Antuan Antuan is offline
Miembro
 
Registrado: jul 2005
Ubicación: Madrid
Posts: 73
Poder: 20
Antuan Va por buen camino
Da Error al crear un indice una tabla DBF

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.
Archivos Adjuntos
Tipo de Archivo: zip amigos1.zip (5,7 KB, 24 visitas)
Responder Con Cita
  #2  
Antiguo 04-10-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.549
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
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...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 04-10-2005
Antuan Antuan is offline
Miembro
 
Registrado: jul 2005
Ubicación: Madrid
Posts: 73
Poder: 20
Antuan Va por buen camino
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
Responder Con Cita
  #4  
Antiguo 04-10-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #5  
Antiguo 04-10-2005
Antuan Antuan is offline
Miembro
 
Registrado: jul 2005
Ubicación: Madrid
Posts: 73
Poder: 20
Antuan Va por buen camino
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
Responder Con Cita
  #6  
Antiguo 04-10-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #7  
Antiguo 04-10-2005
Antuan Antuan is offline
Miembro
 
Registrado: jul 2005
Ubicación: Madrid
Posts: 73
Poder: 20
Antuan Va por buen camino
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
Responder Con Cita
  #8  
Antiguo 04-10-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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

Última edición por roman fecha: 04-10-2005 a las 22:56:30.
Responder Con Cita
  #9  
Antiguo 04-10-2005
Antuan Antuan is offline
Miembro
 
Registrado: jul 2005
Ubicación: Madrid
Posts: 73
Poder: 20
Antuan Va por buen camino
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.
Responder Con Cita
  #10  
Antiguo 04-10-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 01:11:22.


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
Copyright 1996-2007 Club Delphi