SQLserverからのデータ取得

このQ&Aのポイント
  • SQLserver2000からデータを取得し、テーブルの件数を表示する方法について困っています
  • ASPでの開発中にSQLserver2000からデータを取得しようとした際、ページを表示できないエラーが発生しました
  • デバッグ方法がわからず、どこでエラーが発生しているのか特定できません。クライアント先でのツールやソフトウェアのインストールができないため、別の解決策を探しています
回答を見る
  • ベストアンサー

SQLserverからのデータ取得

はじめまして。カナと申します。 突然ASPで開発をすることになり、謎だらけで大変困っています。宜しくお願いいたします。 ・windowsXP ・Vbscript ・IIS5.0 質問:SQLserver2000からデータを取得し、そのテーブルの件数を表示する 以下のように記述したところ、ブラウザで確認すると「ページを表示できません 」になってしまいます。 ------- <%@ LANGUAGE="VBScript" %> <% option explicit %> <% Dim objCon ' DB接続コネクション Dim objRS ' DB結果レコードセット Dim sql ' SQL文 Dim errflg ' エラーフラグ 'DataSource名 Const DS = "111.111.0.1" ←IPアドレス。正しいものをいれてます Const IC = "DB名"      'ユーザ名 Const User = "sa" 'パスワード Const Pwd = "sa" Set objCon = Server.CreateObject("ADODB.Connection") Set objRS = Server.CreateObject("ADODB.Recordset") objCon.ConnectionString = "Provider=SQLOLEDB;" & _ "User ID=" & User & ";" & _ "Password=" & Pwd & ";" & _ "Data Source=" & DS & ";" & _ "Initial Catalog=" & IC objCon.Open sql = "select * from Aテーブル" objRS.Open sql,objCon,adOpenStatic,adLockReadOnly %> レコード件数 <%=objRS.RecordCount%> <% ' DBclose objCon.Close() Set objCon = Nothing objRS.Close() Set objRS = Nothing %> --------------- 以上です。どこかおかしいのでしょうか・・・。 VBAは触ったことがあるのですが、VBAのようにブレークポイントを付けるデバッグが出来ないので、どこで落ちたのかもわからず困っています。 こういう場合の、上手なデバッグ方法があれば、それもご教授いただきたいです。ちなみに客先なので、ソフトやツールのインストールなどは出来ません・・・。 前に進めず、本当に困っています。 どなたか、宜しくお願いいたします!

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

SQLサーバーのデータベースへのアクセス出来るユーザーに 『IUSER_サーバー名』のユーザーは追加なさっていますか? OfficeXP以降がインストールされているのであれば Officeの一部である Microsoft Script Editor(MSE7.exe)でデバッグしてみてはいかがでしょう どこまで動いているのか確認なさったほうがいいように思います 怪しいと思われる部分以前のコードにして Response.WriteなどでHTML出力してエラーの特定をしましょう

asakosuper
質問者

お礼

返信ありがとうございます。 確認したところ、おっしゃるとおりユーザー名の追加で解決できました!感謝感謝です。 あと、Microsoft Script Editorはインストールされていませんでした。 response.Writeで、「この辺かな?」とこまめに追っていくしかないのかなと思うのですが、いまいち使いこなせません。 例えば、コネクションが既にopenされているのにcloseせずにまたopenしようとすると、エラーになり2度目のopenはできませんが、ブラウザで確認するとなんのエラーメッセージも表示されず、確認が難しいです。 このような、DBに関わる部分の確認は、openしたあとに取得した項目を Response.Writeで表示するなどして確認していくしかないのでしょうか? (出来るだけ、sprict editerなどは使わない方法だと・・・) 重ねて申し訳ありませんが、宜しくお願いいたします。

その他の回答 (1)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

ASPのデバッグだと こまめにRespose.Writeで書き出すしか無いでしょうね VBSファイルなどで先にある程度デバッグしてからASPに更新して といった手順もありますが 実行者がVBSとASPで異なりますので権限などの違いによりVBSではOKなのに ASPではNGといった現象も起きます コマンドプロンプトなどで実行されるVBSではログインユーザーの権限で実行されるのですがASPでは『IUSER_XXX』で実行するので『Guests』グループの権限しかありませんので … Connectionなら Stateプロパティで確認出来そうですよ Const adStateClosed = 0 if cnn.State == adStateClosed then   cnn.Open End if といった具合ですけど 私は開発時に Open/Closeなど対になっている物の場合先に両方をコーディングしてから中身の記述をする癖つけています # たまには忘れてて … バグる時もありますが

asakosuper
質問者

お礼

返信ありがとうございます。 VBSで・・・でも確かに微妙に異なるのだと、ちょっと怖いですね。 >Connectionなら Stateプロパティで確認出来そうですよ なるほど!参考にさせて頂きます。対の場合も、やっぱりクセづけて慣れていくのが一番なんですね。 地道に、追っていけるようがんばってみます。 大変参考になりました! また質問させていただくと思いますが、その際は宜しくお願いいたします。 本当にありがとうございました。

関連するQ&A

  • SQLサーバーへの接続が どうしてもウマくいきません

    SQLサーバーを始めたばかり です。 ASPで SQLサーバーのデータを表示しようとしています。 環境: WinXP (Pro)     IIS設定済み     SQL Server 2005 Express Edition 近くに2003サーバーがあるので 最終的にはそちらで動作させる予定です。 サーバーが現用機なので 自PCで動作確認してからと思っています。 色々ネットを調べて まず接続しようとしましたが そこでつまづいています。 この方法以外も沢山試しましたが全てうまく行きません。 2005 ExpressでDBとテスト用のテーブルが作成してあります。 そのデータを読み出せれば 第一段階とトライしますが、 IEから接続にいくと「objCon.Open」がエラーになってしまいます。 ASPファイルの内容は 以下です なお DB名は 「PC名¥SQLEXPRESS」といれています よろしく お願いします ---------------------------------------------------- <%@ LANGUAGE="VBScript" %> <% option explicit %> <% Dim objCon ' DB接続コネクション Dim objRS ' DB結果レコードセット Dim sql ' SQL文 Dim errflg ' エラーフラグ 'DataSource名 Const DS = "111.111.0.1" ←IPアドレス。正しいものをいれてます Const IC = "DB名"      'ユーザ名 Const User = "sa" 'パスワード Const Pwd = "sa" Set objCon = Server.CreateObject("ADODB.Connection") Set objRS = Server.CreateObject("ADODB.Recordset") objCon.ConnectionString = "Provider=SQLOLEDB;" & _ "User ID=" & User & ";" & _ "Password=" & Pwd & ";" & _ "Data Source=" & DS & ";" & _ "Initial Catalog=" & IC objCon.Open sql = "select * from Aテーブル" objRS.Open sql,objCon,adOpenStatic,adLockReadOnly %> レコード件数 <%=objRS.RecordCount%> <% ' DBclose objCon.Close() Set objCon = Nothing objRS.Close() Set objRS = Nothing %>

  • SQLサーバーへの接続に 接続したいのですが・・・

    質問する場所が 違ったかもしれないので 再度質問させていただきます。 SQLサーバーを始めたばかり です。 ASPで SQLサーバーのデータを表示しようとしています。 環境: WinXP (Pro)     IIS設定済み     SQL Server 2005 Express Edition 近くに2003サーバーがあるので 最終的にはそちらで動作させる予定です。 サーバーが現用機なので 自PCで動作確認してからと思っています。 色々ネットや本を調べて まず接続しようとしましたが そこでつまづいています。 この方法以外も沢山試しましたが全てうまく行きません。 2005 ExpressでDBとテスト用のテーブルが作成してあります。 そのデータを読み出せれば 第一段階とトライしますが、 IEから接続にいくと「objCon.Open」がエラーになってしまいます。 ASPファイルの内容は 以下です なお DB名は 「作成した名前」と入れています よろしく お願いします ---------------------------------------------------- <%@ LANGUAGE="VBScript" %> <% option explicit %> <% Dim objCon ' DB接続コネクション Dim objRS ' DB結果レコードセット Dim sql ' SQL文 Dim errflg ' エラーフラグ 'DataSource名 Const DS = "111.111.0.1" ←IPアドレス。正しいものをいれてます Const IC = "DB名"      'ユーザ名 Const User = "sa" 'パスワード Const Pwd = "sa" Set objCon = Server.CreateObject("ADODB.Connection") Set objRS = Server.CreateObject("ADODB.Recordset") objCon.ConnectionString = "Provider=SQLOLEDB;" & _ "User ID=" & User & ";" & _ "Password=" & Pwd & ";" & _ "Data Source=" & DS & ";" & _ "Initial Catalog=" & IC objCon.Open'ここで エラーになります sql = "select * from Aテーブル" objRS.Open sql,objCon,adOpenStatic,adLockReadOnly %> レコード件数 <%=objRS.RecordCount%> <% ' DBclose objCon.Close() Set objCon = Nothing objRS.Close() Set objRS = Nothing %> なお エラー内容は 以下です ----------------------------- HTTP 500.100 - 内部サーバー エラー - ASP エラー インターネット インフォメーション サービス エラー タイプ Microsoft OLE DB Provider for SQL Server (0x80004005) [DBNETLIB][ConnectionOpen (Invalid Instance()).]接続が正しくありません ----------------------------- また  1.IPアドレスは Const DS = "127.0.0.1"でも 同様なエラーです 2.表示できるASPファイルを置き、他のPCから 表示できる環境です

  • VBscriptでAccessに接続。PCで結果が異なる。

    VBscriptでAccessに接続。 PC1ではDBの検索結果が表示されますが PC2では表示されません。 PC1はWindows XP Pro IIS Access 2000 PC2はWindows server 2003 IIs Access 2000 当然ながらソースは同じです。 プログラムの問題でしょうか。 それともなにか設定の問題でしょうか。 VBscript 部分 <% '========================================================================================================== Dim objCon Dim objRS Dim strSQL '======================================= dim objfs dim strFDIRNAME Set objFS = Server.CreateObject("Scripting.FileSystemObject") strFDIRNAME = Server.MapPath(".") 'フォルダー名取得 '======================================= '##### コネクションオブジェクトの生成 ##### Set objCon = Server.CreateObject("ADODB.Connection") '##### 接続用パレメータの設定 ##### objCon.Provider = "Microsoft.Jet.OLEDB.4.0" Set objRS = Server.CreateObject("ADODB.Recordset") '##### MDBの絶対パス指定 ##### objCon.ConnectionString =strFDIRNAME & "\" & "meibo.mdb" '##### コネクションのオープン ##### objCon.Open '##### SQLの作成 ##### strSQL = "select DISTINCT 社員名 from TABLE " '##### レコードセットのオープン ##### objRS.Open strSQL, objCon, 3 Recnm=objRS.RecordCount Do Until objRS.EOF %> <OPTION value="<%=objRS("社員名").value%>"><%=objRS("社員名").value%></OPTION> <% '##### 次のレコードを参照 ##### objRS.MoveNext Loop end if %> <% '##### コネクションのクローズ ##### objCon.Close '##### コネクションオブジェクトの解放 ##### Set objCon = Nothing '================ %>

  • レコードセットのオープン

    修行中のものです。。。 エラーが発生してしまします。 間違いの点をお教え下さい。 自分的には”レコードセットのオープン”がいまいち分かりません。 【 objCon.Open 】 Dim objCon Dim objRS '##### コネクションオブジェクトの生成 ##### Set objCon = Server.CreateObject("ADODB.Connection") '##### レコードセットオブジェクトの生成 ##### Set objRS = Server.CreateObject("ADODB.Recordset") '##### 接続用パレメータの設定 ##### objCon.Provider = "Microsoft.Jet.OLEDB.4.0" '##### MDBの絶対パス指定 ##### objCon.ConnectionString = (Server.MapPath("/") & "データベース") '##### コネクションのオープン ##### objCon.Open '##### データ参照 ##### objRS = "select [ID],[NAME],[URL],[CM1],[CM2],[CM3] from SITE_DATA" %> レコード件数 <%=objRS.RecordCount%> <hr> <% '##### レコードセットのクローズ ##### objRS.Close Set objRS = Nothing '##### コネクションのクローズ ##### objCon.Close Set objCon = Nothing %> お願いします

  • ASPのログイン制限に関する質問です

    現在ログイン制限のページを作成しているのですがユーザーIDとパスワードを入力した情報を現在作成している関数に渡すとエラーがおきてしまいます。原因がわからないので助言をお願いします。 SQLの定義ですがすべてvarcharです。 以下コード ---------------------------------------------------------- 'ログイン画面からのデータを取得 user_id = Request.form("user_id") password = Request.form("password") function user_check(user_id, password) set objCon = Server.CreateObject("ADODB.Connection") set objRS = Server.CreateObject("ADODB.Recordset") objCon.ConnectionString = "DSN=・・・・;"& _ "UID=root;" & _ "PWD=・・・・・;" objCon.Open '入力した情報と一致するものを探す strSQL = "select person_code, password from person_master" & _ "where code = '" &user_id& "' and password = '" &password& "'" objRS.Open strSQL, objCon, 3 If objRS.EOF or objRS.BOF then user_check = "NG" else user_check = "OK" end If objRS.close set objRS = nothing objRS.close set objCon = nothing end function if user_check(user_id, password) <> "OK" then response.redirect "index.asp" else response.redirect "main.asp" end if

  • ASPでボタンクリック時にフォームのリフレッシュ

    こんばんわ。 質問です。 ASPで作成した質問ページに表示されている質問の回答と、テキストボックスに入力されている文字列をリフレッシュしたいです。 質問の回答は、ラジオボタンをチェックしてあります。 そして、このあと、ADO接続で、SQLサーバーに接続して、テキストボックスに入力されていた文字列を選択し、文字列がDB内にあれば、その文字列をテキストボックスに再表示します。 以下のようなコードを書きましたが、何も表示されません。 <% Dim objCon Dim objRS Dim strSQL Dim strUserID Dim strOCD 'フォーム内のリフレッシュを行いたい ' コネクションオブジェクトの生成 Set objCon = Server.CreateObject("ADODB.Connection") Set objRS = Server.CreateObject("ADODB.Connection") ' コネクションストリングの設定 objCon.ConnectionString = "Provider=SQLOLEDB;" & _ "User ID=id;" & _ "Password=pw;" & _ "Data Source=server1;" & _ "Initial Catalog=data1" ' コネクションのオープン objCon.Open strUserID = obj.uerID.value set strSQL = "Select ID, dnum from emp Where CorpId='"& obj.userID.value &"'" 'レコードセットのオープン objRS.Open strSQL, objCon, 3 'EOF が True になるまで繰り返し Do Until objRS.EOF if objrs.RecordCount=0 then Msg "正しいIDを入力してください! Insert correct ID ! " else obj.ID.value = strSQL("txtid") obj.dnum.value = strSQL("txtdnum") end if '次のレコードを参照 objRS.MoveNext Loop 'コネクションのクローズ objCon.Close ' コネクションオブジェクトの解放 Set objCon = Nothing %> ご教示いただけると、幸いです。

  • Windows認証でDBにアクセスできない

    以下の構成のマシン一台で行っています。 WindowsXp Pro SP3 IIS5.1(OS添付のIIS) VS2010 SQL Server2008 R2 Express すべて最新にアップデート済みです。」 この状態で以下のASPプログラムの objCon.Open(Session("DBName00")) の部分で Microsoft OLE DB Provider for SQL Server: このログインで要求されたデータベース "TTTT" を開けません。 ログインに失敗しました。 というエラーになります。 ASPソースは以下の通りです。 <%@ TRANSACTION=Required Language=VBScript %> <%Response.Buffer = TRUE %> <% Session("DBName00") = "Provider=SQLOLEDB;" & _ "Data Source=XXXXX\SQLEXPRESS;" & _ "Initial Catalog=TTTT;" & _ "Trusted_Connection=yes;" & _ "Integrated Security=SSPI" Set objCon = Server.CreateObject("ADODB.Connection") Set objRs = Server.CreateObject("ADODB.Recordset") objCon.Open(Session("DBName00")) objRS.Open strSQL, objCon, 3 objRS.Close Set objRS = Nothing objCon.Close %> SQL Server2008 R2 のインストールは混合モード認証で作成してあります。 また「XXXXX\SQLEXPRESS」は SQLServer Management Studio でログインするときのサーバー名です。 Windows認証で接続したいと思っているのですがなぜかうまくいきません。 何が悪いのか判らず困っています。すみませんがよろしくお願いします。

  • ASP + MDBで発生したエラーが解決できません。。。

    こんにちは。 いま、ローカルPCでシステム開発をしています。 環境としては、  WindowsXP + IIS + ASP + MDB(ACCESS2003) です。 いま、MDBにDB接続して、データを取得しようとしているのですが、以下のエラーが発生していて、治りません。 【エラータイプ】 Microsoft VBScript 実行時エラー (0x800A01B6) オブジェクトでサポートされていないプロパティまたはメソッドです。:Open ソースコードは以下の通りです。 【ソース】 'コネクションオブジェクト Set objCon = Server.CreateObject("ADODB.Connection") objCon.Provider = "Microsoft.Jet.OLEDB.4.0" objCon.ConnectionString = "C:\test.mdb" objCon.Open 'レコードセットオブジェクト objRs = Server.CreateObject("ADODB.Recordset") objRs.Open strSQL, objCon, 3 上記のobjRs.Open→Set objRs = objCon.Executeに変更するとエラーは発生しないのですが、RecordCountなどのプロパティが利用できません。 色々と調査したのですが、全くわかりません。 どなたか情報をご存知でしたら、ぜひともご教示ください。 宜しくお願いします。

  • コネクションオブジェクトについて

    お世話になります。 ASPにて顧客管理システムを作成しておりまして、SQL Serverへ接続しております。 顧客台帳を作成する際にフォームから登録する処理を書いて参照するページの作成などしておりました。その際に各ページでデータベースへのアクセスをしておりまして、複数のページでデータベースを使用するため毎度コネクションの生成をし、設定をし、呼び出して、クローズして、開放して、とかなり無駄なような気がします。記述はincludeを使用していてそれほどおかしくないのですがGlobal.asaを使用してApplication実行時は常に接続している状態を保ちたく思います。Global.asaにはApplication("○○") = ○○など記述すると書籍に書いておりましたが、データベースへのコネクションの処理などは記述することはできないのでしょうか?データベースへの接続の処理は下記のようになっております。是非ご教授お願いします。 Set objCon = Server.CreateObject("ADODB.Connection") objCon.ConnectionString = "Provider=SQLOLEDB;" &_ "User ID=○○;" &_ "Password=○○; &_ "DataSource=IPアドレス;" &_ "Initial Catalog=データベース名" objCon.Open Set objRS = Server.CreateObject("ADODB.Recordset") '終了時 objRS.Close Set objRS = Nothing objCon.Close Set objCon = Nothing

  • (泣)VBscriptでinnerhtmlを使って表示したい・・・

    VBscriptをつかってHTA上で実行した結果をHTMLへ動的に表示させたいのですがうまく出来ずに悩んでおります。一応VBの部分はちゃんと出来ていることは確認していますが表示が全くダメです。 どなたか教えて下さい。 Option Explicit Dim objAccess Dim objDB Dim objRS Set objAccess = CreateObject("Access.Application") objAccess.Visible = True objAccess.OpenCurrentDatabase("c:\happy\island.mdb") Set objDB = objAccess.CurrentDb Set objRS = objDB.OpenRecordset("SELECT COUNT(*) AS 件 FROM 住所録テーブル") WScript.echo "件数=" & objRS("件数") objRS.Close Set objRS = Nothing Set objDB = Nothing Set objAccess = Nothing 件数をWScript.echoではなくinnerhtmlで表示したいです。 またSQLを("SELECT * FROM 住所録テーブル")にした場合データをレコードセットで抽出し必要なデータを表にして表示をしたいのですが・・・(これもinnerhtmlを使いたい)