Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-03-2007
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
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?
Responder Con Cita
  #2  
Antiguo 13-03-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 22
ArdiIIa Va por buen camino
Una respuesta.
End Of File...
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
Responder Con Cita
  #3  
Antiguo 13-03-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
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?
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #4  
Antiguo 13-03-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por ArdiIIa
Una respuesta.
End Of File...
Esa es una buena respuesta
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #5  
Antiguo 13-03-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
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.
Responder Con Cita
  #6  
Antiguo 13-03-2007
JXJ JXJ is offline
Miembro
 
Registrado: abr 2005
Posts: 2.475
Poder: 21
JXJ Va por buen camino
yo creo que es por el

Código:
 Tabla.Next;
Responder Con Cita
  #7  
Antiguo 13-03-2007
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
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?
__________________

Responder Con Cita
  #8  
Antiguo 13-03-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
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?
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #9  
Antiguo 11-04-2007
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
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).
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Necesito llamar a métodos de clases "hija" desde su clase "padre" Flecha OOP 17 20-04-2007 01:03:53
Cambiar por código la opción "uso compartido de carpetas" en opciones de carpeta JuanErasmo API de Windows 1 09-11-2006 16:47:08
Investigadores quieren llevar el "código libre" a la ciencia Sasuke_Cub Noticias 0 02-09-2005 01:20:33
no es de humor , pero .. "Mujer asesina a su novio con un iPod" gmontes Humor 0 08-06-2005 16:52:10
Leer BBDD de Access en Delphi, pero "ampliamente" Pandre Conexión con bases de datos 2 23-01-2004 14:36:56


La franja horaria es GMT +2. Ahora son las 22:31:39.


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
Copyright 1996-2007 Club Delphi