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

請教按title一下順向排序再按一下變逆向排序

尚未結案
zivu
一般會員


發表:11
回覆:28
積分:12
註冊:2004-04-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-09-17 20:06:53 IP:220.139.xxx.xxx 未訂閱
例如我有兩個欄位~~~一個叫總分~~!一個叫名字~~!在DBGrid裡頭點總分一下(只點title)它就會做順向排序再點一下變逆向排序~!同理點名字也是相同的道理~!我目前的克服方法是設兩個按鈕~~!一個是順向~!一個是逆向~!可是我希望能做到點title~~!就能做到~~!請會的大大教我~~順便加上註解!謝謝~!我只看到delphi理有人也是問這種問題~~!可是他說什麼外部變數~~!我還是看不懂~~!麻煩了~!!
bigdogchina
版主


發表:238
回覆:523
積分:312
註冊:2003-04-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-09-18 11:06:08 IP:211.162.xxx.xxx 未訂閱
Hi,zivu,您好! 小弟的一點淺見,還請您看看: 當點擊DBGrid標題時對資料返回結果進行排序,主要是在DBGrid的OnTitleClick事件中處理。我們可以通過Column->FieldName來取得列所代表的欄位名。如果欄位是非線性的,可以通過select * from Table order by Field來進行操作.排序命令Order By並不只能根據單一的欄位排序,也可以同時指定多個欄位爲排序依據,例如: select * from 成績單 order by 數學,語文,英語 程式將會按照數學欄位先排序,然後再按照語文欄位排序,最後才按照英語欄位排序。Order By是從小到大,而我們要從大到小,則可在排序欄位名稱的後面再加上Desc命令,例如: select * from 成績單 order by 數學 desc 我們可以將相應的SQL命令下達給資料庫,就等結果了:

void __fastcall TForm1::DBGrid1TitleClick(TColumn *Column)
{
        ADOQuery1->Close();
        ADOQuery1->SQL->Clear();
        ADOQuery1->SQL->Text = "select * from MainTable order by '"   Column->FieldName   "'";
        ADOQuery1->Open();
}
================================= 人生在勤,不索何獲 業精於勤荒於嬉,行成於思毀於隨 臨淵羡魚不如退而結網
------
人生在勤,不索何获?
zivu
一般會員


發表:11
回覆:28
積分:12
註冊:2004-04-29

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-09-18 17:21:46 IP:220.139.xxx.xxx 未訂閱
感謝bigdogchina版主的幫忙~~~~~!因為你上面說的ontitleclick跟SQL的語法我之前就了了~~~~~~~!我原本是設兩個按鈕~~~!一個順向排序~~!一個逆向排序~~!現在的問題~~!是要按一下Title是順向再按一下會變逆向~~~!我後來找到了先關資料~~!可是是delphi的~~! http://delphi.ktop.com.tw/topic.php?topic_id=39332 那裡面的一個hager版主有提到~~!可是我不會番成BCB說~~!所以請有看到我的問題的大大指導我~~~!謝謝ㄌ~!感激~!
bigdogchina
版主


發表:238
回覆:523
積分:312
註冊:2003-04-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-09-18 22:09:26 IP:211.162.xxx.xxx 未訂閱
試試這個如何,也許能幫上點忙:

void __fastcall TForm1::DBGrid1TitleClick(TColumn *Column)
{
  AnsiString s1,s2,s3;      s1 = Column->Field->FieldName;
  s2 = " DESC";
  s3 = ADOQuery1->Sort;
  if((s3.Pos(s1) == 1) && (s3.Pos(s2) == 0))
  {
      ADOQuery1->Sort = s1   " DESC";
  }
  else
  {
      ADOQuery1->Sort = s1   " ASC";
  }
}
一點殘念:小弟在Try的時候,使用的是"Asc""Desc",結果老是Error,後來仔細閱讀幫助,才發現這兩個關鍵詞應該大寫,555,在上面浪費好多時間 ================================= <>人生在勤,不索何獲 <>業精於勤荒於嬉,行成於思毀於隨 <>臨淵羡魚不如退而結網 發表人 -
------
人生在勤,不索何获?
zivu
一般會員


發表:11
回覆:28
積分:12
註冊:2004-04-29

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-09-18 23:51:03 IP:220.139.xxx.xxx 未訂閱
感謝bigdogchina版主這麼辛苦的幫我解決問題~~! 可是我看了你寫的程式以後~~!我有好幾個地方看不太懂~~! 第一個是Column->Field->FieldName,如果直接把它取代bigdogchina版主大大之前po的SQL語言裡面的Column->FieldName會掛掉,可是如果我把Field去掉帶入改寫delphi的程式是一定可以的~~~!但是有加Field跟沒加到底插在哪~~!想不通說~~! 第二個是ADOQuery1->Sort; 請問bigdogchina版主大大這是delphi跟BCB都可以這樣寫~~!那這到底是什麼意思阿~~! 第三個是if((s3.Pos(s1) == 1) && (s3.Pos(s2) == 0)) 因為是宣告AnsiString s1,s2,s3;而AnsiPos只要是非零值表示它一定找的到,所以它一定會找的到s3.Pos(s1)所以設成1 ,可是後面設成0表示只要是DESC就一定找不到~~!所以應該會先執行順向排序ASC 再找不到才會執行逆向排序DESC, 可是不知道bigdogchina版主大大為什麼要設成DESC呢??請你替我解惑了~~~!或是告訴我我那裡觀念弄錯了~~!謝謝你了~!
bigdogchina
版主


發表:238
回覆:523
積分:312
註冊:2003-04-28

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-09-19 11:11:13 IP:211.162.xxx.xxx 未訂閱
引言: 感謝bigdogchina版主這麼辛苦的幫我解決問題~~! 可是我看了你寫的程式以後~~!我有好幾個地方看不太懂~~! 第一個是Column->Field->FieldName,如果直接把它取代bigdogchina版主大大之前po的SQL語言裡面的Column->FieldName會掛掉,可是如果我把Field去掉帶入改寫delphi的程式是一定可以的~~~!但是有加Field跟沒加到底插在哪~~!想不通說~~! 第二個是ADOQuery1->Sort; 請問bigdogchina版主大大這是delphi跟BCB都可以這樣寫~~!那這到底是什麼意思阿~~! 第三個是if((s3.Pos(s1) == 1) && (s3.Pos(s2) == 0)) 因為是宣告AnsiString s1,s2,s3;而AnsiPos只要是非零值表示它一定找的到,所以它一定會找的到s3.Pos(s1)所以設成1 ,可是後面設成0表示只要是DESC就一定找不到~~!所以應該會先執行順向排序ASC 再找不到才會執行逆向排序DESC, 可是不知道bigdogchina版主大大為什麼要設成DESC呢??請你替我解惑了~~~!或是告訴我我那裡觀念弄錯了~~!謝謝你了~!
慚愧,程式非我寫的,小弟也只是試著將hagar版大的code轉化為BCB。 ①Column->FieldNameColumn->Field->FieldName的確是不太一樣,看看BCB的Help是如何描述的: TColumn::FieldName Indicates the name of the field represented by the column(指出欄位在列中的名字) 而我們再來看看另外一個: TField::FieldName Indicates the name of the physical column in the underlying dataset to which a field component is bound(指出實際的列在基礎的DataSet到哪個欄位的名字,欄位元件受限). 更為詳細的解釋參看Help. ②在Delphi和BCB中寫法不一樣啊,Delphi為ADOQuery1.Sort,而BCB中為ADOQuery1->Sort.通過Help,我們得知ADOQuery的Sort屬性是Specifies the sort order of the recordset(規定recordset的排序次序) ③s2並不是我要設置成DESC的,而是原來的程式就是這樣用的啊。實際上可以自由變動嘛,理解使用的方法是關鍵,具體的寫法可安裝實際要求做的嘛(將其改為ASC嘛) 一點建議,其實小弟上面說的內容全在Help上,您也許應該多留意一下幫助中的相關解釋。 ================================= <>人生在勤,不索何獲 <>業精於勤荒於嬉,行成於思毀於隨 <>臨淵羡魚不如退而結網
------
人生在勤,不索何获?
zivu
一般會員


發表:11
回覆:28
積分:12
註冊:2004-04-29

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-09-19 14:12:28 IP:220.136.xxx.xxx 未訂閱
不知道該怎麼說~~~~~!只能在一次對bigdogchina版主說謝謝了~~~~!我也很想看懂help說~~~~~!可是都是英文~~~!所以每次我看都是囫圇吞棗~~~!還有真的很感激你替我翻譯那個delphi語言~!我想了一想還是把原始程式貼到delphi的資料庫區去問程式的意思~~~!不管怎樣真的謝謝你了~~~!
系統時間:2024-05-06 3:19:28
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!