最近做了一個私人租房系統,里面有九個表,基它功能都基本完成,就是要統計時要將九個表的ZJ(租金)欄位統計求和,
功能倒是實作了,就是執行程序中,DBGrid中閃爍幾下,然后再出結果,好難看,效果好差;
我查詢的做法是:依次求和每一個表,將結果集輸出到DBGrid表中,然后從DBGrid中獲取值再保存到一個Int變數中,
最后將九個變數的值相加。
我想請問,如何解決閃爍?? 或者 是我的方法錯了,是不是可以將查詢的結果集 隱式獲取到變數中????
uj5u.com熱心網友回復:
在Form的Show事件里加上this->DoubleBuffered = true;uj5u.com熱心網友回復:
@songhtao我剛才加入了這條代碼,還是不行啊,這DBGrid中用SQL陳述句的查詢可以在別的地方獲取嗎?
uj5u.com熱心網友回復:
我的代碼是這樣的(片段):
int a,b;
sqlCmd="SELECT sum(zj) FROM room_1;";
ADOQuery2->SQL->Clear(); // 必須先Clear再Add最后Open,順序不能改
ADOQuery2->SQL->Add(sqlCmd);
ADOQuery2->Open(); //只能查
//ADOQuery2->EnableControls();
a=DBGrid1->Columns->Grid->Fields[0]->Value;
//a=DBGrid1->`FieldByName("total_title")->AsString;
//ADOQuery2->DisableControls();
sqlCmd="SELECT sum(zj) FROM room_2;";
ADOQuery2->SQL->Clear();
ADOQuery2->SQL->Add(sqlCmd);
ADOQuery2->Open(); //只能查
//ADOQuery2->EnableControls();
b=DBGrid1->Columns->Grid->Fields[0]->Value;
total=a+b;
ShowMessage( "\t房租統計資訊\n\n"
"\t1樓: "+IntToStr(a)+"元\t\t\n"+
"\t2樓: "+IntToStr(b)+"元\n"+
"\t合計: "+IntToStr(total)+"元\n" );
是不是我的操作不正確??
uj5u.com熱心網友回復:
ADOQuery2->DisableControls();
...... //資料庫操作
......
......
ADOQuery2->EnableControls();
...... //界面操作
......
uj5u.com熱心網友回復:
僅供參考:http://blog.163.com/tab_98/blog/static/119240972015925111011673/
uj5u.com熱心網友回復:
我定義一個變數int save;
然后通過SQL陳述句將結果集成獲取到DBGird表中,最后再從DBGird表中讀取值保存到前面的save變數中,
這樣讀一個表還像沒有閃爍,但是讀幾個表時就有這種情況發生,我覺得是不是我操作的方法用問題啊??
uj5u.com熱心網友回復:
在你的資料庫中,建立一個臨時表,每次計算的結果,存放到臨時表中(每次用臨時表之前將它清空),然后用DBGRID一次性的讀出臨時表的內容就好啦。。。。uj5u.com熱心網友回復:
這種資料求和的問題,從原則上講,是不應該通過界面來完成的,應該所有資料運算,求和,都在資料庫中完成,不要和界面攪合在一起。。uj5u.com熱心網友回復:
在表單的建構式里:this->DoubleBuffered = true;
DBGrid1->DoubleBuffered=true;
參考:
http://blog.163.com/tab_98/blog/static/1192409720167475319874/
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/74444.html
標籤:數據庫及相關技術
