全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:776
推到 Plurk!
推到 Facebook!

關檔再開檔的速度

尚未結案
jawtair
一般會員


發表:30
回覆:92
積分:24
註冊:2003-04-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-23 23:20:22 IP:61.221.xxx.xxx 未訂閱
先說明一下元件結構如下 Form1視窗 數據庫pm3d←ADOConnection1←ADOTable1←DataSource1←DBGrid1 ←ADOQuery1 數據庫用MS SQL SERVER資料為3萬多筆,查詢時數度非常快 但是當我儲存再開檔,並用DBGrid1重新顯示,速度卻特別慢,是否有別的方法 刪除的部份: 刪除後要等54秒才能繼續操作,是否有別的快速方法 procedure TForm1.SpeedButton7Click(Sender: TObject); var Emp_No: String; begin Emp_No := DataSource1.DataSet.FieldByName('A0').AsString; ADOTable1.Active:=True; ADOTable1.Locate('A0',Emp_No,[]); if messagedlg('確定要刪除?',mtConfirmation, [mbYes, mbNo], 0) = mrYes then begin ADOTable1.Delete; ADOTable1.Active:=False; ADOTable1.Active:=True; DataSource1.DataSet :=ADOTable1; DBGrid1.DataSource := DataSource1; end; end; 發表人 - jawtair 於 2003/05/23 23:23:23
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-24 00:07:59 IP:218.16.xxx.xxx 未訂閱
1. 用 Table Delete做完後不用關掉重開的    2. 用另一 SQL 做 另外做一個 TADOQuery2 SQL 輸入 'delete from pm3d where A0 = :A0'    Form 的 onCreate 或 onShow 加入 (非必要,但增加效率) : TADOQuery2.Prepare;    
procedure TForm1.SpeedButton7Click(Sender: TObject);
var
  Emp_No: String;
begin
  Emp_No := DataSource1.DataSet.FieldByName('A0').AsString;
  if messagedlg('確定要刪除?',mtConfirmation,[mbYes, mbNo], 0) = mrYes then
  begin
    ADOQuery2.Parameters.ParamByName('A0').AsString := Emp_No;
    ADPQuery2.ExecSQL;
  end;
end;
wnhoo
高階會員


發表:75
回覆:443
積分:198
註冊:2003-04-22

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-05-24 07:18:28 IP:61.155.xxx.xxx 未訂閱
數據庫用MS SQL SERVER資料為3萬多筆,查詢時數度非常快    但是當我儲存再開檔,並用DBGrid1重新顯示,速度卻特別慢,是否有別的方法    刪除的部份: 刪除後要等54秒才能繼續操作,是否有別的快速方法    ------------------------------------------- 对于数据库的操作(INSERT、UPDTE、DELETE),请采用ADOQUERY写SQL的方法,这样就会很块的。    风花雪月 e梦情缘
------
风花雪月 e梦情缘
jawtair
一般會員


發表:30
回覆:92
積分:24
註冊:2003-04-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-05-29 11:00:27 IP:61.221.xxx.xxx 未訂閱
引言: 2. 用另一 SQL 做 另外做一個 TADOQuery2 SQL 輸入 'delete from pm3d where A0 = :A0'
本來想結案,但我始終不明白為什麼要另外開一個TADOQuery2,它有什麼原理嗎?是否能尚為解說一下,謝謝版主
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-05-29 11:26:05 IP:218.16.xxx.xxx 未訂閱
只是給你多一種方法來參考 若使用 Table 的話,直接刪除後不用重開可算是最簡易的了。 但很多時資料不是一個 Table 可解決的,若你使用 TADOQuery 來選取不同數據庫的資料時,使用另一個 Query 來處理異動是一個較快及可行的方法。因為有些人喜歡使用同一個 TADOQuery 用不同 SQL 來讀取資料及異動資料,這樣反而慢又沒效率。
系統時間:2024-05-18 13:27:03
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!