Loop em DBGrid
Boa noite,
Alguém sabe me dizer como fazer um loop dentro de um DBGrid?
Uso Paradox e possuo um formulário com um dbGrid.
Dentro deste DB tenho uma coluna Valor e outra Total(que é um campo calculado).
Preciso fazer um loop para que a medida que forem inseridos valores na tabela , seja feito o seguinte cálculo pegando o valor que está em cada linha do DBGrid.
Total:=SaldoAnterior - Valor.
O problema é que não estou conseguindo fazer o loop das linhas do DBGrid.
Alguém sabe poderia dar uma luz?
Valeu.
Alguém sabe me dizer como fazer um loop dentro de um DBGrid?
Uso Paradox e possuo um formulário com um dbGrid.
Dentro deste DB tenho uma coluna Valor e outra Total(que é um campo calculado).
Preciso fazer um loop para que a medida que forem inseridos valores na tabela , seja feito o seguinte cálculo pegando o valor que está em cada linha do DBGrid.
Total:=SaldoAnterior - Valor.
O problema é que não estou conseguindo fazer o loop das linhas do DBGrid.
Alguém sabe poderia dar uma luz?
Valeu.
Dli
Curtidas 0
Respostas
Dli
01/04/2003
Emerson ,
Obrigado por sua resposta, na verdade o que você me indicou é exatamente o que estou fazendo, só que quando coloco otable.first no código, ao compilar recebo uma mensagem de Stack Overflow.
E quando dou table.next. recebo uma mensagem dizendo que a tabela está bloqueado por outro usuário.
Como vês uma coisa que parece tão simples, tá dificil de resolver e não consigo entender o que está acontecendo.
Tens mais alguma idéia?
Um abraço
dli
Obrigado por sua resposta, na verdade o que você me indicou é exatamente o que estou fazendo, só que quando coloco otable.first no código, ao compilar recebo uma mensagem de Stack Overflow.
E quando dou table.next. recebo uma mensagem dizendo que a tabela está bloqueado por outro usuário.
Como vês uma coisa que parece tão simples, tá dificil de resolver e não consigo entender o que está acontecendo.
Tens mais alguma idéia?
Um abraço
dli
GOSTEI 0
Aroldo Zanela
01/04/2003
Não se dá um loop na dbgrid. Na verdade o loop é feito no dataset que está conectado à grade.
Por exemplo: Você tem o dataset1 ligado ao datasource1, que por sua vez está ligado à dbgrid1. Você precisa fazer um loop no dbgrid1? Então faça:
dataset1.first; // note que não é a dbgrid!!!!!
while not dataset1.eof do
begin
Total := Total + (SaldoAnterior - Valor);
dataset1.next;
end;
Mas se esse cálculo deve ser mostrado em cada linha, é melhor você criar um campo calculado.
Ajudei ou atrapalhei?
dica:
dbgrid1.DataSource.DataSet.First; // aponta para o dataset
Stack Overflow:
Pode ocorrer quando o sistema não consegue aumentar a pilha dinamicamente. Isto pode acontecer pelo uso de variáveis locais extremamente grandes, rotinas profundamente recursivas, ou código inválido de linguagem assembly.
Acredito que um loop num campo calculado na própria tabela vai deixar o cursor do banco ´perdido´. Acho que presisamos de outra solução.
GOSTEI 0
Dli
01/04/2003
O meu problema é que não estou conseguindo fazer um
loop dentro do DBGrid , para fazer o cálculo linha a linha.
Por exemplo:
O que preciso é isto:
-------------------------/-----------/----------
descrição Valor Total
---------------------------------------------------
Saldo inicial 1000(este valor eu
pego de uma outra tabela, que é a master)
aaaaaa 100 1100
bbbbbb 50 1150
cccccc -10 1140
O que estou conseguindo é isto:
-------------------------/-----------/----------
descrição Valor Total
---------------------------------------------------
Saldo inicial 1000(este valor eu
pego de uma outra tabela,que é a master)
aaaaaa 100 900
bbbbbb 50 950
cccccc -10 990
O problema é fazer o loop.
loop dentro do DBGrid , para fazer o cálculo linha a linha.
Por exemplo:
O que preciso é isto:
-------------------------/-----------/----------
descrição Valor Total
---------------------------------------------------
Saldo inicial 1000(este valor eu
pego de uma outra tabela, que é a master)
aaaaaa 100 1100
bbbbbb 50 1150
cccccc -10 1140
O que estou conseguindo é isto:
-------------------------/-----------/----------
descrição Valor Total
---------------------------------------------------
Saldo inicial 1000(este valor eu
pego de uma outra tabela,que é a master)
aaaaaa 100 900
bbbbbb 50 950
cccccc -10 990
O problema é fazer o loop.
GOSTEI 0
Aroldo Zanela
01/04/2003
Veja um exemplo:
Código pascal:
DFM:
Código pascal:
var Form1: TForm1; Total: Currency; implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); begin Query1.Open; Total := Query1TOTAL.AsCurrency; rxTotal.Value := total; Table1.Open; end; procedure TForm1.Table1CalcFields(DataSet: TDataSet); begin Total := Total - Table1ItemsTotal.AsCurrency; Table1SALDO.Value := Total; end;
DFM:
object DBGrid1: TDBGrid Left = 14 Top = 106 Width = 659 Height = 327 DataSource = DataSource1 ReadOnly = True TabOrder = 0 TitleFont.Charset = DEFAULT_CHARSET TitleFont.Color = clWindowText TitleFont.Height = -11 TitleFont.Name = ´MS Sans Serif´ TitleFont.Style = [] end object rxTotal: TRxCalcEdit Left = 230 Top = 24 Width = 121 Height = 21 AutoSize = False NumGlyphs = 2 TabOrder = 1 end object Table1: TTable OnCalcFields = Table1CalcFields DatabaseName = ´DBDEMOS´ TableName = ´orders.db´ Left = 132 Top = 66 object Table1OrderNo: TFloatField FieldName = ´OrderNo´ end object Table1CustNo: TFloatField FieldName = ´CustNo´ Required = True end object Table1SaleDate: TDateTimeField FieldName = ´SaleDate´ end object Table1ShipDate: TDateTimeField FieldName = ´ShipDate´ end object Table1EmpNo: TIntegerField FieldName = ´EmpNo´ Required = True end object Table1ShipToContact: TStringField FieldName = ´ShipToContact´ end object Table1ShipToAddr1: TStringField FieldName = ´ShipToAddr1´ Size = 30 end object Table1ShipToAddr2: TStringField FieldName = ´ShipToAddr2´ Size = 30 end object Table1ShipToCity: TStringField FieldName = ´ShipToCity´ Size = 15 end object Table1ShipToState: TStringField FieldName = ´ShipToState´ end object Table1ShipToZip: TStringField FieldName = ´ShipToZip´ Size = 10 end object Table1ShipToCountry: TStringField FieldName = ´ShipToCountry´ end object Table1ShipToPhone: TStringField FieldName = ´ShipToPhone´ Size = 15 end object Table1ShipVIA: TStringField FieldName = ´ShipVIA´ Size = 7 end object Table1PO: TStringField FieldName = ´PO´ Size = 15 end object Table1Terms: TStringField FieldName = ´Terms´ Size = 6 end object Table1PaymentMethod: TStringField FieldName = ´PaymentMethod´ Size = 7 end object Table1ItemsTotal: TCurrencyField FieldName = ´ItemsTotal´ end object Table1TaxRate: TFloatField FieldName = ´TaxRate´ end object Table1Freight: TCurrencyField FieldName = ´Freight´ end object Table1AmountPaid: TCurrencyField FieldName = ´AmountPaid´ end object Table1SALDO: TCurrencyField FieldKind = fkCalculated FieldName = ´SALDO´ Calculated = True end end object DataSource1: TDataSource DataSet = Table1 Left = 218 Top = 62 end object Query1: TQuery DatabaseName = ´DBDEMOS´ SQL.Strings = ( ´SELECT SUM(ItemsTotal) TOTAL from orders´) Left = 416 Top = 48 object Query1TOTAL: TCurrencyField FieldName = ´TOTAL´ Origin = ´"orders.DB".ItemsTotal´ end end
GOSTEI 0
Dli
01/04/2003
Obrigado, a todos pela ajuda.
Consegui resolver.
Valeu.
[]´s
dli
Consegui resolver.
Valeu.
[]´s
dli
GOSTEI 0