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: Consulta por combos.  (Leído 1336 veces)
César
Newbie
*
Desconectado Desconectado

Mensajes: 4


« : 18 de Febrero de 2009, 14:35:03 »

Hola,
Estuve haciendo pruebas con tu ORM y hasta ahora me está yendo bastante bien.
Quiero cargar un combo con los datos de una tabla llamada TIPODOCU, vi que hay un metodo para eso pero no logro entenderlo.
Hasta ahora he cargado el combo con una coleccion de TIPODOCU y
he hecho un "ObtenerTodos" pero me gustaría poder filtrarlo ya que tengo un código "9" porque es protegido y no quiero que se cargue, como puedo hacer eso?
Espero me puedas ayudar.

Gracias.

Cesar

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

Mensajes: 19


« Respuesta #1 : 18 de Febrero de 2009, 15:12:12 »

Hola Cesar,
Para poder llenar un combo con la información de una entidad (o tabla mapeada, como prefieras) tienes que: instanciar la entidad y llamar el método CargarCombo.
Supongamos que TIPODOCU tiene dos campos, uno se llama CODIGO y el otro DESCRIPCION, también supongamos que tienes un combo que se llama cbTipoDocu entonces deberías poder hacer lo siguiente:

procedure XXXXXXXXXXXXXXXXX
var
  TIPODOCU : TTIPODOCU;
begin
  TIPODOCU := TTIPODOCU.Create;
  TIPODOCU.CargarCombo(TIndiceTIPODOCU.CODIGO, TIndiceTIPODOCU.DESCRIPCION, TStringList(cbTipoDocu.Items));
  TIPODOCU.Free;
end;


En este caso estamos usando el método que está definido como:

procedure CargarCombo(IndiceCampoDato: integer; IndiceCampoDescripcion: integer;
                                 Items: TStringList; SinDuplicados: boolean = false); overload;


Eso te llenará el combo con todo el contenido de la tabla TIPODOCU.
El valor de CODIGO se guarda como un objeto del tipo TDatoCombo (que se encuentra en uEntidades.pas), si CODIGO es numérico, podrías acceder al valor del item seleccionado de la siguiente manera:
TDatoCombo(cbTipoDocu.Items.Objects[cbTipoDocu.ItemIndex]).AsInteger

Lo importante de esto es que hay que recordar liberar los objetos del combo o se generarán leaks de memoria.
Yo uso el siguiente método para eso:

procedure LiberarCombo(combo: TComboBox);
var
  nItem : integer;
  obj : TObject;
begin
  for nItem := 0 to combo.Items.Count - 1 do
  begin
    obj := combo.Items.Objects[nItem];
    FreeAndNil(obj);
  end;
  combo.Items.Clear;
end;


Con respecto a tu duda de como filtrar el combo se puede hacer el mismo CargarCombo ya que es un método sobrecargado al que se le puede agregar una condición:
En tu caso quieres agregar todos aquellos tipos de documento que sean distintos a 9, por lo tanto tienes que usar el "CargarCombo" mas completo de la siguiente manera:

  TIPODOCU.CargarCombo(TIndiceTIPODOCU.CODIGO, TIndiceTIPODOCU.DESCRIPCION,
                                   [TIndiceTIPODOCU.CODIGO], [tcDistinto], [9], TStringList(cbTipoDocu.Items));

En este caso estamos usando el método definido como:

procedure CargarCombo(IndiceCampoDato: integer; IndiceCampoDescripcion: integer;
                                 aIndiceCampoCondicion: array of Integer;
                                 aTipoCondicion: array of TTipoComparacion;
                                 aValorCondicion: array of Variant;
                                 Items: TStringList; SinDuplicados: boolean = false); overload;

El tipo TTipoComparacion esta definido en uExpresiones así que no te olvides de agregarlo a tu clausula uses.

Me queda decirte como filtrar una colección pero lo haré en otro post ya que este se está volviendo muy largo.
Espero te haya ayudado.

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

Mensajes: 4


« Respuesta #2 : 19 de Febrero de 2009, 02:47:16 »

Gracias, me quedó mas claro y funcionó bien...
Los otros "CargarCombo" solo hacen condición por igual, no?
Salu2
En línea
Adrián De Armas
Moderador
*****
Desconectado Desconectado

Mensajes: 19


« Respuesta #3 : 19 de Febrero de 2009, 13:32:49 »

Los otros "CargarCombo" solo hacen condición por igual, no?

Si, uno con una condición y el otro con dos.
Saludos
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.082 segundos con 21 consultas.