[Delphi][問題]關於DBGrid應用的問題 |
尚未結案
|
lksop
一般會員 發表:3 回覆:4 積分:1 註冊:2005-04-09 發送簡訊給我 |
想請問一下前輩們:
我用了DBGRID抓了資料庫資料,但是我想要讓使用者在點了dbgrid上頭的title之後,會"order by"所點的header.
有幾個問題
1.我用了OnTitleClick這個event不知道是否用對...
2.接上題如果我沒有用錯的話,他procedure的宣告內是Column:TColumn.
但是我不知道該如何讓他指向我所點選的header,如果是像sender我可以用sender=button1,或sender=button2這樣判斷嘛..可是我又不知道Column是如何去使用判斷...
PS:如果以後不是用這個event,還煩請前輩指點一下迷津...@@
當成功可以 點選order by後的問題是
1.照理說,我寫到目前點選了應該再判斷完之後重新下一次指令去order by,
如,點了ID就把'Select * From student order by ID'傳進去query做....
2.但是我如果原先有做了查詢的動作,dbgrid已經有了資料,是列出A班所有學生資料好了.......但是我去點了header做order by後,他就重新給我跑出select all的資料出來....又若,我是點header後的查詢是利用每欄的
Query1.SQL.Add(' 性名 like ''%' trim(edit2.text) '%'這種寫法)(前面selct from我忽略)...取得我已經輸入選擇學生姓名有一個黃,就列出所有姓黃的,但如果本來是一個select * from的資料到dbgrid上,但是我這樣寫變成他反而會去order by,然後列出所有姓黃的學生..... PS:總結這段是,請教有辦法不去在做處理而能就原資料去order by嘛,如果還是要寫程式,那有什麼辦法可以去讓原本叫的資料留著來排序呢... 感謝...
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
|
lksop
一般會員 發表:3 回覆:4 積分:1 註冊:2005-04-09 發送簡訊給我 |
|
lksop
一般會員 發表:3 回覆:4 積分:1 註冊:2005-04-09 發送簡訊給我 |
引言: 1. 是的。 2. 若用 ADO 可以利用 Sort with TCustomADODataSet(DataSource.DataSet) do Sort := Column.Field.FieldName ' DESC'; or Sort := Column.Field.FieldName ' ASC'; 參考。不好意思,我試了一下..可是我對sort那邊不太懂... 我是先去找有沒有BDE的prcedure....找到一個TBDEClientDataSet..可是...不知道該如何使用..... 而sort那邊是宣告為string或其他的嘛?看起來又不太像,因為我之前都是就算宣告為string,也會丟進Query.SQL.ADD()裡面去處裡在Query.open.但是SOrt:=Column.Field.FieldName 'ASC'那些我就不太懂要如何讓他跑....... 我去找了一下修關文章,我不知道我是否有搞錯,但是我發現前輩們說有一個TClientDataSet的似乎可以用來做這些排序動作.... 可是我還是不太懂,DBgrid是連往DataSource的,那麼就算存到TClientDataSet又是如何去控制DBgrid的視窗(其它我還是都看不太懂就先忽略了)... 不好意思,因為做專題正在學delphi可能問的問題都很粗淺... 不過在學校圖書館的書都被借光光(很搶,不知道為什麼)... 我們組員間買的書戶相有看一下,不過,好像都沒有詳細介紹這物件的內容... 所以想要請教一下... 發表人 - lksop 於 2005/04/10 11:18:47 ============================================================= 看了一個早上文章,我眼睛都花了../_\.........還是看不太懂.. TClientDataSet我還是一知半解,完全不知道他是什麼時候可以用來幹嘛的... 看了一下help還是一知半解(唉,可能是功力太淺.....) 我們是這樣做的,我們使用MSSQL,用DBgrid->DataSource->BDEQuery->BDEDatabase, 我們在做資料處理也是四大功能新增修改刪除查詢...我們應該只用兩層架構吧(三層目前......完全不懂,還在摸索).... 新增: 我們做一個序號產生器,primary key那邊是自動產生,其於則是自己輸入完之後再加進去... 修改: 我們是採用點了DBgrid 後裡面dbClick的函數,然後把資料丟上Tedit或TComboBox也就是上面的格子內,他們在對此做修改.. 刪除: 也是點了之後丟上去,我們是判斷欄位全部相同才會刪除... 查詢: 也就用我第一篇內寫的,只知道片斷知道,他會每欄都去找,然後去空白之後剩下資料丟進來搜尋.. PS:....小學生作業..@@ 目前就是,DBgrid 要按title做排序不知道該怎麼辦.... 在加上看了太多文章...........我真的更混亂了..... 我把具體的寫出來,怕自己也認識不夠,說出外星話來.... 雖然說還有一些問題我們一直再找解決或替代方案不知道該如何處理... 1.就是,是從資料庫發生的錯誤永遠給與紅色訊框,然後想對其做判斷,如果資料庫發生錯誤,就告知錯誤的訊息... 2.是ComboBox的年月日應用,舉月和日就好了,2月只出來28天可以選,3月出來31天可以選....我們想過從資料庫那邊對年月日各建一個table然後在判斷頡取,不過似乎太過stupid....現在是用了一個Component,他選了會跑出小日曆...但是對於如果user想查整個3月的資料就無法滿足,因為他一定要選到天數...因此我們先自定了查詢選則的前後15天 --- 我重點還是 先卡在那個點title排序.... 下面兩個,第一個打算不理他,用exe跑時好像錯誤也會跑訊息 第二個,就是先採用那種替代方案了.... 發表人 - lksop 於 2005/04/10 11:58:22 |
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
嗯!ClientDataSet 是適用在三層架構下或者是模擬。
目前看來是沒有必要使用到這一步。 解決您的方法:
1. 尋找第三方元件代替。
2. 或 在 OnTitleClick 事件中,自行處理。
使用ADO 的方式。
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin
ADOQuery1.Sort := Column.Field.FieldName ' DESC';
or
ADOQuery1.Sort := Column.Field.FieldName ' ASC';
end; 另外 亦可以使用 'Order by ..'方式。
直接使用 Query1.Sql.Text := ASQL ' Order by ...'; 參考一下。
|
likush
高階會員 發表:5 回覆:235 積分:103 註冊:2002-10-08 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |