Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Tablas planas (https://www.clubdelphi.com/foros/forumdisplay.php?f=20)
-   -   Sigo con problemas con los indices (https://www.clubdelphi.com/foros/showthread.php?t=25895)

Antuan 06-10-2005 21:30:30

Sigo con problemas con los indices
 
1 Archivos Adjunto(s)
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

Neftali [Germán.Estévez] 07-10-2005 10:55:05

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.

Neftali [Germán.Estévez] 07-10-2005 11:04:59

Te he añadido la comprobación de que existen y enel adjunto.

Antuan 07-10-2005 21:08:16

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

marcoszorrilla 07-10-2005 22:15:02

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.

Neftali [Germán.Estévez] 10-10-2005 11:48:45

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;

Antuan 10-10-2005 21:52:11

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.


La franja horaria es GMT +2. Ahora son las 11:35:20.

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