• Domingo 22 de Diciembre de 2024, 18:53

Autor Tema:  Posición De Un Registro  (Leído 2761 veces)

Anonymous

  • Visitante
Posición De Un Registro
« en: Miércoles 10 de Noviembre de 2004, 02:56 »
0
Cómo puedo determinar la posición de un registro en la tabla, sabiendo que estoy utilizando TTable para acceder a la base de datos. Algo como:  Se encuentra en la posición 3 de 17 registros

Ayla

  • Miembro activo
  • **
  • Mensajes: 57
    • Ver Perfil
    • http://www.clubdevelopers.com/foros/index.php
Re: Posición De Un Registro
« Respuesta #1 en: Miércoles 10 de Noviembre de 2004, 12:21 »
0
Una solución un poco cutre, a mi ver .... :rolleyes: . Es recorrer la tabla con un while hasta que encuentres la posición correcta. Ej:
Código: Text
  1.  
  2.  i := 1;
  3.  table.First;
  4.  while i < 3 do begin
  5.     table.Next;
  6.     i=i+1;
  7.  end;
  8.  
  9.  

  Supongo que el TTable lo tienes asociado a un TDataSet, así que mírate en la ayuda la propiedad BookMark del DataSet. No recuerdo bien pero creo que mediante esa propiedad podías colocarte en una posición determinada de la tabla. A ver si tengo un hueco y te lo confirmo.

  Espero que te sirva.  :hola:
Y que mi luz te acompañe
pues la vida es un jardín
donde lo bueno y lo malo
se confunde y es humano
no siempre saber elegir.

Ayla Blog

Anonymous

  • Visitante
Re: Posición De Un Registro
« Respuesta #2 en: Miércoles 10 de Noviembre de 2004, 18:50 »
0
Que tal Ayla, gracias por la respuesta, pero lo que yo necesito es la posición absoluta del registro actual, algo que en Visual Basic sería como:
Código: Text
  1.  
  2. Dim posicion as Integer
  3. posicion = DataEnvironment1.rsCommand1.AbsolutePosition
  4. label1 = "posicion " + Str(posicion) + " de ... registros"
  5.  
  6.  
Entonces en n tendría la posición absoluta del registro actual para ponerla en una label y saber en que posición me encuentro en el momento, yo ya he probado con recorrer toda la tabla así:

Código: Text
  1.  
  2. var
  3.   buscamos:String;
  4.   posicion:Integer;
  5. begin
  6.   buscamos := DBEdit1.Text;
  7.   posicion := 1;
  8.   Table1.First;
  9.   while (DBEdit1.Text <> buscamos) do begin
  10.     posicion := posicion + 1;
  11.           Table1.Next;
  12.      end;
  13.   Label1.Caption := 'Estamos en la posición ' + IntToStr(posicion) + ' de ' + IntToStr(Table1.REcordCount);
  14. end;
  15.  
  16.  
Pero el gran problema es que la base de datos es una encuesta y no hay un campo que sirva para diferenciar un registro de otro, mejor dicho pueden haber varios registros con la misma información. He pensado en ponerle un campo de autoincremento para diferenciar un registro de otro y poder recorrer la tabla buscando el valor de este campo con el codigo anterior y determinar la posición actual. Pero son demasiados registros para estar recorriendolos cada momento. Bueno, ... la pregunta es la siguiente. Hay alguna forma de determinar la posición absoluta del registro actual?.

makio

  • Nuevo Miembro
  • *
  • Mensajes: 18
    • Ver Perfil
Re: Posición De Un Registro
« Respuesta #3 en: Miércoles 10 de Noviembre de 2004, 23:33 »
0
Espero quen esto te ayude para lo que quieres hacer.

La propiedad RecNO, te devuelve en que registro te encuentras.
El ejemplo que te pongo hace lo siguiente: primero busco en mi tabla (propiedad Locate) supongamos clientes al que tenga el nombre que empieze por FER me pondra el el primer registro que encuentre con esta especificacion, al tener localizado al cliente, para saber en que numero de registro se encuentra se utiliza la función RecNO y listo.

procedure TForm1.Button1Click(Sender: TObject);
var
 regAct:integer;
begin
table1.Locate('nombre','FER',[loPartialKey]);
regAct:=table1.RecNo;
end;

Espero haberte resuelto tu duda  :D

Anonymous

  • Visitante
Re: Posición De Un Registro
« Respuesta #4 en: Jueves 11 de Noviembre de 2004, 01:08 »
0
Gracias por el dato makio, no se me había ocurrido, justo lo que necesitaba.