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

如何改進原來程式ADOTable查找部分?

尚未結案
mathewzhao
中階會員


發表:121
回覆:164
積分:67
註冊:2003-04-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-04-23 12:10:39 IP:61.150.xxx.xxx 未訂閱
Q1‧請問如何改寫? 原先用adotable寫一程式,查找是否存在該Record,如果存在,則從該Record取出一個指定field,如下: try if adotable1‧locate('stdNO',edit1‧text,[]) then begin EDIT2‧text:=adotable1‧Fields[3]‧asstring; end; except showmessage('!!!'); end; 因資料庫越來越大,希望用adoquery改寫這部分以提高速度,請問如何改寫或者有無更好的方法。 Q2‧請問如何在網路故障時將"[DBNetlib]‧‧‧"提示不要顯示,並儘快執行except部分 原本想在網路故障時,出現except部分,但實際是過一倆分鐘後,在出現"[DBNetlib][connectionOpen[connect()‧]SQL server 不存在或Access 被拒絕‧"提示後,except才執行。請問如何將"[DBNetlib]‧‧‧"提示不要顯示,並儘快執行except部分
T.J.B
版主


發表:29
回覆:532
積分:497
註冊:2002-08-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-04-23 13:24:02 IP:61.220.xxx.xxx 未訂閱
可以直接下sql,不要用locate 這樣會快很多 如 ; try query1.sql.add('select * from xxx '); query1.sql.add(' where stdNO = :stdNO '); query1.ParamByName('stdNO').asstring:= edit1.text; query1.open; if not query1.isempty then //指定field except raise exception.create('資料庫無法操作,請詢問DBA'); end; 因為你的except裡面是用showmessage 所以無法阻止資料庫的錯誤訊息出來 你必須要自定錯誤訊息(去create一個錯誤訊息)這樣才會把資料庫的錯誤訊 息擋掉 天行健 君子當自強不息~~@.@ 發表人 - T.J.B 於 2003/04/23 13:34:07
------
天行健
君子當自強不息~~@.@
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-04-23 13:34:58 IP:211.76.xxx.xxx 未訂閱
引言: Q1‧請問如何改寫? 因資料庫越來越大,希望用adoquery改寫這部分以提高速度,請問如何改寫或者有無更好的方法。
資料庫愈大, 用 adotable 本來就會愈慢, 要加快的方法, 用 adoquery 來做是正確的, 先將資料縮小範圍後再利用 locate function 來指定, 你的程式修改如下:
try 
  adoquery1.close;
  adoquery1.SQL.Add('select * from tablea where stdNO like ''' Edit1.Text '%''  ');
  adoquery1.open;
  if adoquery1.locate('stdNO', edit1.text, []) then 
  begin 
    EDIT2.text :=adoquery1.Fields[3].asstring;
  end;
  except 
    showmessage('!!!');
  end;
Q2 的部分, 請問你是怎麼連上資料庫的? 用 adoconnection -> adotable 嗎? 還是直接用 adotable 呢, 是否有使用 odbc 呢?
mathewzhao
中階會員


發表:121
回覆:164
積分:67
註冊:2003-04-04

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-04-23 14:51:31 IP:202.100.xxx.xxx 未訂閱
Hi,Timhuang‧ 十分感謝你的回應,這是第三次你回應我的問題,感謝你對我的幫助! 我是直接用 adotable 呢, 沒有使用 odbc。 十分感謝T‧J‧B的回應,感覺T‧J‧B的寫法是直搗黃龍府,直擊要害!
chih
版主


發表:48
回覆:1186
積分:639
註冊:2002-04-02

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-04-23 15:49:29 IP:211.74.xxx.xxx 未訂閱
Q1.如前幾位先進所述. Q2.在你的電腦中,Windows\system\有一個DBNetlib.dll,copy過去client端同樣目錄就可以了,有可能client端還要更新MDAC,我之前到微軟下載是2.7版..現在不知道多少了... TRY TRY SEE 發表人 - chih 於 2003/04/23 15:51:40
mathewzhao
中階會員


發表:121
回覆:164
積分:67
註冊:2003-04-04

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-04-24 11:51:14 IP:61.134.xxx.xxx 未訂閱
各位先進好,我原先的程式使用一個ADOQuery和一個ADOTable,因資料庫越來越大,希望用一個adoquery改部分以提高速度。我根據T‧J‧B的建議稍做改變,將Query改為ADOQuery,但不知為何一直出現except提示(ADOQuery的connectionstring、Active都沒問題),請各位先進指點,謝謝! adoquery1‧close; adoquery1‧sql‧clear; try adoquery1‧sql‧add('select * from Library '); adoquery1‧sql‧add(' where StdNO = :StdNO '); adoquery1‧Parameters‧ParamByName('StdNO')‧value: =edit1text; adoquery1‧open; if not adoquery1‧isempty then begin EDIT2‧text:=adoquery1‧Fields[3]‧asstring; end else showmessage('學號不存在!'); except raise exception‧create('資料庫無法操作,請詢問DBA'); end;
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-04-24 13:55:24 IP:211.76.xxx.xxx 未訂閱
請將你的 error message 秀出來, 這樣大家才知道問題在那, 不過猜想可能是 'Parameter "ParamName" Not Found' 類似的, 若是這樣的話, 請參考這篇: http://www.delphi32.com/info_facts/faq/faq_932.asp 解決的方式就是要在給定 SQL Command 之後, 要再進行 ParseSQL 就可以了!!
系統時間:2024-07-05 16:07:03
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!