Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   buscar registros de un ClientDataSet a otro clientDataSet (https://www.clubdelphi.com/foros/showthread.php?t=82161)

novato_erick 02-02-2013 00:31:28

buscar registros de un ClientDataSet a otro clientDataSet
 
Hola chicos como estan:

Tengo dos ClientDataSet

cdsConsultaVentaFactura el cual me trae todas las ventas durante un periodo de fechas.

cdsConsultarArancel el cual me trae un todos los aranceles existente en mi db con su respectivo campo en comun en los ClientDataSet llamado Cod_barra

en fin desearia saber si es posible

una fraccion de mi codigo es asi:

Código Delphi [-]

procedure TfrmPrincipal.btnBuscarArancelClick(Sender: TObject);
var
  i, icv: integer;
begin
  begin
    with dmConecta.qConsultaVentaFecha do
    begin
      Close;
      ParamByName('FechaInicio').AsDate := dtpInicio.Date;
      ParamByName('FechaFin').AsDate := dtpFinal.Date;
      open;
    end;
    dmlogica.cdsConsultaFacturaFecha.open;
  end;
   dmLogica.cdsInventarioConsulta.open;
       begin
        with dmConecta.qConsultarArancel do
        begin
          Open;
        end;
          dmlogica.cdsConsultarArancel.Open;
          i := dmlogica.cdsConsultarArancel.RecordCount;
          edit2.Text := inttostr(i);
     end;
         dmlogica.cdsConsultarArancel.First;
         for i := 1 to dmlogica.cdsConsultarArancel.RecordCount do
       begin
         dmlogica.cdsConsultaFacturaFecha.First;
         CodBarra := dmlogica.cdsConsultaFacturaFechaCODIGO_ARTICULO.AsString;
         icv := dmLogica.cdsConsultaFacturaFecha.RecordCount;
         Edit3.Text := IntToStr(icv);
    // para conocer en el edit la cantidad de registros devueltos
         dmlogica.cdsConsultaFacturaFecha.First;
         for icv := 1 to dmlogica.cdsConsultaFacturaFecha.RecordCount do
        begin
         with dmconecta.qConsultaArticuloVenta do
         begin
           Close;
           ParamByName('CodBarra').AsString := CodBarra;
           ParamByName('CodArancel').AsString :=
         end;
end;

saludos

novato_erick

ecfisa 02-02-2013 17:43:24

Cita:

Empezado por novato_erick (Mensaje 454431)
Tengo dos ClientDataSet

cdsConsultaVentaFactura el cual me trae todas las ventas durante un periodo de fechas.

cdsConsultarArancel el cual me trae un todos los aranceles existente en mi db con su respectivo campo en comun en los ClientDataSet llamado Cod_barra

en fin desearia saber si es posible ... ????

Hola.

No puedo captar la idea, olvidaste mencionar sobre que posibilidad estas consultando.

Saludos.:)

novato_erick 02-02-2013 20:48:09

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


La franja horaria es GMT +2. Ahora son las 23:20:44.

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