線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:4525
推到 Plurk!
推到 Facebook!
[<<] [1] [2] [>>]

如何使用ADOConnection1及TADOQuery元件

尚未結案
jawtair
一般會員


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

發送簡訊給我
#32 引用回覆 回覆 發表時間:2003-05-20 22:53:31 IP:61.221.xxx.xxx 未訂閱
procedure TForm1.SpeedButton2Click(Sender: TObject); begin   if edit1.text <> '' then //有輸入   begin     ADOQuery1.sql.Clear;     ADOQuery1.SQL.Add('SELECT * FROM pm3d WHERE A1 = '+#39+Edit1.Text+#39);     ADOQuery1.close;     ADOQuery1.Open;     DataSource1.DataSet :=ADOQuery1;     DBGrid1.DataSource := DataSource1;     if ADOQuery1.isEmpty then // 沒有資料       begin         ShowMessage('查無此編號');         DataSource1.DataSet :=ADOTable1;         DBGrid1.DataSource := DataSource1;       end     end   else     ShowMessage('您沒有輸入資料'); end;    如果照上面的方式來執行沒問題,但當查詢條件增加為五項時,系統嚴重變得超慢,我只好照「Justmade版主」的建議,改成下面看效率是否會改善    procedure TForm1.SpeedButton1Click(Sender: TObject); begin   if length(trim(edit1.text))=0 then     begin     ADOQuery1.SQL.Clear;     ADOQuery1.SQL.Add('SELECT * FROM pm3d WHERE A0 = '+#39+Edit1.Text+#39);     ADOQuery1.Close;     ADOQuery1.Open;     DataSource1.DataSet :=ADOQuery1;     DBGrid1.DataSource := DataSource1;     if ADOQuery1.eof and ADOQuery1.bof then       SHOWMESSAGE('查無此編號');       ADOQuery1.Close     end   else     SHOWMESSAGE('您沒有輸入資料'); end;    但執行時狀況如下 1. Form1.Edit1.Text 未輸入任何值,則顯示 查無此帳號 2. Form1.Edit1.Text 輸入一個沒有的資料時,則顯示 您沒有輸入資料 3. Form1.Edit1.Text 輸入一個正確的資料時,也顯示 您沒有輸入資料    請問一下,我錯在那裡? 新手的問題,問得都不好意思了,感謝各位先進 發表人 -
Justmade
版主


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

發送簡訊給我
#33 引用回覆 回覆 發表時間:2003-05-21 08:27:05 IP:218.16.xxx.xxx 未訂閱
請你看清楚上文,那建議是 wnhoo 建議的而我已指出了是又減低效率又錯的,甚麼會變成是我的建議 ?    你自己看看上面,我的建議是這段
引言: 呵呵,大家都知道我經常筆誤,不過這次是其於 WHERE (A1 = 1000) 沒括號所以不加括號的不是漏掉了
if edit1.text <> '' then //有輸入
begin
  ADOQuery1.Active := false;
  ADOQuery1.SQL.Text := 'SELECT * FROM pm3d Where (A1 = '  QuotedStr(Edit1.Text)  ')';
  ADOQuery1.Active := true;
  if ADOQuery1.isEmpty then // 沒有資料
    ShowMessage('沒有找到資料');
end
else
    ShowMessage('沒有輸入資料');  
(紅色部份為補充) 那時你沒說明A1是字符,而你說『成功』的例子(WHERE (A1 = 1000))是表明 A1是數字來的,所以我才以數字的格式來建議,若是文字,可稍作修改 便可,另我漏了先設 Active=false; 但由於 Chih 兄後來提議的已是可行的所以我便沒修正。 另外一提,我通常不會 Trim 掉使用者打的文字,Trim 對使用者不小心打多了空白是方便但卻另一些刻意的空白無法查得到資料,不過大部份情況下要 Locate 的 Field 都應儘量不要有頭尾空白所以 Trim 也一般是可行的。 有關慢的問題,若是SQL執行慢是SQL寫得不好,與程式段沒多大關係。 上面數個提議應是小弟提的最快因不需 Trim (但原方案有沒先Close Query 的缺失), Chih 兄提的次之但完整及有 Trim 的方便, wnhoo 的再次之又不小心錯了一點。但三者速度差別很小,對比起你 SQL 運行時間,變得差不多是沒差別。 所以,你應post你正式的 SQL 出來看甚樣可以優化 另外,你現在的問題已偏離了原問題。原問題了結了便應結案給分,新生出的問題請開新題目。
jawtair
一般會員


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

發送簡訊給我
#34 引用回覆 回覆 發表時間:2003-05-21 09:00:17 IP:61.221.xxx.xxx 未訂閱
了解了, 感謝版主。
[<<] [1] [2] [>>]
系統時間:2024-07-03 6:59:11
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!