讀資料庫做計算 |
答題得分者是:cashxin2002
|
inera001
一般會員 發表:5 回覆:14 積分:3 註冊:2004-12-07 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好! 可使用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 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好! 其實使用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 發送簡訊給我 |
大大!最後我的解決方法是....看了不要吐寫唷~
我再增加一個資料庫,放平均和總分。
利用一下程式算出平均和總分:
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唷~~
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |