TADOQuery新增一筆record,速度有點慢 |
答題得分者是:jcjroc
|
mtyen
一般會員 發表:13 回覆:16 積分:5 註冊:2004-02-03 發送簡訊給我 |
|
andychang1690
資深會員 發表:20 回覆:694 積分:442 註冊:2003-03-14 發送簡訊給我 |
引言: 各位大大: 我有兩個Table,為master/Detail的relation,我用TADOQuery新增280筆record, 卻要花費28秒,有點慢,請問大家有沒有甚麼方法可改善速度.我有用過top_id= 52515 的方法,ADOQuery->DisableControls但好像沒用,改用TADOCommand,也沒 用,不知還有沒有甚麼方法? (一定要用ADO的元件.)mtyen:你方便Post你如何執行新增的程式片斷!? Andy Chang
------
Andy Chang |
mtyen
一般會員 發表:13 回覆:16 積分:5 註冊:2004-02-03 發送簡訊給我 |
void __fastcall TForm1::WriteToPartDB(char *kind, char *product, char *rev, char *item, char *parts, char *quant, char *ref)
{
AnsiString str;
AnsiString sCmd;
static char Item2[MAXTOKEN];
static char Part2[MAXTOKEN];
static char Quant2[MAXTOKEN]; if (strcmp(kind, "") != 0 && strcmp(product, "") != 0 && strcmp (rev, "") != 0 ) {
if (item[0] != '\0' && parts[0] != '\0' && quant[0] != '\0') {
strcpy(Item2, item);
strcpy(Part2, parts);
strcpy(Quant2, quant);
DataModule1->ADOQuery3->Close();
DataModule1->ADOQuery3->SQL->Clear();
sCmd="";
sCmd.sprintf("insert into rubypart (HKIND, HPRODUCT, REV, ITEM, PART, QTY) "
"values ('%s', '%s', '%s', '%s', '%s', '%s')", kind, product, rev, item, parts, quant);
DataModule1->ADOQuery3->SQL->Add(sCmd);
DataModule1->ADOQuery3->ExecSQL();
}
DataModule1->ADOQuery3->Close();
DataModule1->ADOQuery3->SQL->Clear();
sCmd="";
sCmd.sprintf("insert into rubyref (HKIND, HPRODUCT, REV, PART, REF) "
"values ('%s', '%s', '%s', '%s', '%s')", kind, product, rev, Part2, ref);
DataModule1->ADOQuery3->SQL->Add(sCmd);
DataModule1->ADOQuery3->ExecSQL();
}
}
程式片段如上,copy/paste不是很整齊,不知如何插入檔案?
寫入資料庫主要是此function,時間都花在此function上,
我是用Paradox的DataBase,在此function前,有call
DataModule1->ADOQuery3->DisableControls()
|
jcjroc
高階會員 發表:21 回覆:279 積分:115 註冊:2002-09-18 發送簡訊給我 |
|
mtyen
一般會員 發表:13 回覆:16 積分:5 註冊:2004-02-03 發送簡訊給我 |
|
jcjroc
高階會員 發表:21 回覆:279 積分:115 註冊:2002-09-18 發送簡訊給我 |
|
andychang1690
資深會員 發表:20 回覆:694 積分:442 註冊:2003-03-14 發送簡訊給我 |
|
mtyen
一般會員 發表:13 回覆:16 積分:5 註冊:2004-02-03 發送簡訊給我 |
|
jcjroc
高階會員 發表:21 回覆:279 積分:115 註冊:2002-09-18 發送簡訊給我 |
|
sryang
尊榮會員 發表:39 回覆:762 積分:920 註冊:2002-06-27 發送簡訊給我 |
引言: 如果可以換DB,那我就會強烈建議使用MSDE ㄏㄏㄏ,簡化版的MSSQL,目前已知除全文檢索與連線數及控制介面(UI)外. 其他重要了功能都具備,最最重要的是他是免錢的.... 當然程式人員也必須將其發揮的透徹,才能在效能上得到很好的表現....強烈建議使用 MSDE,雖然本身沒有 GUI 管理工具,但是可以用有安裝SQL Server 的電腦,使用 Enterprise Manager 連進去管理 只是在安裝 MSDE 時,要下參數指定要開啟網路連線功能以及要設定sa帳號的密碼 請參考:http://www.microsoft.com/sql/msde/default.mspx 加油喔,喵~
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/ |
accepter
一般會員 發表:15 回覆:10 積分:5 註冊:2005-05-07 發送簡訊給我 |
|
jcjroc
高階會員 發表:21 回覆:279 積分:115 註冊:2002-09-18 發送簡訊給我 |
不懂你的意思
不過我一般來說,為考慮程式的活用性,我會建議將SQL Command寫在文字檔中
然後利用TStringList讀入再執行.
當然在許多場合之中會導致參數數目與型態等不符合的困擾,
最好的就是自己寫一個解譯類似Scrpit的程式,而此腳本語言的格式就自訂.
讀入此腳本後再將其對應的SQL Command與填入參數等動作.
當然還有一個更方便的方式,那就使用有預存程序功能的DB.那可以讓你的程式達到一樣的靈活性(當然此種方式將不允許你的程式使用不支援預存程序的DB).
其實際的運用方式如果是利用腳本,那牽涉的層面就大了.而另一種相對的非常簡單. 如果你問的是說SQL Command寫死在程式中與寫入String哪個效率高????
那當然是少了New Class動作的寫死方式快(但快得了多少???)
整個DB操作最耗時的不在這個環節,你應該分的清楚. 如果你是問說SQL Command被VCL重組的事,你可以去追蹤依下VCL,你就知道他怎樣重組,(不過就單以這事來說,我不覺VCL有任何不當的處理,但相對的,其他方面就見仁見智了,我就有發現一個BUG,唉!!!!). 我想這問題就此打住了,如果要討論資料庫程式的執行效率與靈活性的議題,再開一個新的且符合的討論議題會比較好,而且回答的人會比較多.
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |