DOBON.NET DOBON.NETプログラミング掲示板過去ログ

ASPからINDEX SERVICE の検索を行いたい

環境/言語:[XP,ASP]
分類:[その他]

ASP(.NETではないです)からクエリを発行してINDEX SERVICEと同等の検索を
行いたいのですが、基本的なことがよく分からずうまくいきません。。。
(「コンピュータの管理画面」ではきちんと検索できます)

[カタログ名]:System (最初からあったものです)

Set cnn=CreateObject("ADODB.Connection")
cnn.Open "Provider=MSIDXS;Data Source=System;Locale Identifier=1041;"
Set rst=cnn.Execute("SELECT DocTitle FROM SCOPE()")

response.write rst.RecordCount

↑全文検索のつもりですが、この時点でRecordCountは-1になっています。
 WHERE文を付けた検索も試しました。

まず私がSCOPEの仕様を勘違いしてる可能性があります(汗)
調べた結果だと直接「c:\index_forder」などフォルダ指定もできるようですが、
それを指定してもうまくいきません。(文書のあるフォルダも、カタログの
フォルダも指定してみました)
SCOPEのパスを " / " から書く場合も、どの場所がルートになっているのか
理解できていません。。。いろいろ試してはみたのですが。

何か環境面で設定しておく初歩的なことが抜けてるかもしれません。
凄い申し訳ないのですが、分かる人、いらっしゃいますでしょうか?
INDEX SERVICEは知らないのでADOの一般的な話になります。
はずしてたらごめんなさい。


RecordCountのヘルプには
RecordCount プロパティは、Recordset オブジェクトにあるレコード数を調べるのに使用します。
レコード数がわらかない場合、プロパティは -1 を返します。
とあります。-1というのはレコード数不明という意味です。

Openするまでに何も指定しなかった場合、サーバーカーソル(adUseServer)で
前方スクロール(adOpenForwardonly )のレコードセットを返しますので当然レコード数は不明です。

http://support.microsoft.com/default.aspx?scid=kb;ja;194973
に説明がありますが、サーバカーソルの場合
動的カーソル(adOpenDynamic)のとき(途中で他からの追加削除があると件数が変わる)と
前方スクロールカーソル(adOpenForwardonly)のとき(最後まで読み終わらないと件数不明)では
不明(-1)になるようですね。

Set cnn=CreateObject("ADODB.Connection")
cnn.CursorLocation = adUseClient
cnn.Open "Provider=MSIDXS;Data Source=System;Locale Identifier=1041;"
Set rst=cnn.Execute("SELECT DocTitle FROM SCOPE()")



Set cnn=CreateObject("ADODB.Connection")
cnn.Open "Provider=MSIDXS;Data Source=System;Locale Identifier=1041;"
Set rst = CreateObject("ADODB.Recordset")
Call rst.Open("SELECT DocTitle FROM SCOPE()", cnn, adOpenStatic)

あたりで動きそうな気がしますが、
プロバイダによってはクライアントカーソルをサポートしていなかったり
カーソルタイプを全部サポートしていなかったりするのでMSIDXSがどうかは
別途確認する必要があるとおもいます。
失礼、ASPだからADOの定数が定義されてませんね。

adUseClient=3
adOpenStatic=3

です。
ありがとうございます!!!!!
この質問の前に参考にしたソースが、なぜかレコードセットのループ前に
レコードカウントが0より大きかったら、と判定してたので、レコードの
総数が返ってきてるのかと勘違いしていました。
ソースは無事に動きました!
本当に有難うございました!!!
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板