查詢資料顯示的問題 |
尚未結案
|
Sanyuan
一般會員 發表:24 回覆:32 積分:11 註冊:2002-06-23 發送簡訊給我 |
請教一個常遇到又很煩的問題 例如有下列六筆資料 項目 數值 日期
------------------
AA 10 12/1
AA 12 12/5
AA 9 12/6
BB 7 12/1
CC 3 12/1
CC 15 12/6 希望從資料庫讀出來後
便成下面的資料 12/1 12/5 12/6
---------------------------
AA 10 12 9
BB 7
CC 3 15 就是將項目及日期排列好
讓user方便查看及使用
這問題小弟常遇到
but 都沒有比較有水準的解法
不然就是設了一大堆的變數
比來比去自己也搞亂了
所以請教各位都是如何去思考及解決這類的問題呢
請指教
|
hahalin
版主 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
|
hahalin
版主 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
|
Sanyuan
一般會員 發表:24 回覆:32 積分:11 註冊:2002-06-23 發送簡訊給我 |
|
hahalin
版主 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
|
johnny2212
初階會員 發表:34 回覆:65 積分:39 註冊:2003-04-09 發送簡訊給我 |
我個人認為最好還是用DataSet來表現比較好,因為你必須考慮到程式(如ADO或DbExpress)和資料庫的轉移,還必須考慮印表的問題,用ClientDataSet就萬無一失了,以下是我個人的淺見,還望賜教
Table Test建立
ti001 流水號(1,2,3…..)integer primary key; ti002 Name(AA,BB,CC)string;Ti003(2000/12/1,2000/12/9)String;ti004數量(10,12,9….)integer; 程式建立
放入兩個ADOQuery連到Table(Test),在放入一個ClientDataSet1(可連結DBGrid) procedure TForm1.Button1Click(Sender: TObject);
begin
//此段程式建立虛擬資料表
with ClientDataSet1 do
begin
with FieldDefs.AddFieldDef do
begin
DataType:=ftString;
Name:='Name';
Size:=10;
end;
ADOQuery1.SQL.Text:='select distinct ti003 from test';
//可加入日期的區隔
ADOQuery1.Open;
while not ADOQuery1.Eof do
begin
with FieldDefs.AddFieldDef do
begin
DataType:=ftInteger;
Name:=ADOQuery1.Fields[0].AsString;
end;
ADOQuery1.Next;
end;
ADOQuery1.Close; with IndexDefs.AddIndexDef do //Index可做排序
begin
Fields:='Name';
Name:='IndexName';
end;
CreateDataSet;
IndexDefs.Update;
IndexName := 'IndexName';
end;
end; procedure TForm1.Button2Click(Sender: TObject);
var
i: integer;
begin
//此段程式將值填入,若常用的話,你可將其作成物件呼叫
ADOQuery1.Close;
ADOQuery1.SQL.Text:='select distinct ti002 from test';//選取AA,BB….
ADOQuery1.Open;
while not ADOQuery1.Eof do
begin
ClientDataSet1.Insert;
ClientDataSet1.Fields[0].Value:=ADOQuery1.Fields[0].AsString;
ClientDataSet1.Post;//寫入AA,BB,CC…..
//以下用迴圈將數值填入
for i:=1 to ClientDataSet1.FieldCount-1 do
begin
ADOQuery2.Close;
ADOQuery2.SQL.Text:='select ti004 from test where ti002=' '''' ADOQuery1.Fields[0].AsString '''' 'and ti003=' '''' ClientDataSet1.Fields[i].FieldName '''';
ADOQuery2.Open;
ClientDataSet1.Edit;
ClientDataSet1.Fields[i].Value:=ADOQuery2.Fields[0].Value;
ClientDataSet1.Post;
ADOQuery2.Close;
end;
ADOQuery1.Next;
end;
end;
//至於要做sum,直接在程式作加總即可(虛擬資料表加一個加總欄位)
//這樣既可不用設置一大堆變數,又將其使用DataSet,雖然要寫一些程式,
但比較起來是划算的
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |