关于DBGrid的奇怪问题????急!!!急!!!急!!! |
尚未結案
|
railgunman
初階會員 發表:59 回覆:121 積分:36 註冊:2003-03-31 發送簡訊給我 |
我是一个菜鸟,最近在做数据输入时,遇到一个很奇怪的问题:我用的控件是:一个DBgrid,一个Ttable,一个Tdatasource,5个Tbutton,分别是“增加”,“删除”“保存”“刷新”和“退出”按钮。问题的表现:当用户在DBGrid里面录入数据时,录入完毕以后,用户不点“保存”按钮,而是用鼠标点一下上一行的内容,这时,奇怪的现象出现了:DBGrid里面的数据马上双倍显示(未点鼠标前只有两行数据,但是点了鼠标以后DBGrid里面就出现了四条数据),但是当点击“刷新”按钮时,DBGrid里面的显示就恢复正常!这是什么原因呢?怎么处理才不会出现这种情况?
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
railgunman
初階會員 發表:59 回覆:121 積分:36 註冊:2003-03-31 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 當使用BDE方法來連結資料庫時﹐要保証資料異動真正存入到資料庫中﹐最好最有效的方法還是使用Close和Open的方法﹒ 您所說的情況一定會存在﹐資料太多的時候做Close和Open的動作﹐當然會有效率影響的問題﹐另外還有一個缺點就是﹐當做完Close和Open的動作后﹐指針就會移到當前資料表的第一筆資料了﹐如果是從成千上萬的資料表中﹐突然移到資料表的首筆﹐當然會有一些目瞪口呆的詫异啦﹒ 有一些變通的方法﹐如果是BDE連接的話﹐您可以參考使用BDEClientDataSet來代替Table元件﹐它可以將資料移至快取區﹐在沒有真正存入資料庫的時候﹐都是在快取區內做異動﹐當然速度就會快許多﹐存入資料庫方法為ApplyUpdates(-1) 參考看看﹗ =====================
努力,相信會獲得美麗!
忻晟
------
忻晟 |
railgunman
初階會員 發表:59 回覆:121 積分:36 註冊:2003-03-31 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ BDEClientDataSet元件在BDE元件頁次(通常是此元件頁的最后一個)﹒
簡單使用步驟﹕
1﹒在Form中加入一個Database元件﹐正确設定其AliasName和DatabaseName﹐將Connected屬性值設為True﹐連接上資料庫﹔
2﹒在Form中加入一個BDEClientDataSet元件﹐將其DBConnection屬性值設為第一步中設定完成的Database元件﹔
3﹒雙擊BDEClientDataSet元件的CommandText屬性﹐出現Command Text Editor對話方框﹐您可以右方的SQL輸入框中直接輸入SQL敘述(比如﹕Select * From 資料表名)﹐也可利用左邊的Tables選項和Fields選項﹐采用選擇的方式在右方SQL輸入框中生成對應的SQL敘述﹐完成敘述后﹐按[确定]退出﹒
4﹒第3步中的SQL敘述無誤﹐此時可將BDEClientDataSet元件的Active屬性值設為True﹐即正常通過Database連接上資料庫﹒
5﹒后面的步驟与使用Table或Query資料集元件相同﹐在Form中分別加上DataSource元件和對應的資料感知元件﹐并將資料感知元件連接上DataSource即可﹒ 其實BDEClientDataSet的操作方法与Table或Query資料集元件大同小異﹐您可以把它當作是Table或Query元件來使用﹐唯一需要注意的就是其所有的資料異動都是在快取區內﹐即使是Post或者是Delete的方法﹐也只是針對快取區內的資料﹐后方的資料庫并未變動﹐若要真正存入到資料庫﹐必須使用如下方法﹕
DBEClientDataSet1.ApplyUpdates(-1);
//(-1)參數表示更新時可以接受的錯誤次數為無限制﹒
//若改為(0)參數﹐則表示更新時不允許任何錯誤發生﹒ 參考看看﹗ =====================
努力,相信會獲得美麗!
忻晟
------
忻晟 |
railgunman
初階會員 發表:59 回覆:121 積分:36 註冊:2003-03-31 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
railgunman
初階會員 發表:59 回覆:121 積分:36 註冊:2003-03-31 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
code6421
版主 發表:43 回覆:223 積分:208 註冊:2002-08-16 發送簡訊給我 |
引言: 小弟用的是Delphi6.0﹐也沒有如您說的安裝過第三方控件﹒ 雖然小弟沒有用過Delphi7.0﹐但應該也是有BDEClientDataSet這個元件啊﹐在BDE元件頁中找找﹗BDEClientDataSet is not available in DELPHI 7, you can use SimpleClientDataSet(in dbExpress Page) or ClientDataSet. however,you can provides a primary key of table to avoid duplicate records. Just coding... Taiwan:http://code6421.ktop.com.tw China:http://home.hoolee.com/~code6421 發表人 - code6421 於 2003/09/26 14:22:41
------
Just codeing... |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |