Loop em DBGrid
01/04/2003
0
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
Posts
01/04/2003
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
01/04/2003
Aroldo Zanela
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.
01/04/2003
Dli
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.
01/04/2003
Aroldo Zanela
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
Clique aqui para fazer login e interagir na Comunidade :)