線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1055
推到 Plurk!
推到 Facebook!

讀資料庫做計算

答題得分者是:cashxin2002
inera001
一般會員


發表:5
回覆:14
積分:3
註冊:2004-12-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-01-08 01:35:37 IP:218.165.xxx.xxx 未訂閱
大大,我又來了!我又有問題了! 現在資料庫有以下資料: >
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-01-08 09:17:39 IP:202.62.xxx.xxx 未訂閱
您好!    可使用Query元件的SQL語法來完成相應的功能, 如下: 在Form中加一個Query元件, 正确設定其DatabaseName屬性(相同于原來的Table元件之DatabaseName屬性); 在Form中加上三個Label元件, 用作顯示查詢結果中對應的資料值; 在Form中加上一個Button按鈕, 在其OnClick事件中寫入如下程式碼:
begin
  Query1.Close;
  Query1.SQL.Clear;
  Query1.SQL.Add('Select Sum(Q1), Avg(Q1) From 資料表');
  Query1.Open;
  Label1.Caption := '當前Q1欄位的合計值是: '
    + Query1.Fields.Fields[0].AsInteger;
  Label2.Caption := '當前Q1欄位的平均值是: '
    + Query1.Fields.Fields[0].AsInteger;
  // 以上步驟完成您的第一個和第二個問題
  // 在Form中再加入一個Edit元件, 用于讓使用者輸入查詢筆數的條件值,
  // 假設為其名稱為Edit1, 如在Edit中輸入5, 即是查詢Q1欄位值為5的筆數
  Query1.Close;
  Query1.SQL.Clear;
  Query1.SQL.Add('Select Count(*) From 資料表 Where Q1=:Temp');
  Query1.Params.ParamByName('Temp').Value := IntToStr(Edit1.Text);
  Query1.Open;
  Label3.Caption := '目前Q1欄位中資料值為'+ Edit1.Text + '的筆數有: '
    + IntToStr(Query1.Fields.Fields[0].AsInteger) + '筆';
  // 以上步驟完成您的第三個問題
end;
================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟
inera001
一般會員


發表:5
回覆:14
積分:3
註冊:2004-12-07

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-01-08 13:21:48 IP:218.165.xxx.xxx 未訂閱
對不起大大,我想說用最單純的方式耶~~ 也就是可以不用用到SQL嗎~感覺上有點麻煩~~~(我是懶惰的人)沒啦~ 我在重述我的問題: >
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-01-08 14:58:47 IP:202.62.xxx.xxx 未訂閱
您好!    其實使用SQL是最簡單而且最有效率的方法, 如果您執意要使用您所謂最簡單的方法, 請參考如下, 修改自您的程式碼部分:    1.要將Q1那一欄做加總,放到Label1 2.Delphi元件有  5.有___人  4.有___人....   ___→上是Label , 要計算5有幾個人並放到Label上,因為我跟同學前面的寫法不同,所以滿難參考他的。下面是我粗略寫的程式碼:
Var 
  i,num,gy1,gy2,gy3,gy4,gy5: Integer;
  //若Q1欄位值有等于0的話在上面再加上gy6變數
  sum: Real;
begin
  Table1.Close;
  Table1.Open;
  sum:=0;
  num:=table1.RecordCount;
  for i:=1 to num do
    begin
      sum:=sum+Table1.FieldByName('Q1').AsInteger;
      Table1.Next;     
    end;
  avg:=sum/4;
  Label1.Caption := '總計為: '+IntToStr(sum);
  Label2.Caption := '平均值為: '+FloatToStr(avg);
  //以下為第二個問題:
  gy1 := 0;
  gy2 := 0;
  gy3 := 0;
  gy4 := 0;
  gy5 := 0;
  //若Q1欄位值有等于0的再加上下句:
  //gy6 := 0;
  for i:=1 to num do
    begin
      if Table1.FieldByName('Q1').AsInteger = 5 then
        gy1 := qy1+1;
      if Table1.FieldByName('Q1').AsInteger = 4 then
        qy2 := qy2+1;
      if Table1.FieldByName('Q1').AsInteger = 3 then
        qy3 := qy3+1;
      if Table1.FieldByName('Q1').AsInteger = 2 then
        qy4 := qy4+1;
      if Table1.FieldByName('Q1').AsInteger = 1 then
        qy5 := qy5+1;
      //若Q1欄位值有等于0的再加上下句:
      //if Table1.FieldByName('Q1').AsInteger = 0 then
        //qy6 := qy6+1;
    end;
    Label3.Caption := IntToStr(qy1);
    Label4.Caption := IntToStr(qy2);
    Label5.Caption := IntToStr(qy3);
    Label6.Caption := IntToStr(qy4);
    Label7.Caption := IntToStr(qy5);
    //若Q1欄位值有等于0的再加上下句:
    //Label8.Caption := IntToStr(qy6);
    //Label3~Label8代表您之前所述的: 5.有___人  4.有___人....中的___
end;
================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟
inera001
一般會員


發表:5
回覆:14
積分:3
註冊:2004-12-07

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-01-08 15:17:15 IP:218.165.xxx.xxx 未訂閱
大大!最後我的解決方法是....看了不要吐寫唷~ 我再增加一個資料庫,放平均和總分。 利用一下程式算出平均和總分: var i,num:integer;     sum1,sum2:real;     avg1,avg2:real; begin Table2.Insert; Table2.Edit; sum1:=0; sum2:=0; num:=Table1.RecordCount;   for i:=1 to num do     begin       sum1:=sum1+Table1.FieldByName('Q1').AsInteger;       sum2:=sum2+Table1.FieldByName('Q2').AsInteger;     end;     avg1:=sum1/num;     avg2:=sum2/num; Table2.Fieldbyname('Q1sum').value:=sum1; Table2.Fieldbyname('Q1avg').value:=avg1; Table2.Fieldbyname('Q2sum').value:=sum2; Table2.Fieldbyname('Q2avg').value:=avg2; Table2.Post; Table2.Cancel; 這樣是可以低!問題是!要怎麼把他放到Label,因為每計算一次,他會放到新的列!這樣抓到的不會是新的計算! 那要怎樣才可以讓整個Table重新在第一列紀錄資料,因為我希望他都是紀算在第一列~~>< 還有還有,計算人數的問題!不是用Edit,是用Label唷~~
系統時間:2024-05-19 10:57:23
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!