Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Tablas planas
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-10-2005
Antuan Antuan is offline
Miembro
 
Registrado: jul 2005
Ubicación: Madrid
Posts: 73
Poder: 13
Antuan Va por buen camino
Sigo con problemas con los indices

Envio el ejemplo por si alguien me lo puede corregir yo me siento incapaz por ser un novato.
Ya me fucnciona pero me genera la base de nuevo y me borra los datos con lo cual he intentado eliminar la parte que genera los campos y entonces no me genera los indices.
De la manera que lo tengo. Me genera solo un indice si le dejo los 3 me da error y no me lo genera.
Solo quiero que me cree los 3 indices y no me genere la base de datos para que no me machaque los datos.
Os agradezco mucho vuestra ayuda.
Muchas gracias
Archivos Adjuntos
Tipo de Archivo: zip prueba.zip (3,4 KB, 25 visitas)
Responder Con Cita
  #2  
Antiguo 07-10-2005
Avatar de Neftali
Neftali Neftali is offline
-Germán Estévez-
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 15.356
Poder: 10
Neftali Va camino a la famaNeftali Va camino a la fama
Vamos a ver. ëste es el texto que tú tienes:

Código Delphi [-]
  
  procedure TForm1.Button1Click(Sender: TObject);
  var
    Table1 : TTable;
  begin
    { Criar arquivos }
  Table1 := TTable.create(Application);
    { Cria arquivo }
  with Table1 do
     begin
       Active := False;
       DatabaseName := 'C:\prueba';
       TableName := 'amigos.dbf';
       TableType := ttdBASE;
        with FieldDefs do
           begin
             Clear;
            Add('Nombre', ftString, 20, False);        // que puedo hacer
            Add('Apellido1', ftString, 20, False);     // para eliminar
            Add('Apellido2', ftString, 20, False);     // estas 3 lineas y que funcione
         end;
      CreateTable;
      AddIndex('indice1', 'Nombre', [ixExpression]);
  //    AddIndex('indice2', 'Apeddido1', [ixExpression]);  y dejar estas
  //    AddIndex('Indice3', 'Apellido2', [ixExpression]);  dos lineas
  // lo he intentado muchas veces y no me finciona
  // pero segun esta si funcioan pero tengo que quitar esas 3 lineas para que no me
  // elimine los datos de la tabla y dejar las dos de abajo para que me cree 3 indices.
   end;
  end;

Algunas cosillas:
(1) Si eliminas los campos y los vuelves a crear el logico que pierdas los datos. Si quieres crear índices, ¿porqué eliminas los campos?
(2) Algo similar pasará (supongo si haces el CreateTable)
(3) Al crear el segundo campo estás utilizando el nombre de campo 'Apellido2', que seguro que da error ya que el campo se llama: Apellido (eso debe ser un despiste).
(4) Puesto que ya tienes un componente visual llamado Table1, no hace falta que lo definas y que lo crees de nuevo.
(5) Por último y como recomendación, siempre que se generen errores, por favor, descríbelos detalladamentre (pon el texto exacto), eso nos puede dar una idea de lo que está pasando.

Utiliza éste código:

Código Delphi [-]
  procedure TForm1.Button1Click(Sender: TObject);
begin
    with Table1 do begin
      Active := False;
      DatabaseName := 'C:\temp\prueba';
      TableName := 'amigos.dbf';
      TableType := ttdBASE;
      // Crear los tres indices
      AddIndex('indice1', 'Nombre', [ixExpression]);
      AddIndex('indice2', 'Apellido1', [ixExpression]);
      AddIndex('Indice3', 'Apellido2', [ixExpression]);
   end;
  end;

Si cuando se ejecute abres la BD con el DataBase desktop, verás que tienes los tres indices creados correctamente.
__________________
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 07-10-2005
Avatar de Neftali
Neftali Neftali is offline
-Germán Estévez-
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 15.356
Poder: 10
Neftali Va camino a la famaNeftali Va camino a la fama
Te he añadido la comprobación de que existen y enel adjunto.
__________________
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.

Última edición por Neftali fecha: 30-05-2007 a las 15:17:39.
Responder Con Cita
  #4  
Antiguo 07-10-2005
Antuan Antuan is offline
Miembro
 
Registrado: jul 2005
Ubicación: Madrid
Posts: 73
Poder: 13
Antuan Va por buen camino
Muchas gracias

Muchas gracias por tu correcion este codigo lo pondre en un boton y de vez en cuando indexare de nuevo los indices.
Por cierto el ejemplo que me envias me da error y no puedo ejecutarlo.
Salen como dos botones al ejecutarlo y sin embargo en tiempo diseño solo hay un boton y el codigo es el mismo que yo te envien.
Es algo muy raro.
De todas formas muchas gracias
Responder Con Cita
  #5  
Antiguo 07-10-2005
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Código Delphi [-]
 procedure TForm1.Button3Click(Sender: TObject);
 begin
 table1.DeleteIndex('Indice1');
 table1.DeleteIndex('Indice2');
 table1.DeleteIndex('Indice3');
 end;

Pon otro botón con este código para empezar primero eliminando los índices y verás como te funciona correctamente.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #6  
Antiguo 10-10-2005
Avatar de Neftali
Neftali Neftali is offline
-Germán Estévez-
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 15.356
Poder: 10
Neftali Va camino a la famaNeftali Va camino a la fama
Cita:
Empezado por Antuan
....Por cierto el ejemplo que me envias me da error y no puedo ejecutarlo. Salen como dos botones al ejecutarlo y sin embargo en tiempo diseño solo hay un boton y el codigo es el mismo que yo te envien.
Revisa las Units que estás cogiendo, he bajado el ejemplo que yo mismo subí y lo compilo sin problemas en Delphi 6; Además las Units están correctas.
Hay dos botones y un ListBox; El código de ambos botones es el siguiente:

Código Delphi [-]
 procedure TForm1.Button1Click(Sender: TObject);
 begin
   { Crea arquivo }
   with Table1 do begin
     Active := False;
     DatabaseName := 'C:\temp\prueba';
     TableName := 'amigos.dbf';
     TableType := ttdBASE;
     // Crear los tres indices
     AddIndex('indice1', 'Nombre', [ixExpression]);
     AddIndex('indice2', 'Apellido1', [ixExpression]);
     AddIndex('Indice3', 'Apellido2', [ixExpression]);
  end;
 
 end;
 
 procedure TForm1.Button2Click(Sender: TObject);
 var
   i:Integer;
   iDef:TIndexDef;
 begin
 
   with Table1 do begin
     Active := False;
     DatabaseName := 'C:\temp\prueba';
     TableName := 'amigos.dbf';
     TableType := ttdBASE;
   end;
 
   // Referescar info.
   Table1.IndexDefs.Update;
   // Recorrer los índices
   for i := 0 to (Table1.IndexDefs.Count - 1) do begin
     iDef := Table1.IndexDefs.Items[i];
     // Nombre
     ListBox1.Items.Add('Nombre: ' + iDef.Name);
     // Campos
     ListBox1.Items.Add('   Campos: ' + iDef.Fields);
   end;
 
 end;
__________________
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
  #7  
Antiguo 10-10-2005
Antuan Antuan is offline
Miembro
 
Registrado: jul 2005
Ubicación: Madrid
Posts: 73
Poder: 13
Antuan Va por buen camino
Muchisimas gracias

Muchas gracias por los ejemplos. Esto me ha ayudado bastante a comprender el manejo de los indices.
Lo que siento es que como son bases antiguas. No disponer de informacion acerca del manejo de este tipo de bases.
Ahora ya se utilizan otro tipo de bases y la documentacion que se encuientra es de estas bases mas modernas y no de las de tipo DBF.
Muchas gracias.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 15:07:38.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi