Ver Mensaje Individual
  #3  
Antiguo 02-02-2013
novato_erick novato_erick is offline
Miembro
 
Registrado: ago 2010
Ubicación: Panamá
Posts: 396
Reputación: 14
novato_erick Va por buen camino
hola eficsa:

Cita:
No puedo captar la idea, olvidaste mencionar sobre que posibilidad estas consultando.
Tengo en una tabla llamada inventario con los datos de los articulos el cual esta codigo_barra, codigo3, nombre, nombre2 y otros campos mas respecto al articulo

realice una consulta que me trajera una consulta de nombre2 con codigo3 de dicha tabla. ejemplo:

Código SQL [-]
Select Distinct Nombre2, Codigo3 From Inventario Where Nombre2 is not null and Codigo3 is not null
order by Nombre2

Eso lo guarde en un ClientDataSet llamado cdsConsultarArancel.

ahora tengo un Query con parametros de fecha de busqueda que llama todas las ventas de ese periodo y lo guarda en otro ClientDataSet llamado cdsConsultaVentaFecha.

ahora tengo la informacion en memoria de esas consultas en los dos ClientDataSet y en fin si es posible hacer la búsqueda con los componentes en memoria en vez de utilizar este metodo que tengo a continuación ya que es muy lento.

Código Delphi [-]
procedure TfrmSecundario.Button1Click(Sender: TObject);
 Var
 i: integer;
  begin
  //Activamos nuestro timer para el progressbar
    timer1.Enabled := True;
  //Iniciamos Consulta guardandolo en la variable
    CodArancel := trim(Edit1.Text);
    dmLogica.cdsInventarioConsulta.Close;
    with dmconecta.qConsultaArancel do
    begin
      Close;
      ParamByName('Arancel').Asstring := CodArancel; //Aqui siempre el usuario tiene que conocer el código del arancel mientras este ya esta en la db
      open;
    end;
    NomArancel := dmconecta.qConsultaArancelNOMBRE2.AsString;
    dmLogica.cdsInventarioConsulta.open;
    i := dmLogica.cdsInventarioConsulta.RecordCount; //me trae todos los artículos que tengan ese código de arancel para saber cuantos hay y así poder hacer el ciclo FOR
    Edit2.Text := IntToStr(i);
    pstatus := strtoint(edit2.Text);
    // para conocer en el edit la cantidad de registros devueltos
  end;
  dmLogica.cdsInventarioConsulta.First;
  for i := 1 to dmLogica.cdsInventarioConsulta.RecordCount do
  begin
    dmLogica.cdsConsultaVentaFacturas.Close;
    begin
      CodBarra := dmLogica.cdsInventarioConsultaCOD_BARRAS.Asstring; // aquí busca en venta articulo por articulo de los n registros encontrados 
      NomArancel := dmLogica.cdsInventarioConsultaNOMBRE2.Asstring;
      with dmconecta.qConsultaVentaFactura do
      begin
        Close;
        ParamByName('Codigo').Asstring := CodBarra;
        ParamByName('FechaInicio').AsDateTime := dtpInicioFecha.DateTime;
        ParamByName('FechaFin').AsDateTime := dtpFinalFecha.DateTime;
        open;
      end;
      dmLogica.cdsInventarioConsulta.Next;
      //Pasa al siguiente registro abriendo el ClientDataSet
      dmLogica.cdsConsultaVentaFacturas.open;
      //Activa el progressbar utilizando el valor de la variable e incrementandolo + 1
      ProgressBar1.Position := i + 1;
      Sleep(10);
      Application.ProcessMessages;
    end;
       dmLogica.cdsAgregaValorFacturas.AppendData
      (dmLogica.cdsConsultaVentaFacturas.Data, True); // si aqui encuentra alguno en la consulta de venta hace un append... para mandarme 
  end;
  edtCodArancel.Text := CodArancel;
  edtNomArancel.Text := NomArancel;
  //realiza Calculos con procedimientos
  registros_vendidos;
  trae_peso;
  //Desactiva el Timer para el progresbar al terminar el recorrido de los progressbar.max = pstatus
  timer1.Enabled := false;
  end;
end;

agradezco cualquier ayuda para mejorar los resultados sean rapidos... cabe mencionar que utilizo dos conexiones diferentes ya que los articulos estan en la db llamada inventario y otra ventas en firebird.

Saludos
Responder Con Cita