2016-05-22 33 views
0

我想計算所有字段並添加總字段。我怎樣才能做到這一點?我用sql命令做了這個,但我不知道如何每次更新dbgrid
我的代碼:如何計算所有字段和帖子(SQL /或onCalcFields)

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    ADOQuery1.Close; 
    ADOQuery1.SQL.Text := 'select names,big1,small1,black1,big2,small2,big3,'+ 
     '((big1+small1+black1+big2+small2+big3)*0.35) as total from adlar7v'; 
    ADOQuery1.Open; 
end; 

當我運行這段代碼第一次它的工作原理,但第二次的更改不會出現在網格中。

方法二:

我這樣做是與TAdoQuery.OnCalcField事件,但有一個問題。
我知道如何計算領域,但我不知道怎麼乘另外畢竟場

我的代碼:

ADOQuery1.FieldValues['total'] := 
    ADOQuery1.FieldValues['big1'] + ADOQuery1.FieldValues['small1'] + 
    ADOQuery1.FieldValues['black1'] + ADOQuery1.FieldValues['big2'] + 
    ADOQuery1.FieldValues['small2'] + ADOQuery1.FieldValues['big3']; 

ADOQuery1.FieldValues [ 'CEMI']:=( (ADOQuery1.FieldValues ['boyuk1'] + ADOQuery1.FieldValues ['boyuk2'] + ADOQuery1.FieldValues ['boyuk3'])* 0.35)+((ADOQuery1.FieldValues ['kicik1'] + ADOQuery1.FieldValues ['kicik2' ])* 0.25)+(ADOQuery1.FieldValues [ 'qara1'] * 0.30);

您好我想發佈計算字段(cemi)到表(sql)。當我計算所有字段的最後一個字段不會發布在SQL表上。因爲最後一個領域(cemi)類型fkcalc我怎麼能張貼fkcalc類型字段在此先感謝!

+0

可能的複製https://stackoverflow.com/questions/37291757 –

+0

你是什麼意思「塞康d時間「在你的第一個方法?你的意思是說,如果你改變網格中數列中的一個數值,該行「總數」列中的數值不會改變? – MartynA

+0

你想在所有行(垂直)中總計單行(水平)中的所有字段還是單個列=字段?爲什麼你甚至需要乘法? –

回答

3

當我運行這段代碼第一次工作第二次更改不會出現分貝網

使用Object Inspector來設置你的AdoQuery1的AfterPost處理程序:

procedure TForm1.ADOQuery1AfterPost(DataSet: TDataSet); 
begin 
    AdoQuery1.Refresh; 
end; 

然後,在將更改保存到網格中的某個數字列之後,AdoQuery1.Refresh將導致再次從服務器檢索數據,這將導致服務器重新計算「總計」列。目前沒有這樣做的事實是Total列沒有更新的原因。

順便說一句,如果我理解你正確地問什麼有關,那麼你的第二點

我知道如何計算後場,但不知道怎麼乘(*)的所有領域( +)

使用下面的代碼爲這個

ADOQuery1.FieldValues['total'] := (
ADOQuery1.FieldValues['big1'] + ADOQuery1.FieldValues['small1'] + 
ADOQuery1.FieldValues['black1'] + ADOQuery1.FieldValues['big2'] + 
ADOQuery1.FieldValues['small2'] + ADOQuery1.FieldValues['big3']) 
* 0.35; 
+0

感謝您的有用評論。你幫了我很多。我很欣賞這個。 –

+0

我的意思是我做了這個ADOQuery1.SQL.text:='select adlar,boyuk1,kicik1,qara1,boyuk2,kicik2,boyuk3,(((boyuk1 + kicik1 + qara1 + boyuk2 + kicik2 + boyuk3)* 0。35)作爲celar從adlar7v';我怎樣才能做到這一點oncalc事件就像這個例子:ADOQuery1.FieldValues ['total']:=((ADOQuery1.FieldValues ['boyuk1'] + ADOQuery1.FieldValues ['kicik1'] + ADOQuery1.FieldValues ['qara1'] + ADOQuery1.FieldValues ['boyuk2'] + ADOQuery1.FieldValues ['kicik2'] + ADOQuery1.FieldValues ['boyuk3'])* 0.35);這種方法可以工作嗎?在此先感謝 –

+0

你是我見過的最好的程序員謝謝! –