Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > Lazarus, FreePascal, Kylix, etc.
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-11-2011
jasmad jasmad is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 75
Poder: 13
jasmad Va por buen camino
Problema out of bounds TObjectList con count mayor a cero

Buenas,

En este momento me encuentro experimentando con las TObjectList, ya que estas son muy simples de usar para alguien que no sabe trabajar con punteros(como yo), todo iva excelente, cuando creo la lista
Código Delphi [-]
lista := TObjectList.Create(true)

y empiezo añadir elementos
Código Delphi [-]
lista.Add(Empleado)

, inclusive cuando hago esto
Código Delphi [-]
tempEmpleado := (lista.Extract(lista[0]) as TEmpleado);

todo bien. Pero el item siguiente me genera error
Código Delphi [-]
tempEmpleado := (lista.Extract(lista[1]) as TEmpleado);

con la excepcion de out of bounds indicando que el elemento en el index 1 no existe cuando
Código Delphi [-]
ShowMessage(intttostr(lista.Count));

me muestra que es igual a tres. No se si esque estoy trabajando mal el list.

Gracias por la ayuda brindada

Última edición por ecfisa fecha: 21-11-2011 a las 22:04:58.
Responder Con Cita
  #2  
Antiguo 22-11-2011
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Si sólo quieres acceder al ítem utiliza:

Código Delphi [-]
  tempEmpleado := (lista.Items[0] as TEmpleado);

Piensa que con el Extract, además de acceder al elemento lo eliminas de las lista, por tanto los índices cambian (se decrementan).

Si utilizas por ejemplo un for para recorrer la lista y dentro de él un Extract, fallará el recorrido, a no ser que lo hagas en orden inverso.
¿Puedes poner el código completo que utilizas?
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 22-11-2011
jasmad jasmad is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 75
Poder: 13
jasmad Va por buen camino
gracias neftali el problema es el mismo que menciona, extraer saca el objeto inmediatamente y mueve los otros
Código Delphi [-]
//Esto me daba error porque se restan elementos 
 for i:=0 to lista.Count-1 do begin 
      tempEmpleado := (lista.Extract(lista[1]) as TEmpleado); 
      showMessage(inttostr(lista.Count));//mostrara valor diferente al inicial pero no se puede hacer nada ya que el for esta encaminado 
 end; 

 //esto sale bien 
 for i:=0 to lista.Count-1 do begin 
           tempEmp:=((lista[i]) as TEmpleado); 
 end;

disculpa no analice el procedimiento algo tan simple, esque estoy acostumbrado a ver la descripcion de los procedimientos y funciones en el autocompletar del ide y como lazarus no lo tiene no tengo como verlas ;P
Responder Con Cita
  #4  
Antiguo 22-11-2011
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
En caso de necesitar el Extract se trataría de hacerlo en orden inverso....

Código Delphi [-]
for i:=(lista.Count-1) downto 0 do begin 
...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 06-12-2011
jasmad jasmad is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 75
Poder: 13
jasmad Va por buen camino
ok lo tendre en cuenta gracias
Responder Con Cita
Respuesta



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
Registro mayor que cero!! einarcito SQL 2 04-11-2008 15:30:21
problema con la consulta select count() enecumene PHP 5 01-02-2007 23:33:24
FireBird.- Domino que sea entero mayor o igual a cero sakuragi Firebird e Interbase 1 08-09-2006 11:10:09
Agregado, Filtro, ClientDataSet, Problema en Count() andre Conexión con bases de datos 1 23-07-2004 14:47:07
Crystal Reports desde cero, cero, cero. Repelus Impresión 1 08-03-2004 21:23:14


La franja horaria es GMT +2. Ahora son las 00:29:47.


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