質問なのですが、
ADOQQueryのLocateメソッドでOptionに何も指定せず、実行しているのですが
大文字小文字の区別なしで一致するデータを検索します。
ex.ADOuery1.Locate('KeyFields', 'KeyValues', []);
HELPには、Optionの値に[loCaseInsensitive]を指定すると大文字小文字の区別なしで
Locateするとあるのですが、バグでしょうか?
何かお分かりになる方おられましたら、宜しくお願いします。
WindowsXP SP2
Delphi2007
Oracle10g
∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽
∽ name : sawa
∽ E-mail : saw...@simple-soft.co.jp
∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽
質問なのですが、
ADOQQueryのLocateメソッドでOptionに何も指定せず、実行しているのですが
大文字小文字の区別なしで一致するデータを検索します。
ex. ADOuery1.Locate('KeyFields', 'KeyValues', []);
Borlandのnewsgroupのアーカイヴがありますが、下位レイヤのADOのFilter機能に
Case Sensitiveな動作が無いので、ADO自体の仕様ではないでしょうか?
http://coding.derkeiler.com/Archive/Delphi/borland.public.delphi.database.ado/2006-07/msg00031.html
--
高橋智宏
Java読書会( http://www.javareading.com/bof/ )
ソースを見る限り ADO の レコードセットの Find メソッドを
呼んでるだけみたいです。Find には Case の区別 を指定する
パラメータが無いので、オプション の渡しようがない
ということみたいですね。つまり ADO の仕様っぽいです。
#取り合えず判るのはここまでです。
#ADO は不慣れなので、誰か突っ込んでください(^^;
Oracle自身はデフォルトで Case を区別するので、Locate ではなくて
普通に Select で行を選べば正しい行を取得できます。
Quoting 澤田 裕次 <saw...@simple-soft.co.jp>:
----------
(株)ブレーン 中村拓男
Nasu@x21です。
ソースを見ると
下記のように成っています。
function TCustomADODataSet.LocateRecord(const KeyFields: string;
const KeyValues: OleVariant; Options: TLocateOptions;
SyncCursor: Boolean): Boolean;
var
Fields: TList;
Buffer: PChar;
I, FieldCount: Integer;
Partial: Boolean;
SortList, FieldExpr, LocateFilter: string;
begin
CheckBrowseMode;
UpdateCursorPos;
CursorPosChanged;
Buffer := TempBuffer;
Partial := loPartialKey in Options;<------ここ
Fields := TList.Create;
DoBeforeScroll;
指定した時のみ、区別するように見えますね。
┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏
那須
na...@x21.co.jp
┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏