Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Código "erroneo" pero que funciona (https://www.clubdelphi.com/foros/showthread.php?t=41358)

ixMike 13-03-2007 20:59:59

Código "erroneo" pero que funciona
 
Hola a todos.

Tengo una pequeña duda desde hace algún tiempo, que no resulta ningún problema, pero que me extraña demasiado y ya he discutido antes.

De todos es conocido el siguiente código:

Código Delphi [-]
 
Tabla.First;
While not Tabla.EOF do
  begin
  //Hacer cosas con los registros
  Tabla.Next;
  end;

Sirve (y funciona a la perfección) para recorrer todos los registros de una tabla y hacer con ellos lo que quieras.

Pero ahora analicemos a fondo esas líneas.

Tabla.First;

Hasta aquí bien. Situamos a la tabla en su primer registro.
Después comprueba si estamos en el último. Como mi tabla hipotética tiene 100.000 registros, pues va a ser que no, así que analiza el 1º registro y cuando acaba pasa al segundo con Tabla.Next;
Bien, vuelve a hacer la comprobación. Seguimos sin estar en el último registro, por lo que analiza el segundo y pasa al tercero, y así sucesivamente hasta el 99.998. Lo analiza y como no es el último pasa al 99.999. Lo analiza y como no es el última pasa al 100.000. Hace la comprobación y... ¡ES EL ÚLTIMO! Por lo que el último registro (con este código) jamás sería analizado. Pero todos los que lo hemos usado saben que funciona a la perfección.

¿Alguien sabe por qué sucede esto?

ArdiIIa 13-03-2007 21:13:35

Una respuesta.
End Of File...

jhonny 13-03-2007 21:14:32

Bueno, lo que sucede es que en realidad el ultimo registro para un DataSet no es en tu caso el Numero 100.000, el ultimo registro para un DataSet es un espacio que abre llamado EOF, ¿Haz notado alguna vez que si usas un TNavigator y le haces siguiente hasta el final no se inhabilitan los botones si no hasta que le das un click mas en el ultimo registro?

jhonny 13-03-2007 21:15:41

Cita:

Empezado por ArdiIIa
Una respuesta.
End Of File...

Esa es una buena respuesta ;)

seoane 13-03-2007 21:17:54

Creo que no has entendido el funcionamiento de Eof. Si revisas la ayuda:
Cita:

Empezado por Ayuda de Delphi
Eof is true when an application:

Opens an empty dataset.

Calls a dataset's Last method. (Unless it is a unidirectional dataset)

Call a dataset's Next method, and the method fails because the current record is already the last row in the dataset.

Calls SetRange on an empty range or dataset.

Eof is false in all other cases.

Si revisas con atención la parte en negrita, veras que Eof devuelve TRUE si se llama al método Next cuando ya se esta en el ultimo registro. Por lo tanto, el ultimo registro si que se procesa.

JXJ 13-03-2007 21:18:03

yo creo que es por el

Código:

Tabla.Next;

ContraVeneno 13-03-2007 21:30:44

Yo no entendí que era lo que estaba mal

creo mas bien que fue una leve equivocación al comprender el funcionamiento de dicho procedimiento.

Las cosas erroneas, no funcionan. Si funciona, no es erróneo.

O lo que es lo mismo: co-echo es un hecho contra echo al que no hay derecho porque que es esho?

jhonny 13-03-2007 21:42:45

Cita:

Empezado por ContraVeneno
co-echo es un hecho contra echo al que no hay derecho porque que es esho?

Que habra querido decir con esho? :D

ixMike 11-04-2007 18:57:08

Muchísimas gracias a todos. Ya lo entiendo.

Cita:

Empezado por jhonny
ultimo registro para un DataSet es un espacio que abre llamado EOF

Gracias, ahora ya lo entiendo.

Cita:

Empezado por ContraVeneno
Las cosas erroneas, no funcionan. Si funciona, no es erróneo.

Bueno, igual por casualidad, o por desconocer algo (como era mi caso).


La franja horaria es GMT +2. Ahora son las 16:13: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