DBGrid 顯示幾個資料 |
答題得分者是:adonis
|
charles9344
一般會員 發表:7 回覆:6 積分:2 註冊:2006-11-13 發送簡訊給我 |
|
danny
版主 發表:100 回覆:522 積分:595 註冊:2002-03-11 發送簡訊給我 |
請問你是用何種資料庫 ?
我記得好像目前沒有資料庫有此功能(以前是有一種資料庫有此功能, 但目前應該是消失了) 若要做到此功能可能要用暫存檔的方式, 也就是將 select 到的資料寫到暫存檔, 再用 DBGrid 顯示 ===================引 用 charles9344 文 章=================== 我想在? DBGrid? 里顯示 幾個資料 ... 如果用 ADOQuery 在SQL?? 打 select carid as 品號 from wares where carid =:carid ? 那麼 DBGrid 就會顯示一個 資料...有 什麼辦法可以保留上一筆顯示記錄 我一直想不明....救各位大大救命
------
將問題盡快結案也是一種禮貌! |
adonis
高階會員 發表:140 回覆:258 積分:159 註冊:2002-04-15 發送簡訊給我 |
charles9344,您好
如果只是單純的想保留前次或管理先前的查詢資訊,建議你使用 ClientDataSet 。 將所查詢得到的結果寫入 ClientDataSet,讓 DBGrid 的所使用的 DataSource 連上該 ClientDataSet 好顯示你所要呈現的結果。 若想管理 DBGrid 所能呈現的資料筆數,只要再針對 ClientDataSet 來處理,應該就可達成你要的功能 ~~ 這是我所能想到的,或許有其他前輩可提供更方便實用的方式 以供大家共同學習與成長。 我也在學習中,若有錯謬請見諒 ~ ===================引 用 charles9344 文 章=================== 我想在? DBGrid? 里顯示 幾個資料 ... 如果用 ADOQuery 在SQL?? 打 select carid as 品號 from wares where carid =:carid ? 那麼 DBGrid 就會顯示一個 資料...有 什麼辦法可以保留上一筆顯示記錄 我一直想不明....救各位大大救命
------
我也在努力學習中,若有錯謬請見諒。
編輯記錄
adonis 重新編輯於 2007-05-25 10:55:18, 註解 無‧
|
ko
資深會員 發表:28 回覆:785 積分:444 註冊:2002-08-14 發送簡訊給我 |
|
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
==>這題好,腦力激蕩。
有 什麼辦法可以保留上一筆顯示記錄 ==>不要用資料庫表格的方式,茲事體大,如果將來系統擴大到多人使用及須搭配後端資料庫時就會有問題。 ==>我今天在寫公司裏新版的FastReport報表管理工具時也有遇到同樣問題。我要將編修留下歷史記錄,在編修時可看到歷次編修、拷貝編修、刪除、新建frf報表檔的記錄。這個歷史記錄我沒寫入資料庫,因為這是個人電腦上的作業,而公司裏別人是不會來開我的電腦的,所以我覺得沒必要寫一大堆多餘的程式碼以存入資料庫的必要。我用了個ListBox及不到兩百行的程式碼,就一切攪定了。如果寫到資料庫,那相關的碼沒個一兩千行是作不出來的。 ==>加個ListBox ==>在編修、新建、拷貝新建、刪除時將日期/時間/應用系統代號/frf檔名等寫入ListBox ==>在ListBox.Click 刪此記錄,刪時限由最舊記錄刪之 ==>FormOnClose將此ListBox寫入硬碟 ==>FormOnCreate時將硬碟記錄檔抓回ListBox ==>你看,多簡單省事。
------
Kevin |
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
|
Jasonwong
版主 發表:49 回覆:931 積分:581 註冊:2006-10-27 發送簡訊給我 |
受傷最重的好像是我耶,
===================引 用 kevin2004 文 章=================== 題外話。 ko兄: ??? 那Nod32真是可惡。你受委屈了。 ??? 吃了十幾年電腦飯,混過這麼多網站,碰到那般沒禮貌的,還真是第一次。小弟這兩天在公司裏想到件事,都氣的吃不下飯。 ??? 你受委屈了。 ??? 不要在意,有人喜歡七傷拳自己傷自己,就讓他自己玩好了。
------
聰明的人,喜歡猜心;雖然每次都猜對了,卻失去了自己的心 傻氣的人,喜歡給心;雖然每次都被笑了,卻得到了別人的心 |
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
沒到救命那麼嚴重吧!
按照你的需求,僅需要儲存一個RECORD的CARID,若是我要解決這個問題,我會儘量不要再去寫另一個SQL SERVER的TEMPDB,因為要花費連線以及UPDATE DB的時間與效能。 我會在本機寫入一個暫存檔或是REGISTRY的機碼,用以記錄上次查詢到的CARDID,如此不但速度快LOADING低,也可以知道上次的查詢的資料嘛! ===================引 用 charles9344 文 章=================== 我想在 DBGrid 里顯示 幾個資料 ... 如果用 ADOQuery 在SQL 打 select carid as 品號 from wares where carid =:carid 那麼 DBGrid 就會顯示一個 資料...有 什麼辦法可以保留上一筆顯示記錄我一直想不明....救各位大大救命 |
Coffee
版主 發表:31 回覆:878 積分:561 註冊:2006-11-15 發送簡訊給我 |
好吧..這時候只好建請站長撤銷我的積分以示正義(炸)
===================引 用 Jasonwong 文 章=================== 受傷最重的好像是我耶, ===================引 用 kevin2004 文 章=================== 題外話。 ko兄: ??? 那Nod32真是可惡。你受委屈了。 ??? 吃了十幾年電腦飯,混過這麼多網站,碰到那般沒禮貌的,還真是第一次。小弟這兩天在公司裏想到件事,都氣的吃不下飯。 ??? 你受委屈了。 ??? 不要在意,有人喜歡七傷拳自己傷自己,就讓他自己玩好了。
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。 為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。 在引述到我的文時自然會儘量替各位想辦法,謝謝大家! |
charles9344
一般會員 發表:7 回覆:6 積分:2 註冊:2006-11-13 發送簡訊給我 |
ClientDataSet 是怎樣用的...可以 簡單教我一下嗎?網頁 或 書上 我都有點看不明....
我本來是寫一個 超級市場收款用的功能...用編號 來查詢...資料庫 暫時用 access ... 照我現在的程式碼來看是 用戶者 用編號 查詢一次(例如 輸入01)....就會 顯示 01 這個商店相關的料....如果 第二次查詢是 02....那麼 就會顯示 02的資料...01的資料就沒有了.... 還有一個問題 在 unit 打 哪個指令 可以 暫存一下 資料的 有點看不懂各位前輩說的...不好意思...剛自學delphi 一個月多...有點差勁
編輯記錄
charles9344 重新編輯於 2007-05-26 17:25:01, 註解 無‧
|
pceyes
尊榮會員 發表:70 回覆:657 積分:1140 註冊:2003-03-13 發送簡訊給我 |
用 ClientDataSet 範例見連結
http://delphi.ktop.com.tw/board.php?cid=31&fid=97&tid=85666 http://delphi.ktop.com.tw/download.php?download=upload/4580fb4075cd0_Test90.rar
------
努力會更接近成功 |
charles9344
一般會員 發表:7 回覆:6 積分:2 註冊:2006-11-13 發送簡訊給我 |
|
pcplayer99
尊榮會員 發表:146 回覆:790 積分:632 註冊:2003-01-21 發送簡訊給我 |
你要搞清楚一个基本概念:DBGrid 仅仅是显示用的,它本身并不保留数据。DBGrid 里的数据,实际上是在 DataSet 里。
假设你用 Delphi 最古老的 BDE,那么,那个 DataSet 就是 TTable 或者 TQuery。 假设你用 ADO,那么,就是 TADOTable 或者 TADOQuery 或者 TADODataSet 上面的几种 DataSet,都是和 DataBase Server 连接的。里面的数据都来自 Server,通过 Select * from YourTable 这样的方式得来的。 而一点你改变了 select 语句,就需要关闭这个 DataSet 然后重新打开。这时候这个 DataSet 里的数据当然就是新数据了。 根据上述概念,在 Delphi最正统的做法,应该是采用 ClientDataSet。 看这个 ClientDataSet 的名字就该知道,它是一个客户端的东西,和 DataBase Server 没关系。进入 TClientDataSet 的数据,可以直接保存到你的 Local Disk,可以和 server 无关。 大概是这样的: DB Server --- TADODataBase --- TADODataSet --- TDataSetProvider --- TClientDataSet --- DataSource --- DBGrid 按照你的做法,大概可以这样写: ADODataSet.Close; ADODataSet.CommandText := 'select * from YourTable where xxx=bbb'; ADODataSet.Open; AData := DataSetProvider.Data; ClientDataSet.AppendData(AData); //<---------------- 从 DataSetProvider 取得一个 OleVariant 类别的 Data ,这个 Data 就是你的 select 语句获得的,把它加入到 ClientDataset 里去,则 ClientDataSet 里以前的 Record 保存还在,新的 Record 追加进去了。 |
babyfish0226
一般會員 發表:9 回覆:82 積分:23 註冊:2002-06-14 發送簡訊給我 |
我在想...您的需求是不是想要在DBGrid裡同時顯示"這一次"及"上一次"搜尋的紀錄?
如果是的話,那在DBGRID裡是辦不到的,因為DBGRID是依您的搜尋條件列出結果,因此在這樣的思考下您可以試試: 紀錄上一次的搜尋條件並加到新的搜尋指定中 private lastSearch:integer; ~~~~ 略~~~~~~ procedure Tform1.Searchit(cardid:integer); begin //紀錄搜尋條件 adoquery1.sql.clear; adoquery1.sql.add('select carid as 品號 from wares where carid =:carid or carid=' linttostr(lastSearch)); adoquery1.open; lastSearch:=cardid; end; 每次都記錄前一次的搜尋條件再加到下一次的查詢之中就可以了,不過這樣僅能記錄"上一次"而已. 其他大大的建議應該是認為您需要的是"額外保留上一次的查詢紀錄",因此會有用clientDataSet或是listbox配合ini或文字檔等方式來做紀錄暫存.
編輯記錄
|
adonis
高階會員 發表:140 回覆:258 積分:159 註冊:2002-04-15 發送簡訊給我 |
charles9344, 您好
個人覺得依需求的不同 ClientDataSet 在使用上可以很複雜也可以很簡單.. 若依你的需求而言,僅是用來保留上一筆的資訊,那只要將 ClientDataSet 當作是一個容器來看就好了,只是這個容器的使用和規劃必須由你自己來控制。 所以,你至少要做到底下幾件事: 01. 建欄位(就依你原先顯示在 DBGrid 上的即可) 02.當從Server查詢而來的資訊,自行增加至 ClientDataSet 03.因為要保留前一筆(不知你所謂的前一筆是單保留舊資料的一筆,還是有查詢過的都保留) 所以要自行刪除不想保留的資料 若想對 ClientDataSet 有更深的認識與學習,那就得您親自去下工夫了,印象中站裡不乏有對其詳盡的說明與使用心得,祝你一切順利。 我也在學習中,若有錯謬請見諒 ~ ===================引 用 charles9344 文 章=================== 那不 用 ClientDataSet....用 ADOQuery? 可不可以 做到 DBGrid? 保留上一筆記錄
------
我也在努力學習中,若有錯謬請見諒。 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |