線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:5503
推到 Plurk!
推到 Facebook!

DBGrid內的DataSet的Locate問題?

缺席
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-20 22:12:51 IP:211.22.xxx.xxx 未訂閱
各位先進,我用ADO元件配合DBGRID來搜尋資料庫中的資料,我想讓搜尋能夠準確的分辨大小寫,但似乎我寫的是這個搜尋機制不能分辨大小寫,通通一視同仁,我的寫法如下,請問錯在哪裡? procedure TFindUserForm.FindUserBitBtnClick(Sender: TObject); var Opts:TLocateOptions; begin if ( Length( AccountLabeledEdit.Text ) = 0 ) then begin AccountLabeledEdit.SetFocus; exit; end; Opts := []; if ( SystemGateWayManagerForm.UserAccountDBGrid.DataSource.DataSet.Locate('Account',AccountLabeledEdit.Text,Opts) = false ) then MessageBox(GetActiveWindow(),'找不到使用人員帳號!','搜尋失敗',MB_OK or MB_ICONINFORMATION) else SystemGateWayManagerForm.UserAccountDBGrid.SelectedRows.CurrentRowSelected := true; AccountLabeledEdit.Text := ''; AccountLabeledEdit.SetFocus; end; 躺著睡不著,閒坐打瞌睡-年紀大啦! 學習要趁早。
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-20 22:25:22 IP:202.39.xxx.xxx 未訂閱
加入紅色部份試試:
procedure TFindUserForm.FindUserBitBtnClick(Sender: TObject);
var
 Opts:TLocateOptions;
begin
      if ( Length( AccountLabeledEdit.Text ) = 0 ) then
      begin
       AccountLabeledEdit.SetFocus;
       exit;
      end;
       Opts := [loCaseInsensitive];
      if ( SystemGateWayManagerForm.UserAccountDBGrid.DataSource.DataSet.Locate('Account',AccountLabeledEdit.Text,Opts) = false ) then
       MessageBox(GetActiveWindow(),'找不到使用人員帳號!','搜尋失敗',MB_OK or MB_ICONINFORMATION)
      else
       SystemGateWayManagerForm.UserAccountDBGrid.SelectedRows.CurrentRowSelected := true;
      AccountLabeledEdit.Text := '';
      AccountLabeledEdit.SetFocus;
end;
-- hagar.
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-04-20 22:45:59 IP:211.22.xxx.xxx 未訂閱
謝謝hagar兄,我試過了還是不行,也就是說我想準確的搜尋到「Beauty」這個欄位內的值時,一定要打「Beauty」,而不是打「beauty」或「BEAUTY]。 躺著睡不著,閒坐打瞌睡-年紀大啦! 學習要趁早。
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-04-21 07:16:06 IP:202.39.xxx.xxx 未訂閱
小弟試了一下 用 TADODataset / TADOTable / TADOQuery 的話 不論是 ADODataset1.Locate('field1', edit1.text, []) 或 ADODataset1.Locate('field1', edit1.text, [loCaseInsensitive]) 皆可搜尋到 用 TTable 或 TQuery 的話 Table1.Locate('field1', edit1.text, []) 搜尋不到 Table1.Locate('field1', edit1.text, [loCaseInsensitive]) 可以搜尋得到 所以照理說, 有加 loCaseInsensitive 選項應該可以搜尋得到 -- hagar.
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-04-22 15:23:58 IP:211.22.xxx.xxx 未訂閱
感謝HAGAR版主花時間為小弟的問題作實驗,其實TLocateOptions參數,我試過無論加不加參數[loCaseInsensitive],搜尋時都不論大小寫都認為找到了合乎的欄位值,但都不是我想要的。再經過查閱本站的其他文章發現,可能就像其他的版友所說,這或許是TADO系列元件的BUG,果真如此的話,可能要自己在搜尋到欄位值後,在寫個程序作進一步精確的判斷!謝謝! 躺著睡不著,閒坐打瞌睡-年紀大啦! 學習要趁早。
系統時間:2024-06-03 0:06:07
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!