PDA

Ver la Versión Completa : Código "erroneo" pero que funciona


ixMike
13-03-2007, 20:59:59
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:



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... (http://en.wikipedia.org/wiki/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
Una respuesta.
End Of File... (http://en.wikipedia.org/wiki/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:

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


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
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.

ultimo registro para un DataSet es un espacio que abre llamado EOF
Gracias, ahora ya lo entiendo.

Las cosas erroneas, no funcionan. Si funciona, no es erróneo.
Bueno, igual por casualidad, o por desconocer algo (como era mi caso).