disablecontrols
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;
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
Curtidas 0
Respostas
Marco Salles
15/06/2010
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
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;
GOSTEI 0
Km Sistemas
15/06/2010
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;GOSTEI 0
Fábio Cruz
15/06/2010
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 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;
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
GOSTEI 0
Marco Salles
15/06/2010
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
acum := acum + dm.cdsLanctos.FieldByName('VALOR').AsFloat;
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
GOSTEI 0