ADOQuery + Locate + FilterRecord 發生Record not found 例外 |
答題得分者是:herbert2
|
ldd
一般會員 發表:12 回覆:62 積分:19 註冊:2004-07-06 發送簡訊給我 |
各位前輩~
我想要透過Locate Method來過濾完全符合我 Edit1所輸入的文字,當沒有找到資料時卻發生了 "Record not found" 的例外~之後當我透過ADOQuery->Next() 時,資料卻都是null @.@~ 我該如何讓程式可以正常的顯示 else裡面的內容???當發生例外時,也不該造成Next Prior 等method不正常,有哪位前輩可以告訴我該如何解決這樣的問題呢?謝謝 下面是我大概的code FormCreate ADOQuery1->SQL->Text = "SELECT * FROM songtable"; ADOQuery1->Active = true; Button1 onClick TLocateOptions Opts; Opts.Clear(); Opts << loPartialKey; ADOQuery1->Filtered = true; if(ADOQuery1->Locate("ID",Edit1->Text,Opts)) // <-----當找不到資料時,會發生例外,且會造成 Next Prior 等 Method無法正常work?why? { ShowMessage("找到 ID"); } else { ShowMessage("ID不存在"); } } ADOQuery1->Filtered = false; ADOQueryFilterRecord Method 中 String Tmp = DataSet->FieldByName("ID")->AsString; if(Tmp.AnsiCompare(Edit1->Text.Trim()) == 0) { Accept = true; } else { Accept = false; } |
herbert2
尊榮會員 發表:58 回覆:640 積分:894 註冊:2004-04-16 發送簡訊給我 |
執行 DataSet Locate(), 要注意 Key Field List 為一欄與多欄要用不同之參數.
一欄時: Locate(String KeyName, Variant KeyValue, TLocateOptions Options) 多欄時: Locate(String KeyNameList, VarArrayOf(Variant KeyValueArray, int ArrayCount-1), TLocateOptions Options) 使用 Method 時, 請查 Help 瞭解相關參數之 Type 才不會發生 Error. |
ldd
一般會員 發表:12 回覆:62 積分:19 註冊:2004-07-06 發送簡訊給我 |
您好~ 我用foxpro 5 將 ID 設定為char型態~我想用Edit1->Text 當參數應該不會有問題才對~因為如果找的到資料的話 就沒問題~但是找不到資料時~就會發生例外~不曉得哪邊我該再多多注意呢??ADOQuery有哪些屬性與Locate有關嗎??謝謝~~ ===================引 用 herbert2 文 章=================== 執行 DataSet Locate(), 要注意 Key Field List 為一欄與多欄要用不同之參數. 一欄時: Locate(String KeyName, Variant KeyValue, TLocateOptions Options) 多欄時: Locate(String KeyNameList, VarArrayOf(Variant KeyValueArray, int ArrayCount-1), TLocateOptions Options) 使用 Method 時, 請查 Help 瞭解相關參數之 Type 才不會發生 Error. |
herbert2
尊榮會員 發表:58 回覆:640 積分:894 註冊:2004-04-16 發送簡訊給我 |
|
ldd
一般會員 發表:12 回覆:62 積分:19 註冊:2004-07-06 發送簡訊給我 |
感謝您的回覆~
我本來一開始也是有用Variant (Edit1->Text ) 但是發現有沒有並沒有太大的影響~也許我的欄位本來就是字元的關係巴~ 但是後來我發現好像是我測試的資料的問題~ 因為只要我輸入ID 為 ff 只要兩個ff以上的當作ID就會發生問題但是 ff3 就不會有問題~~~ 真是詭異的問題~然到ff是有特殊意義嗎????謝謝!!! 目前我使用的環境為 Complier BCB 6.0 SP4 Compents ADOConnect ADOQuery DB Foxpro 5.0 ===================引 用 herbert2 文 章=================== Locate() 要的 Type 是 Variant 不是 Edit1->Text 的 AnsiString, 有找到便沒發生問題, 不表示沒找到也應該沒問題. C/C 語言對 Type 要求甚嚴, 但也有自動轉換 Type 的機制. 除非有絕對把握, 寧可用對 Type, 別依賴自動轉換. 使用 Method 時, 請查 Help 瞭解相關參數之 Type. |
herbert2
尊榮會員 發表:58 回覆:640 積分:894 註冊:2004-04-16 發送簡訊給我 |
抱歉, 用 BCB5 SP2 之 TQuery 未發生此種情形, 故不知是否您的 Update 版本的問題.
倒是執行 BDE 之 TQuery->Locate(FieldNames, Variant(FindStr), Options); 時, 若 FindStr 是中文字時, 有時候(非每次)會發生 Operation not applicable, 故用 try { TQuery->Locate(FieldNames, Variant(FindStr), Options); } catch (...) { TQuery->First(); } 不予處理來解決. |
ldd
一般會員 發表:12 回覆:62 積分:19 註冊:2004-07-06 發送簡訊給我 |
感謝您的回覆~~
今天我試了一下~用Foxpro簡單的建立新的表格~但是卻沒有我這樣的情況~ 輸入ff 當id的值並不會發生例外~~~~目前還查不到原因~~也許我在重建我的表格或許就沒有這樣的問題~~ 謝謝您的協助~~~ ===================引 用 herbert2 文 章=================== 抱歉, 用 BCB5 SP2 之 TQuery 未發生此種情形, 故不知是否您的 Update 版本的問題. 倒是執行 BDE 之 TQuery->Locate(FieldNames, Variant(FindStr), Options); 時, 若 FindStr 是中文字時, 有時候(非每次)會發生 Operation not applicable, 故用 try { TQuery->Locate(FieldNames, Variant(FindStr), Options); } catch (...) { TQuery->First(); } 不予處理來解決. |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |