0

したがって、次のように作成されたレコードセットがあります。

Set rs = Server.CreateObject("ADODB.Recordset")

そして、次のように入力します。

rs.Open queryString, AuthConn, adOpenKeyset, adLockReadOnly

私の質問は、最初の (rs) レコードセットのサブセットである 2 番目のレコードセットが欲しいということです。クラシック ASP でこれを行うことができますか?

Set rs2 = Server.CreateObject("ADODB.Recordset")

私の当面の推測は、それはこのようなものになるだろうということです

rs2.Open queryString, rs, adOpenKeyset, adLockReadOnly

なぜ聞くの?古いサイトを更新して新しい機能を追加しているのですが、多くのコードを変更するのではなく、こっそりと作成済みの (大きな) レコードセットのセットセットを使用して、別のクエリを節約できるかどうか疑問に思っていました。データベースなど。それができるかどうか疑問に思っています。

ありがとう、

4

3 に答える 3

3

メソッドを使用Cloneして複製レコードセットを作成し、次に使用Filterしてデータセットを目的のものに縮小できます。次に例を示します。

Dim rs, rs2
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open queryString, AuthConn, adOpenKeyset, adLockReadOnly

Set rs2 = rs.Clone()
rs2.Filter = "Field1 = 'foo'"

の文字列形式Filterは基本的です。それはかなり<Field> <op> <value>です。ANDと を使用して複数の式を組み合わせることができますがOR、それでもいくつかの制限があります (詳細については、ドキュメントのリンクを参照してください)。

より複雑なフィルタリングを行うには、Filterプロパティにオブジェクトの配列を渡すことができBookmarkます。この場合、レコードセット (またはレコードセットの複製) をループ処理し、複雑な条件で各レコードをテストします。Bookmarkレコードがテストに合格した場合は、そのレコードを配列または他のコレクションに保存します。次に、このFilterプロパティをブックマークの配列に設定すると、カスタム フィルター処理されたレコードセットが作成されます。

'Note that I haven't tested this code
Dim rs, rs2, bookmarks
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open queryString, AuthConn, adOpenKeyset, adLockReadOnly

Set rs2 = rs.Clone()
bookmarks = Array()
Do Until rs2.EOF
    If rs2("Field1") = 2 * rs2("Field2") Then
        ReDim Preserve bookmarks(UBound(bookmarks) + 1)
        bookmarks(UBound(bookmarks)) = rs2.Bookmark
    End If
    rs2.MoveNext
Loop

rs2.Filter = bookmarks
' Now rs2 contains only records where Field1 = 2*Field2

これと同じ手法を使用して、Dictionaryオブジェクトを使用して一意のキー値を格納することにより、一意の値 (別名 DISTINCT) を取得できます。複数のフィールドで DISTINCT を実行するのは少しトリッキーです。私が行ったことは、データに含まれないセパレーター (パイプなど|) を使用して複数のフィールドを結合することです。ただし、それが常に可能であるとは限りません。

于 2013-08-23T06:16:04.083 に答える
0

明らかに、2番目のクエリとレコードセットを作成し、「do while not rs.eof............ループ」内で何度も実行できます-それは避けたいことだと思います。

Datashaping を参照してください。ここにそれに関する記事があります。それは古いですが、これはクラシック ASP です

http://www.4guysfromrolla.com/webtech/092599-1.shtml

また、以前は MSDN に「データ シェイプを使用して階層レコードセットを作成する」というページがありました。Google にはたくさんのリンクがありますが、すべて .net 開発者向けのリソースの 404 ページに移動します :(

于 2013-08-23T09:55:31.550 に答える