- PR -

ASP初心者、簡単なDB接続でエラー

投稿者投稿内容
るぱん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 1370
投稿日時: 2004-01-27 15:11
るぱんです。
え〜と、やりたい事を整理させてくださいね。

DBからデータを取ってきて、HTMLを作成したい・・・と言う事で宜しいですか?
Anon
常連さん
会議室デビュー日: 2003/10/20
投稿数: 29
投稿日時: 2004-01-27 15:15
呼び出し元
<!-- #include file="sDBConnect.asp"-->
<%
Call sDBConnect()
%>

■sDBConnect.asp ----------------------------------------------------
<%
Sub sDBConnect()
   '------------- 変数定義 ------------------
   Datasource = "syain"
   User = "yama"
   Password = "act"

   '---------- データベースOPEN ----------
   Set db = Server.CreateObject("ADODB.Connection")
   db.ConnectionTimeout = 600
   db.CommandTimeout = 600
   db.Open Datasource,User,Password
   
End Sub
%>
-------------------------------------------------------------------------

これでいきませんか?

それと関係ないと思いますが、検索だけなら
'SQL文実行
RS.Open sql, db, 3, 3 ←1でいいのでは?


[ メッセージ編集済み 編集者: Anon 編集日時 2004-01-27 15:16 ]
GOLF@スポコン
常連さん
会議室デビュー日: 2003/11/26
投稿数: 30
投稿日時: 2004-01-27 15:21
引用:

るぱんさんの書き込み (2004-01-27 15:11) より:
るぱんです。
え〜と、やりたい事を整理させてくださいね。

DBからデータを取ってきて、HTMLを作成したい・・・と言う事で宜しいですか?




その通りです。
るぱん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 1370
投稿日時: 2004-01-27 15:22
るぱんです。
ためしにこんなコード書いてみました。
ちゃんと関数の受け渡し・・・って・・・
関数はVBScriptなのに
それ以外はASP・・・?

Scriptタグか・・・?

コード:
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<SCRIPT LANGUAGE="VBScript">
<!--
	Function X(j)
	    For i = 1 to 10
	        j = i
	    Next
	    X = j
	End Function
-->
</SCRIPT>
<BODY>
<SCRIPT LANGUAGE="VBScript">
<!--
	k = X(j)
	msgbox k
-->
</SCRIPT>
</BODY>
</HTML>

GOLF@スポコン
常連さん
会議室デビュー日: 2003/11/26
投稿数: 30
投稿日時: 2004-01-27 15:30
引用:

Anonさんの書き込み (2004-01-27 15:15) より:
呼び出し元
<!-- #include file="sDBConnect.asp"-->
<%
Call sDBConnect()
%>

■sDBConnect.asp ----------------------------------------------------
<%
Sub sDBConnect()
   '------------- 変数定義 ------------------
   Datasource = "syain"
   User = "yama"
   Password = "act"

   '---------- データベースOPEN ----------
   Set db = Server.CreateObject("ADODB.Connection")
   db.ConnectionTimeout = 600
   db.CommandTimeout = 600
   db.Open Datasource,User,Password
   
End Sub
%>
-------------------------------------------------------------------------

これでいきませんか?

それと関係ないと思いますが、検索だけなら
'SQL文実行
RS.Open sql, db, 3, 3 ←1でいいのでは?


[ メッセージ編集済み 編集者: Anon 編集日時 2004-01-27 15:16 ]



ありがとうございます。

すみません。私が根本的に間違っていました。

◆(para.asp)-----------------------------------------
<SCRIPT language=VBScript runat=Server>
public db
</SCRIPT>
-----------------------------------------------------
上記のファイルを作成し、インクルードしましたらいけました。
(呼出元で(index.asp))

◆(sDBConnect.asp)-----------------------------------------
<SCRIPT language=VBScript runat=Server>

Sub sDBConnect() 

'------------- 変数定義 ------------------
    Datasource = "syain"
    User       = "yama"
    Password   = "act"
'---------- データベースOPEN ---------
    set db = Server.CreateObject("ADODB.Connection")
    db.ConnectionTimeout = 600
    db.CommandTimeout = 600
    db.Open Datasource,User,Password

End Sub

</SCRIPT>

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

◆(index.asp)-----------------------------------------
<%
Response.Expires=0
Response.AddHeader "Pragma","No-Cache"
Response.AddHeader "Cache-Control","No-Cache"
Response.Buffer = "True"
Response.Clear
%>

<!--#include file = "./comm/o_para.asp"-->
<!--#include file = "./comm/sDBConnect.asp"-->

<html>
    <head>
        <title>sample</title>
    </head>
    <body>
    <%
        
        sDBConnect()
        
        sql = "SELECT * FROM syain_tbl"
        
        'Recordsetオブジェクトを作成
        Set RS = Server.CreateObject("ADODB.Recordset")
        
        'SQL文実行
        RS.Open sql, db, 3, 3
        
    %>
    
    <table border="1">
        <H1>社員テーブル</H1>
        <tr>
            <th>NO</th><th>名前</th>
        </tr>
        <%
            Do While Not RS.EOF
                Response.Write ("<tr>")
                Response.Write ("<td>"& RS.Fields("syain_no") &"</td>")
                Response.Write ("<td>"& RS.Fields("syain_name") &"</td>")
                Response.Write ("</tr>")
                
                RS.MoveNext
            Loop
             
             Response.End
             
             'データベースを閉じます。 
            RS.Close
            db.Close
            Set RS = Nothing
            Set db = Nothing
        %>
         </table>
    
     </body>
</html>

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

上記の様にしましたらいけまいた。
お騒がせしました。

ありあがとうございます。


後もうひとつ聞きたいのですが。
>'SQL文実行
>RS.Open sql, db, 3, 3 ←1でいいのでは?

何で「3」とか「1」を入れるのかわからないのですが、
WEBでしらべても皆さんリテラルいれているし、
説明がよくわかりません。

なんかわかり易いサイト等ありましたら教えていただけませんでしょうか?
よろしくお願いします。


[ メッセージ編集済み 編集者: GOLF@スポコン 編集日時 2004-01-27 15:33 ]
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2004-01-27 15:36
GOLF@スポコンさん、こんにちは。

引用:

>Set db = sDBConnect(db)
ですが、「sDBConnect(db)」の「db」がいまいちよくわかりません。
べつにいらないのではないですか?


ところで、全ての変数について宣言が省略されていますが、単に、掲載する際に省略しているのでしょうか?
恐らく、変数宣言を省略してコーディングしているのではないかと思いますが、その場合、「db」という変数のスコープ(有効範囲)があやふやになります。
切り出した関数内で使用されている変数「db」は、関数内でのみ有効なローカル変数として認識され、その結果、レコードセットのオープンで引数に渡されている変数「db」は、Nothing となっているのではないでしょうか。

Option Explicit
を指定して変数の宣言を強要する事をお奨めします。

引用:

サーバの環境がわるいのですかね?


そう思ってしまう気持ちも、判らないでもないですが、十中八九、違うと思います。

【追記】
とか言ってたら既に、取り敢えずは解決済みのようですね。

引用:

◆(para.asp)-----------------------------------------
<SCRIPT language=VBScript runat=Server>
public db
</SCRIPT>
-----------------------------------------------------
上記のファイルを作成し、インクルードしましたらいけました。



ただ、その他の変数についても全て、有効範囲を意識して、きちんと宣言して使用する(宣言を強要する)ようにしないと、また同じようなエラーで悩む事になるかも知れません。


[ メッセージ編集済み 編集者: きくちゃん 編集日時 2004-01-27 16:01 ]
GOLF@スポコン
常連さん
会議室デビュー日: 2003/11/26
投稿数: 30
投稿日時: 2004-01-27 16:22
引用:

きくちゃんさんの書き込み (2004-01-27 15:36) より:

ただ、その他の変数についても全て、有効範囲を意識して、きちんと宣言して使用する(宣言を強要する)ようにしないと、また同じようなエラーで悩む事になるかも知れません。

[ メッセージ編集済み 編集者: きくちゃん 編集日時 2004-01-27 16:01 ]



上記の変数宣言の件了解しまいた。
わかり易いアドバイスありがとうございました。

スキルアップ/キャリアアップ(JOB@IT)