ASP でのレコード セット オブジェクトの getrows と getstring の使用法を分析する必要がある場合は、GetRows メソッドを参照してください。
Recordset オブジェクトの複数のレコードを配列にコピーします。
文法
次のようにコードをコピーします。
配列 = Recordset.GetRows( 行, 開始, フィールド )
戻り値
2次元配列を返します。
パラメータ
Rows 取得するレコードの数を指定するオプションの長い式。デフォルト値は adGetRowsRest (-1) です。
Start オプション (文字列または長整数) は、GetRows 操作の開始時にレコードのブックマークを計算します。以下の BookmarkEnum 値も使用できます。
定数の説明
AdBookmarkCurrent は現在のレコードから始まります。
AdBookmarkFirst は最初のレコードから始まります。
AdBookmarkLast は最後のレコードから始まります。
Fields はオプションのバリアント型で、単一のフィールド名、連続した位置、フィールド名の配列、または連続した位置番号を表します。 ADO はこれらのフィールドからのデータのみを返します。
説明する
GetRows メソッドを使用して、Recordset から 2 次元配列にレコードをコピーします。最初の添え字はフィールドを識別し、2 番目の添え字はレコード番号を識別します。 GetRows メソッドがデータを返すときに、配列変数は正しいサイズに自動的に調整されます。
Rows パラメーターの値を指定しない場合、GetRows メソッドは Recordset オブジェクト内のすべてのレコードを自動的に取得します。使用可能なレコードよりも多くのレコードが要求された場合、GetRows は使用可能なレコードの数のみを返します。
Recordset オブジェクトがブックマークをサポートしている場合は、レコードの Bookmark プロパティの値を渡すことによって、GetRows メソッドがデータの取得を開始するレコードを指定できます。
GetRows 呼び出しによって返されるフィールドを制限するには、Fields パラメーターに単一のフィールド名/番号、またはフィールド名/番号の配列を渡すことができます。
GetRows が呼び出された後、次の未読のレコードが現在のレコードになります。または、それ以上レコードがない場合は、EOF プロパティが True に設定されます。
GetString メソッド
テーブルを表示するためにデータベースにクエリを実行する場合、Do While()...Loop または For...Next ループを使用してテーブルを表示することが多いため、大量のデータをクエリする場合は必然的に遅くなります。現時点では、レコードセット オブジェクトによって提供される GetString() メソッドを使用できます (ADO を 2.0 にアップグレードする必要があります)。
文法
次のようにコードをコピーします。
Str=objRecordset.GetString(format,n,coldel,rowdel,nullexpr)
パラメータの説明:
objRecordset: 開かれたレコードセット オブジェクト。
形式: オプション、通常はデフォルト値を使用します (デフォルト値は 2)
n: オプション、表示するレコードの数。デフォルト値はすべてを表示します。
coldel: オプション、列区切り文字
rowdel: オプション、行区切り文字
nullexpr: オプション。このパラメータは空のフィールドを埋めるために使用されます。
GetString メソッドでは、1 つの Response.Write だけを使用してすべての出力を表示できます。これは、Recordset が EOF であるかどうかを判断できる DO... LOOP ループに似ています。
このメソッドを使用すると、RS オブジェクトが作成され、1 つ以上のレコードを返すか、空のレコードを返すかに関係なく、対応する操作が実行される限り、while ループや for ループを経由することなく、ループ内に文字列を自動的に出力できます。 records、getstring 通常どおりに動作します。
Recordset の結果から HTML テーブルを生成するには、GetString の 5 つのパラメータのうち、coldel (レコードセットの列を区切る HTML コード)、rowdel (レコードセットの行を区切る HTML コード) の 3 つだけを気にする必要があります。レコードセット)、および nullexpr (現在のレコードが空の場合に生成される HTML コード)。
次のようにコードをコピーします。
<表の境界線=1>
<TR><TD>
<% = Response.Write rs.GetString( , , </TD><TD>, </TD></TR><TR>, ) %>
</テーブル>
このように記述した HTML 結果は次のようになります。
次のようにコードをコピーします。
<表の境界線=1>
<TR>
<TD>行 1、フィールド 1 の値</TD>
<TD>行 1、フィールド 2 の値</TD>
</TR>
<TR>
<TD>行 2、フィールド 1 の値</TD>
<TD>行 2、フィールド 2 の値</TD>
</TR>
</テーブル>
ここにはバグがあります。ドロップダウン メニューの生成を見てみましょう。
次のようにコードをコピーします。
<%
Set RS = conn.Execute(selectOptionsTable から値、テキストを選択、またはテキストから DER BY)
optSuffix = </OPTION> & vbNewLine
valPrefix = <オプション値='
valSuffix = '>
opts = RS.GetString( , , valSuffix, optSuffix & valPrefix, --error-- )
「次の行が鍵です!」
opts = Left( opts, Len(opts)-Len(valPrefix) )
Response.Write <Select ...> & vbNewLine
Response.Write valPrefix と opts
応答.書き込み </選択>
%>
正しいテーブルを作成してバグを解決したい場合は、次のようにしてください。
次のようにコードをコピーします。
<%
Set RS = conn.Execute(Select * FROM table)
tdSuffix = </TD> & vbNewLine & <TD>
trPrefix = <TR> & vbNewLine & <TD>
trSuffix = </TD> & vbNewLine & </TR> & vbNewLine & <TR> & vbNewLine
opts = RS.GetString( , , tdSuffix, trSuffix & trPrefix, --error-- )
「次の行が鍵です!」
opts = Left( opts, Len(opts)-Len(trPrefix) )
Response.Write <TABLE Border=1 CellPadding=5> & vbNewLine
Response.Write trPrefix と opts
Response.Write </TABLE> & vbNewLine
%>
まったく異なるアプローチを紹介しましょう。
次のようにコードをコピーします。
<%
SQL = '<OPTION Value=''',value,'''>',text,'</OPTION>' FROM table orDER BY text を選択します
Set RS = conn.Execute(SQL)
Response.Write <Select> & vbNewLine & RS.GetString(,,,vbNewLine) & </Select>
%>
使ったことがありますか? 。 。
それを見ましたか?結果はクエリから直接返すことができます。
さらに一歩進んで、次のようにすることもできます。
次のようにコードをコピーします。
<%
SQL = '<OPTION Value=''' & 値 & '''>' & テキスト & '</OPTION>' FROM テーブル orDER BY テキストを選択します
Set RS = conn.Execute(SQL)
Response.Write <Select> & vbNewLine & RS.GetString(,,,vbNewLine) & </Select>
%>
完全な例を次に示します。
スクリプト出力:
711855 水曜日 23 3/23/2005 1:33:37 AM
711856 水曜日 23 3/23/2005 1:23:00 AM
711857 水曜日 23 3/23/2005 1:26:34 AM
711858 水曜日 23 3/23/2005 1:33:53 AM
711859 水曜日 23 3/23/2005 1:30:36 AM
完全な ASP コードは次のとおりです。
次のようにコードをコピーします。
<%
' adovbs.inc から選択された定数:
定数 adClipString = 2
' 変数を宣言します...常に良い習慣です!
Dim cnnGetString ' ADO 接続
Dim rstGetString ' ADO レコードセット
Dim strDBPath ' Access DB (*.mdb) ファイルへのパス
Dim strDBData ' すべてのデータをダンプする文字列
Dim strDBDataTable ' すべてのデータをダンプする文字列
' 今回のみテーブルを作成します
' mdb ファイルの物理パスへの MapPath。
strDBPath = Server.MapPath(db_scratch.mdb)
'OLE DBを使用して接続を作成する
cnnGetString = Server.CreateObject(ADODB.Connection) を設定します。
' この行は Access サンプル データベース用です。
'cnnGetString.Open Provider=Microsoft.Jet.OLEDB.4.0;データ ソース= & strDBPath & ;
' 実際には SQL Server を使用しているため、代わりにこの行を使用します。
' この行をコメントアウトし、上の Access 行のコメントを解除します。
' 自分のサーバー上のスクリプトを使って再生します。
cnnGetString.Open プロバイダー = SQLOLEDB;データ ソース = 10.2.1.214;
& 初期カタログ=サンプル;ユーザーID=サンプル;パスワード=パスワード;
& 接続タイムアウト=15;ネットワーク ライブラリ=dbmssocn;
' 接続オブジェクトを使用して単純なクエリを実行します。
' 結果のレコードセットを変数に保存します。
Set rstGetString = cnnGetString.Execute(Select * FROM スクラッチ)
' ここからが興味深いところです...通常はそうするでしょう
' 最後のレコードに到達するまで、ある種のループ
' レコードセット内のすべてのデータを取得します。
' を一気に実行して文字列にダンプすると、
' できるだけ早く DB から切断します。
strDBData = rstGetString.GetString()
'説明のためにこれを2回行っているので...位置を変更します
' 2 回目の呼び出しの前の RS の先頭で。
rstGetString.MoveFirst
' 今回は、すべてを HTML テーブル形式に戻すように要求します。
strDBDataTable = rstGetString.GetString(adClipString, -1, _
&</td><td>, </td></tr> & vbCrLf & <tr><td>, )
' きちんとした HTML に対する私の飽くなき欲求のせいで、実際には
' 次に文字列を切り詰めます。GetString にはそれしかありません。
' 行間を区切るパラメータであり、個別のパラメータではありません
' 最後の行の後に何を配置するかを指定します。
' HTML テーブルの構築方法では、余分な問題が残ります。
' <tr><td> は最後のレコードの後に配置されます。
' 何もないので末尾の区切り文字全体
' else をそこに配置すると、多くの状況でこれでうまく機能します。
' HTML に関しては、ほとんどの開発者は少し奇妙です。
「列を閉じて先に進みますが、その気にはなれませんでした」
余分な行は残しておきます...特に、
' 他のすべてのセルとは異なる数のセル。
何と言うか…こういうことが気になるんです ;)
strDBDataTable = Left(strDBDataTable, Len(strDBDataTable) - Len(<tr><td>))
' .GetString に関するいくつかのメモ:
' メソッドは実際には最大 5 つのオプションの引数を受け取ります。
' 1. StringFormat - 返される形式
' レコードセットのテキストは adClipString のみです。
' 有効な値。
' 2. NumRows - デフォルトで返される行数。
' から -1 はすべての行を示します。
' 3. ColumnDelimiter - 列の間に配置するテキスト。
'デフォルトはタブ文字です
' 4. RowDelimiter - 行の間に配置するテキスト
'デフォルトはキャリッジリターンです
' 5. NullExpr - NULL 値が存在する場合に使用する式
' デフォルトでは空の文字列が返されます。
' レコードセットと接続を閉じ、オブジェクトを破棄します。
「心配する前にこれができることに気づいてください」
' 任意のデータを表示しています!
rstGetString.Close
rstGetString = なしを設定します
cnnGetString.Close
cnnGetString = なしを設定します
' データのテーブルを表示するのは特に必要ありません。
' GetString 呼び出しがほとんどすべてを行って以来の書式設定
' 表のテキストを作成するという点で私たちに役立ちます。
Response.Write <table border=1> & vbCrLf
応答.書き込み <tr><td>
Response.StrDBDataTable の書き込み
Response.Write </table> & vbCrLf
' 参考: GetString を実行できない場合に得られる出力形式は次のとおりです。
' パラメータなし:
Response.Write vbCrLf & <p>フォーマットされていないバージョンは次のとおりです:</p> & vbCrLf
Response.Write <pre> & vbCrLf
Response.Write strDBDataResponse.Write </pre> & vbCrLf
' 以上です、皆さん!
%>