PDA

Ver la Versión Completa : filtrar por combobox


jose_am
28-06-2011, 17:38:28
hola amigos, tengo un problema..estoy trabajando en una base de datos en access donde tengo cargado una serie de alumnos con sus respectivos sexos M (masculino) F (femenino) lo qui quiero hacer yo es que a traves de un combo box, donde voy a tener masculino y femenino me filtre (segun lo que yo presione) por masculino o femenino.

ecfisa
28-06-2011, 18:29:12
Hola jose_am.

Suponiendo el ComboBox tiene los Items:
Masculino
Femenino

Sería:

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
DataSet.Filtered:= False;
DataSet.Filter:= 'SEXO = '+QuotedStr(ComboBox1.Text[1]);
DataSet.Filtered:= True;
end;

Donde 'SEXO' sería el nombre del campo que utilices para almacenar 'F' o 'M'.


Saludos.

jose_am
28-06-2011, 18:37:27
Funciono perfecto!,muchas gracias!, ahora sacame esta duda..que hiciste o que sinifica esta paso? QuotedStr(ComboBox1.Text[1])

ecfisa
28-06-2011, 19:00:20
Hola.

La función QuotedStr devuelve la cadena de caracteres enviada en el argumento, encerrada entre comillas simples.

Por ejemplo:

ShowMessage('casa');

Muestra: casa

En cambio:

ShowMessage(QuotedStr('casa'));

Muestra: 'casa'

En cuanto a ComboBox1.Text[1], hago referencia al primer caracter del item seleccionado, que en este caso será: Femenino o Masculino

Saludos.

jose_am
28-06-2011, 19:03:48
perfectoo!, muchas gracias y saludos!

jose_am
28-06-2011, 20:38:00
se me complico con otra cosa..tengo que hacer lo mismo pero con un campo booleano..osea tengo la regularidad del alumno por true o false..hago lo mismo que me dijoste pero me da un error que no lo puedo hacer porque es un campo booleano.. se ve que no debe ser igual.

ecfisa
28-06-2011, 21:59:51
Hola jose.

Te pongo dos ejemplos de como podrías hacerlo.

Con un ComboBox, cuyos items sean:
Irregular
Regular

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
DataSet.Filtered:= False;
DataSet.Filter:= 'Condicion = '+ IntToStr(ComboBox1.ItemIndex);
DataSet.Filtered:= True;
end;

Aquí es importante que el alumno no-regular esté en primera posición. Ya que la posición del ítem, mediante la propiedad ItemIndex, es la que dictamina el valor Verdadero/Falso (0=Falso / 1= Verdadero)

Con un CheckBox cuyo caption sea Regular, donde chequeado = regular, en blanco = irregular:

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
DataSet.Filtered:= False;
DataSet.Filter:= 'Condicion = '+ IntToStr(Integer(CheckBox1.Checked));
DataSet.Filtered:= True;
end;


Saludos.