Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   ClientDataSet - Como crear campos agregates (https://www.clubdelphi.com/foros/showthread.php?t=63531)

Paulao 18-02-2009 12:14:48

ClientDataSet - Como crear campos agregates
 
Estoy usando Delphi 5 y no tengo en mi aplicaccion el uso de ClientDataSet(cds). Necesito poner en um StringList o cds los registros(algunos campos)la seleccion que hago en mi grid. Siempre que premo Ctrl+Click del mouse, deve grabar esto en una lista o en uno cds. Devo usar agregates del cds o es mejor usar en una lista(TStringList). Mi duda es quando yo selecciono un registro el sea grabado y si yo quito la marcaccion, entonces el sale de la lista o de cds. Solo gustaria de un consejo de uds qual debo usar y qual es la mejor forma.

Paulao 18-02-2009 13:23:46

Tengo logrado exito para crear los agregados. Ahora la dua es: Necesito poner en estes campos agregados, algunas colunas del grid para estes campos. No estoy conseguindo hacer. Hizo de una forma, pero se esta tentando poner tudo en el. Ejemplo, tengo 1000 registro en una tabla y quiero poner en mi cds solo 11 registros. Como hago esto?

Paulao 18-02-2009 13:55:38

Hizo esto, pero no estas funcionando. No entra en el for, qryOcorrencias es mi query donde viene el Grid y cdsocorrencias es la que tiene mis campos agregados.

Código Delphi [-]
var
contador: Integer;
bkm: TBookmarkList;
bkm_str: TBookmarkStr;
begin
  bkm_str := qryOcorrencias.Bookmark;
  bkm     := grdOcorrencias.SelectedRows;

  if not cdsOcorrencias.Active then
        cdsOcorrencias.Open;

  //With Grid do
    for contador:= 0 to pred(bkm.Count) do
    Begin
      qryOcorrencias.BookMark := bkm[contador];
      cdsOcorrencias.Append;
      cdsOcorrencias.FieldByName('NUM_OCORRENCIA').AsString := copy(Grid.Fields[1].AsString,Pos('-',Grid.Fields[1].AsString)-1,255);
      cdsOcorrencias.FieldByName('PDF').AsString := Grid.Fields[3].AsString;
      cdsOcorrencias.FieldByName('ALIMENTADOR').AsString := Grid.Fields[4].AsString;
      cdsOcorrencias.FieldByName('SUB_ESTACAO').AsString := Copy(Grid.Fields[4].AsString,1,3);
      cdsOcorrencias.FieldByName('QTDE_COMUNICACAO').AsString := Grid.Fields[13].AsString;
      cdsOcorrencias.Post;
    end;
  end;

Al González 18-02-2009 16:03:01

¡Hola!

Cita:

Empezado por Paulao (Mensaje 338546)
...No estoy conseguindo hacer. Hizo de una forma, pero se esta tentando poner tudo en el. Ejemplo, tengo 1000 registro en una tabla y quiero poner en mi cds solo 11 registros. Como hago esto?

Suponiendo que se tratara de hacer una suma, una manera de solucionarlo es añadir un campo calculado, el cual consigas que tenga valor sólo para esos 11 registros. Y entonces sumas el calculado en lugar del campo original.

Código:

CampoX  CampoCalculado
 80              80
 90              90
100              100
101                0
102                0
103                0
              -----------------
                270

Saludos.

Al González. :)

Paulao 18-02-2009 17:02:42

Hizo asi. Criei una class para cargar todos los datos
Código Delphi [-]
type
  TInsereLista = class
    Counter: Integer;
    Num_Ocor: String[10];
    Pdf: String[20];
    Alimentador: String[10];
    Sub_estacao: String[5];
    Qtde_Comunicacao: Integer;
end;
Despues implemntei esa classe y puzo los registros asi: El memo fue solo para hacer un test. Ahora tengo que abri otro Form y descargar esto en un DataSet para poder ser visto en una Grid o otra cosa parecida.
Código Delphi [-]
var
contador: Integer;
bkm: TBookmarkList;
bkm_str: TBookmarkStr;
Lista: TInsereLista;
begin
  Lista := TInsereLista.Create;
  bkm_str := qryOcorrencias.Bookmark;
  bkm     := grdOcorrencias.SelectedRows;
  a := Assigned(frmAssociarOcor_Ocor_Direta);
  for contador:= 0 to pred(bkm.Count) do
  Begin
    qryOcorrencias.BookMark := bkm[contador];
    Lista.Num_Ocor := copy(Grid.Fields[1].AsString,Pos('-',Grid.Fields[1].AsString)-1,255);
    Lista.Pdf := Grid.Fields[3].AsString;
    Lista.Alimentador := Grid.Fields[4].AsString;
    Lista.Sub_estacao := Copy(Grid.Fields[4].AsString,1,3);
    Lista.Qtde_Comunicacao := Grid.Fields[13].AsInteger;

    //memo1.Lines.Add(IntToStr(Contador)+' '+Lista.Num_Ocor+' '+Lista.Pdf+' '+Lista.Alimentador+' '+Lista.Sub_estacao+' '+IntToStr(Lista.Qtde_Comunicacao));
  end;


La franja horaria es GMT +2. Ahora son las 18:29:11.

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