Fórum disablecontrols #379552

15/06/2010

0

tabela 1 => cdsfunc  = campos: codigo, credito, vales, saldo
tabela 2 => cdslanctos  = campos: id, codigo, valor, data
relacionamento: CODIGO


numa tabela mestre detalhe,  usando o codigo abaixo e habilitando o disablecontrols, so consigo ler a tabela de lancamento somente uma vez..




 

procedure calculo;
var
  acum: double;
begin
//  dm.cdsfunc.DisableControls;
  Screen.Cursor := crHourGlass;
  dm.cdsfunc.First;
  while not dm.cdsfunc.Eof do
  begin

    dm.cdsLanctos.First;
    acum := 0;
    while not dm.cdsLanctos.Eof do
    begin
      if dm.cdsLanctosDT_LANCTO.AsString = edit1.text then
         acum := acum + dm.cdsLanctos.FieldByName('VALOR').AsFloat;
      dm.cdsLanctos.Next;
    end;
    dm.cdsFunc.Edit;
    dm.cdsFunc.FieldByName('VALES').AsFloat := acum;
    dm.cdsFunc.Post;

    dm.cdsfunc.Next;
  end;

  dm.cdsfunc.First;
  dm.cdsLanctos.First;

  Screen.Cursor := crDefault;
//  dm.cdsfunc.EnableControls;
end;

Ozamir Frias

Ozamir Frias

Responder

Posts

15/06/2010

Marco Salles

tabela 1 => cdsfunc  = campos: codigo, credito, vales, saldo
tabela 2 => cdslanctos  = campos: id, codigo, valor, data
relacionamento: CODIGO


numa tabela mestre detalhe,  usando o codigo abaixo e habilitando o disablecontrols, so consigo ler a tabela de lancamento somente uma vez..




 

procedure calculo;
var
  acum: double;
begin
//  dm.cdsfunc.DisableControls;
  Screen.Cursor := crHourGlass;
  dm.cdsfunc.First;
  while not dm.cdsfunc.Eof do
  begin

    dm.cdsLanctos.First;
    acum := 0;
    while not dm.cdsLanctos.Eof do
    begin
      if dm.cdsLanctosDT_LANCTO.AsString = edit1.text then
         acum := acum + dm.cdsLanctos.FieldByName('VALOR').AsFloat;
      dm.cdsLanctos.Next;
    end;
    dm.cdsFunc.Edit;
    dm.cdsFunc.FieldByName('VALES').AsFloat := acum;
    dm.cdsFunc.Post;

    dm.cdsfunc.Next;
  end;

  dm.cdsfunc.First;
  dm.cdsLanctos.First;  ///****************Posicinada De Forma Errada ou no Minimo ESTRANHA

  Screen.Cursor := crDefault;
//  dm.cdsfunc.EnableControls;
end;

pelo que eu estou entedendo o dm.cdsLanctos.First; esta no bloco   while not dm.cdsLanctos.Eof . Mas vc colocou a Instrução Fora ... Vc teria que colocar dm.cdsLanctos.First dentro do Begin End do Bloco while not dm.cdsLanctos.Eof
Responder

Gostei + 0

15/06/2010

Km Sistemas

Aonde você esta amarrando os lançamentos nos funcionarios?Não tenho certeza, mas se não me engano quando você desabilita os controles perde tambem a ligação.Tente fazer a passagem dos parametros dentro do segundo while!!!
    procedure calculo;var  acum: double;begin  dm.cdsfunc.DisableControls;  Screen.Cursor := crHourGlass;  dm.cdsfunc.First;  while not dm.cdsfunc.Eof do  begin    dm.cdsLanctos.close;    dm.cdsLanctos.parambyname('CODIGO').asinteger := dm.cdsfunc.FieldByName('CODIGO').asinteger;    dm.cdsLanctos.open;    dm.cdsLanctos.First;    acum := 0;    while not dm.cdsLanctos.Eof do    begin      if dm.cdsLanctosDT_LANCTO.AsString = edit1.text then         acum := acum + dm.cdsLanctos.FieldByName('VALOR').AsFloat;      dm.cdsLanctos.Next;    end;    dm.cdsFunc.Edit;    dm.cdsFunc.FieldByName('VALES').AsFloat := acum;    dm.cdsFunc.Post;
    dm.cdsfunc.Next;  end;
  dm.cdsfunc.First;  dm.cdsLanctos.First;
  Screen.Cursor := crDefault;  dm.cdsfunc.EnableControls;end;
Responder

Gostei + 0

16/06/2010

Fábio Cruz

tabela 1 => cdsfunc  = campos: codigo, credito, vales, saldo
tabela 2 => cdslanctos  = campos: id, codigo, valor, data
relacionamento: CODIGO


numa tabela mestre detalhe,  usando o codigo abaixo e habilitando o disablecontrols, so consigo ler a tabela de lancamento somente uma vez..




 

procedure calculo;
var
  acum: double;
begin
//  dm.cdsfunc.DisableControls;
  Screen.Cursor := crHourGlass;
  dm.cdsfunc.First;
  while not dm.cdsfunc.Eof do
  begin

    dm.cdsLanctos.First;
    acum := 0;
    while not dm.cdsLanctos.Eof do
    begin
      if dm.cdsLanctosDT_LANCTO.AsString = edit1.text then
         acum := acum + dm.cdsLanctos.FieldByName('VALOR').AsFloat;
      dm.cdsLanctos.Next;
    end;
    dm.cdsFunc.Edit;
    dm.cdsFunc.FieldByName('VALES').AsFloat := acum;
    dm.cdsFunc.Post;

    dm.cdsfunc.Next;
  end;

  dm.cdsfunc.First;
  dm.cdsLanctos.First;  ///****************Posicinada De Forma Errada ou no Minimo ESTRANHA

  Screen.Cursor := crDefault;
//  dm.cdsfunc.EnableControls;
end;

pelo que eu estou entedendo o dm.cdsLanctos.First; esta no bloco   while not dm.cdsLanctos.Eof . Mas vc colocou a Instrução Fora ... Vc teria que colocar dm.cdsLanctos.First dentro do Begin End do Bloco while not dm.cdsLanctos.Eof



Mas se ele colocar o First dentro do bloco não vai entrar em um Loop infinito? Pois nunca irá satisfazer a condição EOF
Responder

Gostei + 0

16/06/2010

Marco Salles

Mas se ele colocar o First dentro do bloco não vai entrar em um Loop infinito? Pois nunca irá satisfazer a condição EOF
  é .. Eu derrapei na Instrução e confundi com o comando NEXT     Bem ocodigo Original é este e ele Reclama que cosegue ler a  tabela de lancamento somente uma vez.. Bem , para ele ler a Tabela Lançamento ele depende de satisfazer UM IF
  if dm.cdsLanctosDT_LANCTO.AsString = edit1.text then
  Se o For satisfeita a condição , ele irá ler  
 acum := acum + dm.cdsLanctos.FieldByName('VALOR').AsFloat;
  Caso Não , ele passa batido e da um Proximo Next na Tabela Lançamentos
ate sair do Loop da Tabela Lancamentos
Então , ele so vai conseguir ler depedendo do que tem no Edit.Text , e é´possivel que seje somente uma vez mesmo , ou mesmo ate nenhuma    
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar