PDA

Ver la Versión Completa : Auxilio en ComboBox


Luis
28-09-2004, 23:35:52
Hola foro.
Estoy elaborando un reporte en Rave y para ello utilizo un query, de los campos que tengo en el query solo quiero mostrar algunos (nombre,clave,estatus) en un combo para que se pueda seleccionar uno de ellos y ejecutar un filtro, como puedo hacer para llenar el combo con los campos que quiero utilizar para filtrar ?.

Saludos, bye.

Sinaloense
29-09-2004, 06:47:10
Necesitas un DBLookUpComboBox, tiene las propiedades ListSource, ListField y KeyField, En el ListSource asocias un DataSource asociado a una tabla o query que contiene las opciones con las que necesitas llenar el combo, en ListField es la lista de opciones que desplegara el combo lo necesitas asociar a un campo de la tabla o query de ListSource, y KeyField, el valor que regresara el DbLookUpComboBox al seleccionarse el campo desplegado, este lo asocias con un campo en el query que sea la clave de algo por ejemplo.

Lepe
29-09-2004, 07:53:59
Si quieres llenar el combo con el nombre de todos los campos, puedes usar un bucle:


for j:= 0 to qry.FieldDefs.Count-1 do
with qry.FieldDefs.Items[j] do
combo.items.add(Name);


Realmente no sé si es lo que necesitas ya que dices que solo quieres mostrar algunos, pero no dices que condición deben cumplir para mostrarlo.

Saludos

Luis
29-09-2004, 15:51:53
Gracias por responder Lepe y Sinaloense, mira el bucle ya lo tengo pero llena el combo con todos los nombres de los campos y lo que quiero es por ejemplo si en mi query existen los campos ClienteID,Nombre,Estatus,Telefono,Direccion,Fax todos estos campos los utilizo para generar el reporte pero en el combo solo quiero mostrar los nombres de los campos ClienteID, Nombre y Estatus me entiendes ahora ?

Manolo. :D

Lepe
30-09-2004, 09:43:55
Y supongo que quieres hacerlo "automáticamente", es decir, a priori, no sabes los campos que se han de mostrar en el combo; o bien el usuario puede elegirlos.

El resultado que quieres es este:

combo.items.add('ClienteID');
combo.items.add('Nombre');
combo.items.add('Status');

Pero sin tenerlos que añadir a mano.

Lo que puedes hacer es guardar en alguna tabla, los nombres de los campos que quieres visualizar, y despues cargarlos en tiempo de ejecución.

Te puedes crear una tabla con 2 campos de string, el primero de 50 de ancho y el segundo de 255. de tal forma que quede así:

tabla frases:
codigo Descripcion
--------------------- -----------------------------------
VerCampos Nombre;ClienteId;Estatus
PreferenciasGuardarIni True



Ahora solo tienes que "crearte" unas rutinas para leer lo que necesites, Recuerda que todo está guardado como Strings.


if tablafrases.locate('codigo','VerCampos',[]) then
begin
x := Tstringlist.create;
try
x.Delimitedchar := ';';
x.DelimitedText := tablafrasesDescripcion.asstring;

for i:=0 to x.count-1
if qry.FindField(x[i]) <>nil then
// me aseguro que el campo existe en la query, por un fallo de escritura,
// nos podemos agobiar muuuucho.
comboFiltro.items.add(x[i])
else
Messagebox('El campo '+ x[i] + ' no existe en la query');
finally
x.free;
end;
end;

Espero haber acertado en la respuesta. :confused: