Foros del Grupo Albor

Un lugar de encuentro para los programadores de habla hispana

Bienvenido(a), Visitante. Por favor, ingresa o regístrate.
 
   Inicio   Buscar Ingresar Registrarse  
Páginas: [1]   Ir Abajo
  Imprimir  
Autor Tema: Como filtrar una colección.  (Leído 1254 veces)
Adrián De Armas
Moderador
*****
Desconectado Desconectado

Mensajes: 19


« : 18 de Febrero de 2009, 15:39:15 »

Estoy continuando una consulta que me hizo el usuario Cesar sobre como filtrar una colección.
La colección de una entidad es tener como hacer un "select" sobre una tabla especifica y guardarse cada una de las filas.

Cesar comentaba que tenia una Coleccion de la tabla TIPODOCU. Cuando Cesar generó código el ORM creó una clase que se llama TColeccionTIPODOCU, para demostrar como obtener todas las entidades y recorrerlas vean este codigo:

procedure XXXXXXXXXXXXXXXXX
var
  Coleccion : TColeccionTIPODOCU;
  nTipoDocu: integer;
begin
  Coleccion := TColeccionTIPODOCU.Create;
  Coleccion.ObtenerTodos;
  for nTipoDocu := 0 to Coleccion.Count -1 do
      ShowMessage(Coleccion.TIPODOCU[nTipoDocu].DESCRIPCION);
  Coleccion .Free;
end;


La colección tiene una propiedad default que es el array de items de las entidades TIPODOCU así que la linea con el showmessage se podría escribir de la siguiente manera:


  for nTipoDocu := 0 to Coleccion.Count -1 do
      ShowMessage(Coleccion[nTipoDocu].DESCRIPCION);


Para filtrar una colección

Cuando se quiere filtrar una colección por un campo en particular se debe utilizar el método ObtenerMuchos junto con la definicion de un filtro.


procedure XXXXXXXXXXXXXXXXX
var
  Coleccion : TColeccionTIPODOCU;
  unFiltro: TExpresionCondicion;
begin
  Coleccion:= TColeccionTIPODOCU.Create;
  unFiltro := TExpresionCondicion.Create;
  unFiltro.Agregar(TCondicionComparacion.Create(TFabricaCampoTIPODOCU.CODIGO, tcDistinto, 9));
  Coleccion.ObtenerMuchos(unFiltro);
  //Aca está el código específico de cada uno
  Coleccion.Free;
end;

TExpresionCondicion está definida en uExpresiones;

Los filtros tienen varias posibles Condiciones, en este caso estamos usando una condicion comparación pero existen:
  • TCondicionComparacion: Comparar el valor de un campo contra una constante
  • TCondicionInclusion: Que el valor del campo esté incluido en alguna lista de valores
  • TCondicionLike: LIKE para strings
  • TCondicionNull: Que el campo sea (o no) nulo
  • TCondicionSeleccion: Que el campo esté incluido en una lista obtenida de un select

Lamento que la documentación sea tan pobre, pero confío que entre todos podemos hacer algo para todos.
Espero se entienda, cualquier duda no dudes en preguntarme.

Saludos

« Última modificación: 18 de Febrero de 2009, 15:42:04 por Adrián De Armas » En línea
César
Newbie
*
Desconectado Desconectado

Mensajes: 4


« Respuesta #1 : 19 de Febrero de 2009, 02:49:57 »

Hola, gracias por la aclaracion.
Nombras las condiciones TCondicionComparacion, TCondicionInclusion, TCondicionLike, TCondicionNull, TCondicionSeleccion. Tienes algun ejemplo de cada una?

Salu2
En línea
Adrián De Armas
Moderador
*****
Desconectado Desconectado

Mensajes: 19


« Respuesta #2 : 19 de Febrero de 2009, 13:32:12 »

Hola, gracias por la aclaracion.
Nombras las condiciones TCondicionComparacion, TCondicionInclusion, TCondicionLike, TCondicionNull, TCondicionSeleccion. Tienes algun ejemplo de cada una?

Supongamos que tenemos la tabla "Barrio" con:
BarrioID: Clave primaria, numérica.
CiudadID: FK a la tabla de ciudades, numérica.
Descripcion: String

TCondicionComparacion.Create(TFabricaCampoBarrio.BarrioID, tcIgual, 1);
Se traduce a "WHERE BarrioID=1"

var
  ColInclusion: TColeccionInclusion;
begin
  ColInclusion:= TColeccionInclusion.Create;
  ColInclusion.Agregar(1);
  ColInclusion.Agregar(2);
  ColInclusion.Agregar(3);
  TCondicionInclusion.Create(TFabricaCampoBarrio.BarrioID, ColInclusion);


Se traduce a "WHERE BarrioID in(1, 2, 3)"

TCondicionLike.Create(TFabricaCampoBarrio.Descripcion, 'Urqui%');
Se traduce a "WHERE Descripcion LIKE 'Urqui%'

TCondicionNull.Create(TFabricaCampoBarrio.CiudadID);
Se traduce a "WHERE CiudadID is null"

TCondicionSeleccion.Create(TFabricaCampoCiudad.CiudadID, TFabricaCampoBarrio.CiudadID, nil, nil, nil, nil, true);
Se traduce a "WHERE CiudadID in (select CiudadID from Ciudad)"

Todos los nil de esta condición son cosas que te permiten filtrar el select que se genera.

Espero haber sido claro, cualquier cosa, estoy a vuestra disposición.

Saludos cordiales

En línea
Páginas: [1]   Ir Arriba
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Foros del Grupo Albor | Impulsado por SMF 1.1.16.
© 2005, Simple Machines. Todos los Derechos Reservados.
XHTML 1.0 válido! CSS válido!
Página creada en 0.083 segundos con 21 consultas.