アプリ版:「スタンプのみでお礼する」機能のリリースについて

ASP+MSDE 実用Webアプリケーション作成ガイド「ASP実践プログラミング入門」
と言う本を頼りにASPを勉強中です。

現在は、
(1) SQL Server2000内にDBとTable(user_info)を作成。
(2) global.asaファイルを設置。
(3) 「ユーザ登録」aspを実行。(user_infoに追加された)
(4) 「ログオン」aspを実行。

と進めていますが、(4)を実行しID+パスワードを入力後に次のような
エラーがブラウザ上に表示されます。

どなたかお助け頂きたくお願いします。


Q1)『ADODB.Connection (0x800A0E79)オブジェクト・・』と怒られている
  ようですが、何が原因なのでしょうか?

Q2) 解決に向けて調べるべき要点はどこでしょうか?


■発生したエラーはここから■
(IE上の表示です)

ページを表示できません
接続しようとするページに問題があるため、そのページを表示できません。
---------------------対処方法

・[更新] をクリックするか、後で再度実行してください。
・次のホームページ 1**.**.***.**6を開き、 必要な情報が記載されたページ
 へのリンクを探します。
HTTP 500.100 - 内部サーバー エラー - ASP エラー
インターネット インフォメーション サービス
---------------------
技術情報 (サポート担当者用)
・エラー タイプ
 ADODB.Connection (0x800A0E79)
 オブジェクトが開いている場合は、操作は許可されません。
 /mailhen/logon.asp, line 4

・ページ
 POST 27 bytes to /mailhen/logon.asp

・POST Data:
 user=mura****&pass=r*****k

■ここまで■

/mailhen/logon.asp, line 4
1:<% If Request.Form("user") <> "" Then
2: user_id = Request.Form("user")
3: password = Request.Form("pass")
4: adcn.Open Application("DBCN")
5: adrs.Open "select * from user_inf

A 回答 (2件)

murasacoさん、はじめまして^^



コネクションエラーについてですが、DBまでのパスがあっているかどうかや、ファイル名の指定にミスが無いかどうかをまず確認すると良いと思います。
あとはSQLを実行させる際に、入力された文字などが正しく入ってきているかどうかを確認する為に、Response.writeでSQLの入っている変数を表示してみると良いと思います。

データベースソフトはACCSESSですかね?
その場合はファイルがロックされていないかどうかも確認してみると良いかもしれません^^

この回答への補足

global.asa
1:<!-- METADATA TYPE="TypeLib"
2: NAME="Microsoft ActiveX Data Objects 2.6 Library"
3: UUID="{00000206-0000-0010-8000-00AA006D2EA4}" -->
4:<!-- METADATA TYPE="typelib" NAME="Microsoft Scripting Runtime"
5: UUID="{420B2830-E718-11CF-893D-00A0C9054228}" -->
6:
7:<OBJECT RUNAT="server" SCOPE="session" ID="adcn"
8: PROGID="ADODB.Connection">
9:</OBJECT>
10:<OBJECT RUNAT="server" SCOPE="session" ID="adrs"
11: PROGID="ADODB.Recordset">
12:</OBJECT>
13:<OBJECT RUNAT="server" SCOPE="session" ID="fso"
14: PROGID="Scripting.FileSystemObject">
15:</OBJECT>
16:
17:<SCRIPT LANGUAGE="vbscript" RUNAT="server">
18:' Webアプリケーション起動処理
19:Sub Application_OnStart
20: ' 初期値
21: Application("FONTSIZE") = "9pt"
22: Application("HOME") = "/mailhen/"
23: Application("DBCN") = _
24: "PROVIDER=SQLOLEDB;SERVER=(local);DATABASE=mailhen;UID=sa;PWD="
25: ' アクセスカウンターの初期化処理
26: Application("COUNTER") = 0
27: name = fso.BuildPath(Server.MapPath("./"), "temp\access.cnt")
28: If fso.FileExists(name) Then
29: Set fh = fso.OpenTextFile(name)
30: Application("COUNTER") = CInt(fh.ReadLine)
31: fh.Close
32: End If
33: ' Webチャット用の初期化処理
34: Application("CHFLAG") = 0
35: Application("CHUSER") = ""
36: Application("CHMESS") = ""
37: ' ディスク管理用の初期化処理
38: Application("CURDRIVE") = "C"
39: ' データベース管理用の初期化処理
40: Application("DBKR") = "PROVIDER=SQLOLEDB;SERVER=(local);UID=sa;PWD="
41: Application("DEFDB") = "master"
42: Application("DATAMAX") = 10
43: Application("TYPELIST") = "bit,char,datetime,float,int,smallint,varchar"
44:End Sub
45:
46:' Webアプリケーション終了処理
47:Sub Application_OnEnd
48:End Sub
49:
50:' ユーザセッション開始処理
51:Sub Session_OnStart
52: ' ユーザー認証用の画面遷移
53: list = Split(LCase(Request.ServerVariables("SCRIPT_NAME")), "/")
54: scrp = list(UBound(list))
55: If scrp <> "logon.asp" And scrp <> "user_regist.asp" Then
56: Response.Redirect Application("HOME") & "logon.asp"
57: End If
58: ' ディスク管理用の初期化処理
59: Session("CURDRIVE") = Application("CURDRIVE")
60: Session("CURFOLDER") = Application("CURDRIVE") & ":\"
61: ' データベース管理用の初期化処理
62: Session("DATABASE") = Application("DEFDB")
63:End Sub
64:
65:' ユーザセッション終了処理
66:Sub Session_OnEnd
67:End Sub
68:</SCRIPT>

login.asp
1:<% If Request.Form("user") <> "" Then
2: user_id = Request.Form("user")
3: password = Request.Form("pass")
4: adcn.Open Application("DBCN")
5: adrs.Open "select * from user_info where user_id='" & user_id & _
6: "' and password='" & password & "'", adcn, _
7: adOpenStatic, adLockOptimistic, adCmdText
8: ' ユーザー情報にマッチしたら取得して最終ログオンを更新
9: If Not adrs.EOF Then
10: Session("USER") = adrs("user_id").Value
11: Session("AUTH") = adrs("authority").Value
12: adrs("last_logon").Value = Now
13: adrs.Update
14: ' ここにアクセスカウンター用スクリプトを記述する
15: Application.Lock
16: Application("COUNTER") = Application("COUNTER") + 1
17: name = fso.BuildPath(Server.MapPath("./"), "temp\access.cnt")
18: Set fh = fso.CreateTextFile(name, True)
19: fh.WriteLine CStr(Application("COUNTER"))
20: fh.Close
21: Session("COUNTER") = Application("COUNTER")
22: Application.UnLock
23: ' ここに接続履歴用スクリプトを記述する
24: adrs.Close
25: adrs.Open "accesslog", adcn, adOpenStatic, adLockOptimistic, adCmdTable
26: adrs.AddNew
27: adrs("access").Value = Now
28: adrs("ipaddr").Value = Request.ServerVariables("REMOTE_ADDR")
29: adrs("lang").Value = Request.ServerVariables("HTTP_ACCEPT_LANGUAGE")
30: adrs("agent").Value = Request.ServerVariables("HTTP_USER_AGENT")
31: adrs.Update
32: ' ユーザー情報にマッチしなかったらセッションを終了
33: Else
34: Session.Abandon
35: End If
36: adrs.Close
37: adcn.Close
38: Response.Redirect Application("HOME")
39: Else
40: ' 登録済みユーザー数取得
41: adcn.Open Application("DBCN")
42: adrs.Open "select count(*) from user_info", adcn, _
43: adOpenForwardOnly, adLockReadOnly, adCmdText
44: count = adrs(0).Value
45: adrs.Close
46: adcn.Close
47: ' ユーザー情報がない場合はユーザー登録画面に遷移
48: If count = 0 Then
49: Response.Redirect "user_regist.asp"
50: End If
51: End If %>
52:<HTML>
53:<HEAD>
54:<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=shift_jis">
55:<TITLE>ログオン</TITLE>
56:<STYLE TYPE="text/css">
57:<!--
57:BODY {font-size:<%= Application("FONTSIZE") %>;}
59:TD {font-size:<%= Application("FONTSIZE") %>;}
60:-->
61:</STYLE>
62:<SCRIPT LANGUAGE="javascript">
63:<!--
64:function fnSubmit() {
65: if (fm.user.value == "") {
66: alert("ユーザーIDを入力してください。");
67: return false;
68: }
69: return true;
70:}
71:-->
72:</SCRIPT>
73:</HEAD>
74:<BODY>
75:ユーザーログオン
76:<HR>
77:<FORM NAME="fm" METHOD="post" ACTION="logon.asp" onSubmit="return fnSubmit();">
78:<TABLE BORDER="0">
79:<TR>
80:<TD>ユーザーID:</TD>
81:<TD><INPUT NAME="user" TYPE="text"></TD>
82:</TR>
83:<TR>
84:<TD>パスワード:</TD>
85:<TD><INPUT NAME="pass" TYPE="password"></TD>
86:</TR>
87:</TABLE>
88:<HR>
89:<INPUT TYPE="submit" VALUE="ログオン">
90:<INPUT TYPE="button" VALUE="ユーザー登録"
91: onClick="document.location.href='user_regist.asp'">
92:</FORM>
93:</BODY>
94:</HTML>
95:<% Session.Abandon %>

補足日時:2003/02/03 16:07
    • good
    • 1
この回答へのお礼

WhiteMageさん

 『ファイル名の指定にミスが無いか』と言うご指摘の通り、ファイルへのパス名に誤りがありました。あまりにも初歩的な間違いでお騒がせしてすみません。
 これからも、どうぞ見捨てずに助けてください。どうもありがとうございました。

(誤)27: name = fso.BuildPath(Server.MapPath("./"), "temp\access.cnt")
(正)27: name = fso.BuildPath(Server.MapPath("./"), "tmp\access.cnt")

 実際には、フォルダ名をtmp⇒tempに修正しました。

お礼日時:2003/02/03 17:27

ごめんなさい、補足です^^;



オブジェクトが開いている場合は・・・・というエラーがでているようですが、できましたら、ソースを見せていただけるとうれしいです。
おそらくレコードセットやコネクションストリング変数の扱い部分ではないかとおもうのですが・・・・。

この回答への補足

WhiteMageさん

 助けの手をさしのべて頂いてありがとうございます。

 No.1の方に、(1)global.asa、(2)login.asp のソースを載せました。デバックして頂くようで恐縮しています。この(1)(2)は、本に掲載されていたサンプルプログラムを使用し、若干の修正をしています(DB名等)

 IISのデバッガをかまして実行すると。

『例外の種類'ランタイムエラー'はハンドルできませんでした。アプリケーションのデバックを行いますか?』
   (はい)
『'Microsoft VBScript実行時エラーパスが見つかりません。'の種類の例外はハンドルできません。』
   (OK)
デバッカ内に以下のソースが表示されてます(最終行が実行時の最終ポイントかと思います)
---------------
<% If Request.Form("user") <> "" Then
user_id = Request.Form("user")
password = Request.Form("pass")
adcn.Open Application("DBCN")
adrs.Open "select * from user_info where user_id='" & user_id & _
"' and password='" & password & "'", adcn, _
adOpenStatic, adLockOptimistic, adCmdText
' ユーザー情報にマッチしたら取得して最終ログオンを更新
If Not adrs.EOF Then
Session("USER") = adrs("user_id").Value
Session("AUTH") = adrs("authority").Value
adrs("last_logon").Value = Now
adrs.Update
' ここにアクセスカウンター用スクリプトを記述する
Application.Lock
Application("COUNTER") = Application("COUNTER") + 1
name = fso.BuildPath(Server.MapPath("./"), "temp\access.cnt")
⇒ Set fh = fso.CreateTextFile(name, True)

---------------

補足日時:2003/02/03 16:15
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!