RecordsetオブジェクトのSEEKメソットについて

解決


1回生  2004-04-28 12:44:27  No: 112983  IP: [192.*.*.*]

質問です。

RecordsetオブジェクトのSeekメソットを使って検索を行いたいのですが。

現在のプロバイダはMicrosoft.Jet.OLEDB.4.0;なのですが
Supports(adSeek)メソットでSeekメソットが使用できるか確認したところ
Falseが帰ってきました。
Microsoft.Jet.OLEDB.4.0;ではSeekは使用できないのですか?

編集 削除
魔界の仮面弁士  2004-04-28 13:02:28  No: 112984  IP: [192.*.*.*]

> Microsoft.Jet.OLEDB.4.0;ではSeekは使用できないのですか?
adCmdTableDirectモードで開かれたRecordsetなら、使用できますよ。
(Seekをサポートしているのは、Jet Providerぐらいしか無かったりします)

なお、Supportsメソッドの結果は、CommandTextの内容や、指定した
CursorLocation, CursorType, LockType等によって変化します。
詳細は、ヘルプ(MDAC SDK)で確認してみてください。

編集 削除
1回生  2004-04-28 13:26:35  No: 112985  IP: [192.*.*.*]

すいません、
adCmdTableDirectモードととは、どのプロパティにあたるのですか?

編集 削除
魔界の仮面弁士  2004-04-28 13:53:12  No: 112986  IP: [192.*.*.*]

> adCmdTableDirectモードととは、どのプロパティにあたるのですか?
Recordset.Open時の最後の引数です。

ところで。
一般的には「メソット」ではなく、「メソッド(Method)」と記載します。
ヘルプでも、「メソッド」と書かれていますよね。

編集 削除
1回生  2004-04-28 16:04:44  No: 112987  IP: [192.*.*.*]

そうですね。メソット->メソッドですね。

   Dim RS As New ADODB.Recordset
   Dim strSQL AS string

   strSQL = "SELECT * FROM add"
   RS.CursorLocation = adUseClient
   RS.CursorType = adOpenDynamic
   RS.LockType = adLockOptimistic
   RS.Open strSQL, Cn, , , adCmdTableDirect
   Set DataGrid1.DataSource = RS.DataSource
   x = RS.Supports(adSeek)

   すいません↑のやり方だとSeekがサポートできません。。。。
   なにが悪いんでしょうか?

編集 削除
魔界の仮面弁士  2004-04-28 23:22:02  No: 112988  IP: [192.*.*.*]

ADOのヘルプ(MDAC SDK)で、各プロパティの意味を確認しておいて下さいね。
ヘルプを良く読めば、そのコードでは、Seekが使えないことがわかるかと思いますよ。

最大の問題点は、『adUseClientモードでは、Seekメソッドがサポートされない』事です。
これはヘルプの「Seek メソッド」の項に書いてあります。

また、adCmdTableDirectオプションを使うときは、SELECTクエリではなく、テーブル名だけを指定する必要があります。
つまり、strSQL = "SELECT * FROM add"ではなく、strSQL="add"ですね。


さて。ここまで修正したとして、もう一つ問題が残っています。
それは、『Jetプロバイダは、adOpenDynamicをサポートしていない』事です。
ここはとりあえず、adOpenKeysetあたりが妥当でしょう。

最後に、もう一つだけ覚えておいて欲しい事があります。
それは、adUseClientモードで接続している場合は、
adOpenStaticタイプしか利用できないという事です。

# どうしてadOpenStaticしか使えないのか、という理由は、
# CursorLocationプロパティの動作や、各CursorType定数の
# 意味を理解するとわかってくるのですが、とりあえず今は、
# adUseClientではadOpenStaticのみ、と覚えておけば良いかと。


なお、データの検索には、Seekの他にFilterプロパティやFindメソッドなども
利用できますので、Seekが使えない場合は、こちらで代用してみて下さい。

編集 削除
1回生  2004-04-29 11:59:08  No: 112989  IP: [192.*.*.*]

魔界の仮面弁士 様  詳しい説明ありがとうございました。

プロパティを設定し直したら無事動作しました。

編集 削除