Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   ayuda combobox anidado (https://www.clubdelphi.com/foros/showthread.php?t=70532)

Rofocale 14-05-2011 23:01:32

hola eficsa gracias por ponerle empeño para ver si me funciona pero hasta ahora me sigue duplicando los items ese codigo si lo quito aparece nombre todo osea
Código Delphi [-]
bebidas                          gaseosa
licores                            agua mineral
                                    cerveza
                                    vinos
                                    energizantes

ahora si lo vuelvo a poner sale asi

Código Delphi [-]
bebidas                          gaseosa
licores                            agua mineral
                                    cerveza
                                    vinos
                                    energizantes
                                    gaseosa
                                    agua mineral
                                    cerveza
                                    vinos
                                    energizantes
                                    gaseosa
                                    agua mineral
                                    cerveza
                                    vinos
                                    energizantes

alguna idea que haya hecho mal en mi programa para que no me filtre ?
gracias

ecfisa 15-05-2011 00:55:33

Hola Rofocale.
Cita:

pero hasta ahora me sigue duplicando los items ese codigo
Con el código y los datos que te adjunte no es posible.

Como no me es viable enviarte el código de ejemplo con la BD de Firebird, tuve la ingrata tarea de pasarlo a Paradox :mad:.

Tál como esperaba funciona correctamente. Te va a servir para que puedas controlar los datos ingresados en las tablas, cosa que hasta
ahora no podías. Tal vez así puedas encontrar donde está el problema.

Para probarlo create una carpeta temporal, descomprimí el archivo .zip allí (fuentes y tablas), y ejecutalo.

Un saludo.

Rofocale 15-05-2011 02:31:39

eficsa debido a que no hice esto desde un principio no podia saber que era lo que fallaba... y lo que falla hasta ahora son los combobox de devexpress, los quite y puse los combobox normales y estos me filtran perfectamente...
a que se debera :S

Rofocale 15-05-2011 16:54:48

una pregunta debido a este filtrado como te digo ahora funciona bien con los combobox normales me filtra los datos de mi base de datos..

ahora te explico es un formulario pequeño el que tengo donde lleno unos datos en unos edit sobre bebidas galletas etc.. de una tienda y mediante los combobox los selecciono por categorias y los guardo

ahora a la hora de si quiero modificar el articulo lo selecciono pongo modicar me muestra todos los datos en los edit a excepcion de los combobox
siempre aparecen en blanco alguna opcion para que tambien me aparecesa en los combobox al momento de recuperar los datos

bebidas gaseosa


?
gracias

ecfisa 15-05-2011 21:37:59

Hola.

En algún punto de tu código deberás indicarle al combo donde debe situarse, algo como:
Código Delphi [-]
  with ComboBox1 do
    ItemIndex:= Items.IndexOf(DataSet.FieldByName('CAMPO').AsString);

Nota: El ejemplo es para darte una idea como poner en el ComboBox el item actualmente seleccionado en un DataSet. Ignoro el nombre del DataSet y del campo; así como también la organización del código.

Saludos.

Rofocale 16-05-2011 00:03:07

hola tambien lo hago similar

Código Delphi [-]
cmbCategorias.ItemIndex := cmbCategorias.Items.IndexOf(Trim(sCateg));

y funcionaba perfecto antes de que se filtrar
cuando todo estaba sin filtrar este al recuperar los datos se mostraban perfectamente..
ahora probando cada linea del filtrado

Código Delphi [-]
IBQuery1.Close;
  IBQuery1.SQL.Clear;
  IBQuery1.SQL.Add('SELECT C1.NOMBRE FROM UNIDADES C1, CATEGORIAS C2');
  IBQuery1.SQL.Add('WHERE NOMBRE2 = CCATEGORIAS AND NOMBRE2 =');
  IBQuery1.SQL.Add('(SELECT CCATEGORIAS FROM CATEGORIAS C2 WHERE C2.NOMBRE =:NOMB)');
  IBQuery1.ParamByName('NOMB').AsString:= cbCategorias.Text;
  IBQuery1.Open;
  cbUnidades.Clear; <------- justo esta linea al quitarla hace que ya no filtre y siga como siempre lo tenia y tambien me muestre la posicion perfecta de cada item guardado en el combobox

ahora con el filtrado no tengo mucha idea de como hacer que tambien se muestre la posicion guardada cuando lo recupero para modificarlo

gracias

ecfisa 16-05-2011 00:17:46

Cita:

ahora con el filtrado no tengo mucha idea de como hacer que tambien se muestre la posicion guardada cuando lo recupero para modificarlo
Hola.

No entiendo muy bién la situación. Es decir no veo la relación de la consulta que hemos venido trantando que sólo te devuelve el campo NOMBRE de la tabla UNIDADES para llenar un ComboBox y la asignacion de los valores de los campos a los Edits.

Tal vez si explicaras un poco más como traes los datos para que sean asignados a los Edits y como realizás la modificación...

Saludos.

Rofocale 16-05-2011 02:13:37

Código Delphi [-]
procedure TfrmArticulos.RecuperaDatosBusq;
var
    sCateg, sUnis: String;

begin
    iClave := dmDatos.cdsArticulos.FieldByName('Clave').AsInteger;

    with dmDatos.qryConsulta do begin
        Close;
        SQL.Clear;
        SQL.Add('SELECT o.codigo, a.desc_corta, a.desc_larga, a.precio1,');
        SQL.Add('a.existencia, a.clave,a.minimo, a.maximo,');
        SQL.Add('a.categoria,a.unidades, a.fecha_cap,');
        SQL.Add('a.estatus,a.fotosart, c.nombre AS categorias,');
        SQL.Add('d.nombre AS unidades FROM articulos a ');
        SQL.Add('LEFT JOIN codigos o ON a.clave = o.articulo AND o.tipo = ''P''');
        SQL.Add('LEFT JOIN categorias c ON a.categoria = c.clave ');
        SQL.Add('LEFT JOIN unidades d ON a.unidades = d.clave ');
        SQL.Add('WHERE a.clave = ' + IntToStr(iClave));
        Open;
        if(not Eof) then begin
            pgeGeneral.ActivePage := tabDatos;
            txtCodigo.Text := Trim(FieldByName('codigo').AsString);
            txtDescripCorta.Text := Trim(FieldByName('desc_corta').AsString);
            txtDescripLarga.Text := Trim(FieldByName('desc_larga').AsString);
            txtFechaCap.Text := FormatDateTime('dd/mm/yyyy',FieldByName('fecha_cap').AsDateTime);
            txtPrecio1.text  := FormatFloat('#,##0.00',FieldByName('precio1').AsFloat);
            txtExis.text := floattostr(FieldByName('existencia').AsFloat);
            txtMax.text := floattostr(FieldByName('maximo').AsFloat);
            txtmin.text := floattostr(FieldByName('minimo').AsFloat);

            if FieldByName('estatus').AsString ='A' then
                cmbEstatus.ItemIndex := 0
            else
                cmbEstatus.ItemIndex := 1;

            sUnis := BuscaNombre(FieldByName('unidades').AsInteger, 'unidades');
            sCateg := BuscaNombre(FieldByName('categoria').AsInteger, 'categorias');
            cmbUnidadTipo.ItemIndex := cmbUnidadTipo.Items.IndexOf(Trim(sUnis));
            cmbCategorias.ItemIndex := cmbCategorias.Items.IndexOf(Trim(sCateg));

            MaxMin;

        end;
    end;
end;

Código Delphi [-]
function TfrmArticulos.BuscaNombre(iValor:Integer; sTabla:string):String;
begin
     with dmDatos.qryModifica do begin
        Close;
        SQL.Clear;
        SQL.Add('SELECT nombre FROM ' + sTabla + ' WHERE clave = ' + IntToStr(iValor));
        Open;
        Result := FieldByName('nombre').AsString;
        Close;
     end;
end;

con esto recuperaba los edits y combobox..
ahora con el filtrado se recupera todos los edits normal pero los combobox no se muestra lo recuperado solo salen limpios.. como para seleccionar y elegir de nuevo.. aunque claro las posiciones estan guardadas solo que no se muestran..
si le quito el filtrado si se muestran normal

ecfisa 16-05-2011 04:08:56

Hola.

Supongo que podrías encapsular la carga de los combos dentro de un procedimiento:
Código Delphi [-]
// Filtrar los combos 
procedure TfrmArticulos.FiltrarComboBox;
begin
  IBQuery1.Close;
  IBQuery1.SQL.Clear;
  IBQuery1.SQL.Add('SELECT C1.NOMBRE FROM UNIDADES C1, CATEGORIAS C2');
  IBQuery1.SQL.Add('WHERE NOMBRE2 = CCATEGORIAS AND NOMBRE2 =');
  IBQuery1.SQL.Add('(SELECT CCATEGORIAS FROM CATEGORIAS C2 WHERE C2.NOMBRE =:NOMB)');
  IBQuery1.ParamByName('NOMB').AsString:= cbCategorias.Text;
  IBQuery1.Open;
  cbUnidades.Clear;
  while not IBQuery1.Eof do
  begin
    cbUnidades.Items.Add(IBQuery1.FieldByName('NOMBRE').AsString);
    IBQuery1.Next;
  end;
  cbUnidades.ItemIndex:= 0;
  IBQuery1.Close
end;

// Cargar los combos ( Ahora dentro de un procedimiento )
procedure TfrmArticulos.CargarComboBox;
begin
  IBQuery1.Close;
  IBQuery1.SQL.Text:= 'SELECT * FROM CATEGORIAS ORDER BY NOMBRE';
  IBQuery1.Open;
  while not IBQuery1.Eof do
  begin
    cbCategorias.Items.Add(IBQuery1.FieldByName('NOMBRE').AsString);
    IBQuery1.Next;
  end;
  cbCategorias.ItemIndex:= 0;
  IBQuery1.Close;
  IBQuery1.SQL.Text:= 'SELECT * FROM UNIDADES ORDER BY NOMBRE';
  IBQuery1.Open;
  while not IBQuery1.Eof do
  begin
    cbUnidades.Items.Add(IBQuery1.FieldByName('NOMBRE').AsString);
    IBQuery1.Next;
  end;
  cbUnidades.ItemIndex:= 0;
  IBQuery1.Close;
  FiltrarComboBox;
end;

// FormShow ahora quedaría así: 
procedure TfrmArticulos.FormShow(Sender: TObject);
begin
  CargarComboBox;
  FiltrarComboBox;
end;

Luego al principio del procedimiento RecuperaDatosBusq, podrías hacer:
Código Delphi [-]
procedure TfrmArticulos.RecuperaDatosBusq;
var
    sCateg, sUnis: String;

begin
  CagarComboBox;
  iClave := dmDatos.cdsArticulos.FieldByName('Clave').AsInteger;
  ...
Creo que debería funcionar. Pero vas a tener que probarlo vos, yo no tengo modo de comprobarlo.

Saludos.

Rofocale 16-05-2011 17:15:39

hola eficsa solo recupera el primer combobox el segundo el de unidades sale en blanco :S

ecfisa 16-05-2011 17:50:56

Hola Rofocale.

Con tanta ida y venida de código se me olvidó borrar una línea ... :o

Probá quitando la última línea de código del procedimiento CargarComboBox:
Código Delphi [-]
   FiltrarComboBox; // <- Eliminar

Saludos.

Caral 16-05-2011 17:59:33

Hola
Y yo pense que tenia paciencia.
Amigo, eres un santo (San ecfisa), lo que no aseguro es que seas virgen y mártir :D:D
Saludos

Rofocale 16-05-2011 22:24:01

si le quito ya no filtra aparecen repetidos todos :S

ecfisa 16-05-2011 23:12:43

Cita:

Empezado por Caral (Mensaje 400175)
Hola
Y yo pense que tenia paciencia.
Amigo, eres un santo (San ecfisa), lo que no aseguro es que seas virgen y mártir :D:D
Saludos

jajaja :D:D:D

Saludos.:)

ecfisa 16-05-2011 23:19:21

Amigo Rofocale, creo que ahora vas a tener que empezar a hacer un seguimiento del código...

No quiero que me terminen canonizando (o peor aún ) ... :)

Saludos.

Rofocale 17-05-2011 00:01:57

caral entro y malogro mi aprovechamiento hacia ti jeje :p
gracias eficsa de todas maneras me ayudaste en lo que realmente queria que funcionara el filtrado con el codigo que me pusiste.. ya ire viendo que es lo que falla
gracias

ecfisa 17-05-2011 00:15:15

Hola Rofocale.

En realidad no tiene nada que ver la intervención del amigo Caral, es que no puedo continuar con las pruebas ya que se involucran otras tablas y datos a los cuales obviamente no puedo acceder...

Y no hay problema por que nos aprovechen mientras tengamos un poco de tiempo libre, estamos aquí por gusto. ;)

Un saludo.:)


La franja horaria es GMT +2. Ahora son las 05:56:01.

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