2016-09-29 8 views
0

古い古典的なASPサイトで作業していて、問題が発生しました。私はデータベーステーブルを照会できますが、ビューは照会できません。SQLビューを照会できません

テーブルにこのクエリは、行の正しい数を返し:

Set rs = Server.CreateObject("ADODB.Recordset") 
sqlQuery = "SELECT * FROM tblContent;" 
rs.Open sqlQuery, conn, 1, 2 
response.write "q1 cnt = " & rs.RecordCount 

をビュー上の同じクエリが-1を返す:

Set rs = Server.CreateObject("ADODB.Recordset") 
sqlQuery = "SELECT * FROM myView;" 
rs.Open sqlQuery, conn, 1, 2 
response.write "q2 cnt = " & rs.RecordCount 

から実行する場合、両方のクエリが行の正しい数を返しますSQL Server Management Studioですが、.asp Webページから呼び出された場合は1つのみ動作します。同じことがDBのすべてのテーブルとビューに適用されているようです(私はそれぞれの半分をテストしました)。

ここで何が起こっているかについて手掛かりを与えることができますか?

+1

SQLレベルで行を数えます。あなたはあなたのクエリ 'SELECT COUNT(*)myrecordcount FROM myView'を持つことができ、' rs( "myrecordcount") ' – John

+0

@John:Thanksの値を表示することができました。私はまだ上記に困惑していますが、あなたの回避策は私が必要とするものを正確に行います。あなたが答えを出すなら、それを受け入れます。乾杯。 – Robert

+1

ビューのクエリはおそらく正しい行を返します*。それはちょうど正しい値を得ない '.RecordCount'プロパティです。もう一つの回避策は、結果を配列に埋め込み( 'GetRows'を使って)、' UBound() 'を使うことです。 – Martha

答えて

1

OKを開こうとすると、ここではこれが回避策です

答えとして私のコメントですが、それは理由を説明しません。 recordcountプロパティはビューでは機能しませんが、SQLクエリを使用して行をカウントすることができます。たとえば

Set rs = Server.CreateObject("ADODB.Recordset") 
sqlQuery = "SELECT COUNT(*) as myrecordcount FROM myView;" 
rs.Open sqlQuery, conn, 1, 2 
response.write "q2 cnt = " & rs("myrecordcount") 
-1

ビューで失敗する可能性のある編集可能なレコードセットを要求しています。デフォルトの順方向専用、読み取り専用レコード

rs.Open sqlQuery, conn, adOpenForwardOnly, adLockReadOnly 

または

rs.Open sqlQuery, conn, 0, 1 
+0

ありがとうございますが、それでも-1を返します。 – Robert

+3

"RecordCountプロパティは、転送専用カーソルの場合は-1を返します"(https://msdn.microsoft.com/de-de/library/ms676701(v=vs.85).aspxを参照)ので、このmisを削除してください-情報。 (上の投票者は恥じているはずです) –

関連する問題