- - PR -
ASP初心者、簡単なDB接続でエラー
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-01-27 12:05
はじめまして。
このたびASPを勉強しようと思い簡単なDB接続のWEBアプリを作成しようと 思っています。 早速ですが私の環境を下記に記載しておきます。 ◆サーバ ・Windows2000Server SP4 ・IIS 5.0 ・SQL Server 7.0 ◆クライアント ・WindowsXP SP1 ・IE 6.0 です。 やりたいことは、サーバに「syain_tbl」がありますので、 それを全件表示したいだけです。 ASPソース ----------------------------------------------------------------------- <% Response.Expires=0 Response.AddHeader "Pragma","No-Cache" Response.AddHeader "Cache-Control","No-Cache" Response.Buffer = "True" Response.Clear %> <html> <head> <title>sample</title> </head> <body> <% ''データベースOPENファンクション Datasource = "syain" User = "yama" Password = "act" '<!---------- データベースOPEN ----------> set db = Server.CreateObject("ADODB.Connection") db.ConnectionTimeout = 600 db.CommandTimeout = 600 db.Open Datasource,User,Password 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> ----------------------------------------------------------------------- 上記のソースの場合正しく表示されるのですが、 下記のソースに変更した場合、エラーになります。 ◆index.asp ----------------------------------------------------------- <% Response.Expires=0 Response.AddHeader "Pragma","No-Cache" Response.AddHeader "Cache-Control","No-Cache" Response.Buffer = "True" Response.Clear %> <!--#include file = "./sDBConnect.asp"--> <html> <head> <title>sample</title> </head> <body> <% ''データベースOPENファンクション 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> ----------------------------------------------------------------------- ◆sDBConnect.asp ---------------------------------------------------- <SCRIPT language=VBScript runat=Server> ' ' Function sDBConnect() ' '--------------------------------------------------------------------- ' 機能:DBコネクションの確立 '--------------------------------------------------------------------- ' 戻値:なし ' 引数:なし '--------------------------------------------------------------------- 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> ----------------------------------------------------------------------- 上記の場合のエラー内容が、 ●エラー タイプ ADODB.Recordset (0x800A0BB9) 引数が間違った型、または許容範囲外であるか、競合しています。 /asp/index2.asp, line 38 理由がわかりません。 なんでも良いのでご指摘よろしくおねがいします。 | ||||||||
|
投稿日時: 2004-01-27 13:00
るぱんです。
コネクションを関数にはじき出したらエラーが出たと言う事でいいですか? コネクションはADODBのインスタンスとは無縁の物でしたっけ? レコードセットとコネクションが独立してしまうからではないかと考えてしまうのですが? | ||||||||
|
投稿日時: 2004-01-27 13:07
DBコネクションの所を共通関数として使用したいのです。
で、 DBコネクションのプロシージャを初めにインクルードして 使用しようとしていますが、 そうすると、エラーになり、どうにもいかないんです。。。 ASPは初めてでよく理解していません。 その点は了承よろしくお願いします | ||||||||
|
投稿日時: 2004-01-27 13:11
コネクションを関数化するのは良いのですが、
引数無し、戻り値無しです。 呼び出し側がどのコネクションか特定できていません。 関数に戻り値作って、呼び出し側で変数に突っ込みなおしてください。 | ||||||||
|
投稿日時: 2004-01-27 13:21
ご指摘ありがとうございます。 >引数無し、戻り値無しです。 これではダメってことですよね。。 >関数に戻り値作って、 戻り値は、falese、trueでも良いのでしょうか? >呼び出し側で変数に突っ込みなおしてください。 何を突っ込みなおせば良いのでしょうか? 関数内で作成したオブジェクトを呼出側の変数に突っ込めばよいのでしょうか? よろしくお願います。 | ||||||||
|
投稿日時: 2004-01-27 13:29
すみません。
共通関数がややこしく書いていたみたいで申し訳ございません。 下記の様になります。 ◆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> | ||||||||
|
投稿日時: 2004-01-27 13:58
るぱんです。
えとですね、、、 内容を理解してくださいね。 こんなんでどうでしょう?
[ メッセージ編集済み 編集者: るぱん 編集日時 2004-01-27 13:59 ] | ||||||||
|
投稿日時: 2004-01-27 14:34
ありがとうございます。 まず、呼出元の >呼び出し元 >Set db = sDBConnect(db) ですが、「sDBConnect(db)」の「db」がいまいちよくわかりません。 べつにいらないのではないですか? 後 Function 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 sDBConnect = db End Function ではどうでしょう? 実際 るぱんさんのとおりやってもダメですし、 僕の考えた方でもだめでした。。 サーバの環境がわるいのですかね? |