[Delphi:90065] ADOQueryのLocateメソッドのバグ?について

549 views
Skip to first unread message

澤田 裕次

unread,
Nov 14, 2007, 12:25:08 AM11/14/07
to Del...@ml.users.gr.jp
いつも拝見させていただいております。
Delphi Q&A掲示板にも投稿させていただきましたが、レスが頂けなかったので
こちらでもお伺いを立てたいと思います。

質問なのですが、
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
∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽


澤田 裕次

unread,
Nov 14, 2007, 12:31:13 AM11/14/07
to Del...@ml.users.gr.jp
いつも拝見させていただいております。
Delphi Q&A掲示板にも投稿させていただきましたが、レスが頂けなかったので
こちらでもお伺いを立てたいと思います。

質問なのですが、
ADOQQueryのLocateメソッドでOptionに何も指定せず、実行しているのですが
大文字小文字の区別なしで一致するデータを検索します。

ex. ADOuery1.Locate('KeyFields', 'KeyValues', []);

TAKAHASHI, Tomohiro

unread,
Nov 14, 2007, 1:30:15 AM11/14/07
to Del...@ml.users.gr.jp
高橋(智)です。

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/ )

tknak...@brain-tokyo.jp

unread,
Nov 15, 2007, 12:41:07 AM11/15/07
to Del...@ml.users.gr.jp
中村@ブレーンです。

ソースを見る限り ADO の レコードセットの Find メソッドを
呼んでるだけみたいです。Find には Case の区別 を指定する
パラメータが無いので、オプション の渡しようがない
ということみたいですね。つまり ADO の仕様っぽいです。
#取り合えず判るのはここまでです。
#ADO は不慣れなので、誰か突っ込んでください(^^;

Oracle自身はデフォルトで Case を区別するので、Locate ではなくて
普通に Select で行を選べば正しい行を取得できます。

Quoting 澤田 裕次 <saw...@simple-soft.co.jp>:

----------
(株)ブレーン 中村拓男

那須@x21

unread,
Nov 15, 2007, 6:34:55 AM11/15/07
to Del...@ml.users.gr.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
┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏

Reply all
Reply to author
Forward
0 new messages