全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:4919
推到 Plurk!
推到 Facebook!

ClientDataSet中 使用AddIndex排序的問題

答題得分者是:Chance36
johnny2212
初階會員


發表:34
回覆:65
積分:39
註冊:2003-04-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-03-28 15:25:07 IP:61.226.xxx.xxx 未訂閱
我使用單一鍵作排序,是沒問題的 procedure TForm1.DBGrid1TitleClick(Column: TColumn); begin ClientDataSet1.IndexDefs.Clear; ClientDataSet1.AddIndex (Column.FieldName 'IndexAsc',Column.FieldName, [ixCaseInsensitive],'','',0); ClientDataSet1.IndexName:=Column.FieldName 'IndexAsc'; end; 但是我使用兩個以上的鍵,卻無法正確排出 procedure TForm1.DBGrid1TitleClick(Column: TColumn); begin ClientDataSet1.IndexDefs.Clear; ClientDataSet1.AddIndex (Column.FieldName 'IndexAsc',Column.FieldName, [ixCaseInsensitive],'','',0); ClientDataSet1.AddIndex('Field1' 'IndexAsc','Field1', [ixCaseInsensitive],'','',0); // ClientDataSet1.IndexDefs.Update;//此行沒有影響 ClientDataSet1.IndexName:=Column.FieldName 'IndexAsc'; ClientDataSet1.IndexName:='Field1' 'IndexAsc'; //結果排序是使用 'Field1' 'IndexAsc',好像後面的IndexName把前面的蓋掉了 end; 而後我用Delphi Help提供的寫法,改成如下 procedure TForm1.DBGrid1TitleClick(Column: TColumn); var i Integer; begin ClientDataSet1.IndexDefs.Clear; ClientDataSet1.AddIndex(Column.FieldName 'IndexAsc',Column.FieldName, [ixCaseInsensitive],'','',0); ClientDataSet1.AddIndex('Field1' 'IndexAsc','Field1', [ixCaseInsensitive],'','',0); ClientDataSet1.IndexDefs.Update;//此行要寫才有作用 for I := 0 to ClientDataSet1.IndexDefs.Count-1 do ClientDataSet1.IndexName := ClientDataSet1.IndexDefs.Items[i].Name; ClientDataSet1.First; //但排序只依照Column.FieldName作排序, //而且ClientDataSet1.IndexDefs.Clear 這一行好像是無效的, // 因為先前的TitleClick 的Index都會保留下來 end; 我並不想用ClientDataSet1.IndexFieldNames:='Field1;Field2',因為 太麻煩了,而且會有奇怪的問題(如Insert後的資料,無法納入排序) 請問我要如何使用AddIndex作複合鍵的排序?
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-03-28 16:53:45 IP:60.248.xxx.xxx 未訂閱
johnny2212 你好    請參考下列連結    【Delphi】【發表】ClientdataSet之AddIndex 的使用範例(含D5 Source)  http://delphi.ktop.com.tw/topic.php?TOPIC_ID=53002    _______________________________________ 深藍的魚,祝您好運..........連連
johnny2212
初階會員


發表:34
回覆:65
積分:39
註冊:2003-04-09

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-03-28 21:03:19 IP:61.226.xxx.xxx 未訂閱
謝謝Chance36,問題已經解決了,但是有個新問題,為何和 "ClientDataSet1.IndexFieldNames:='Field1;Field2'"一樣, 不能將新增的資料納入排序之中,也就是在Insert一筆資料之後,此筆新增的 資料,不會按照兩個Index作排序(此筆新資料會按照第一個Index排序,但 是不會按照第二個Index作排序,他會排到第一位)
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-03-28 22:12:35 IP:60.248.xxx.xxx 未訂閱
引言: 也就是在Insert一筆資料之後,此筆新增的 資料,不會按照兩個Index作排序(此筆新資料會按照第一個Index排序,但 是不會按照第二個Index作排序,他會排到第一位)
不是很清楚你說的問題,所謂的第一個Index 是指第一個IndexField吧! 新增記錄的排序,是要等到post之後,它才會納入到索引中的,在Post之前,因為資料尚未完全確定,所以ClientdataSet並未將該筆記錄排進索引。你說的是這個問題嗎? _______________________________________ 深藍的魚,祝您好運..........連連
johnny2212
初階會員


發表:34
回覆:65
積分:39
註冊:2003-04-09

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-03-29 10:40:15 IP:61.226.xxx.xxx 未訂閱
我知道是蛇麼問題了,原來是資料結構的問題,我將char改成varchar就沒問題了,謝謝Chance36
系統時間:2024-04-16 21:16:41
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!