- 締切済み
VBSでデータベースへの接続
dbon.cfgファイルにSQL Serverへ接続のためのパラメータを設定しておき、それを読み込んでデータベースに接続しようとしていますが接続できません。 dbcon.cfgの中身は下記になっており、]以降のサーバー名、データーベース名を切り出すため、splitを指定しています。 値がわたっていないと思って、ループに"WScript.Echo strDBParm(intCnt)"を指定して中身を確認しようとしましたが、何も表示されません。 お手数をおかけしますがご教示いただけますようお願いいたします。 ----------------------------------------------- [server] サーバー名を指定 [database] データベース名を指定 [uid] [database]で指定したデーターベースに接続できるユーザ名を指定 [pwd] [uid]で指定したユーザーのパスワードを指定 ----------------------------------------------- -------------------------- [VBSスクリプト] Option Explicit Dim objFS Dim objFile Dim objADO Dim strDBParm(3) Dim intCnt Const strDBConCfg="C:\test\dbcon.cfg" Const ForReading = 1 Const TextCompare = 1 intCnt = 0 On Error Resume Next Set objFS = WScript.CreateObject("Scripting.FileSystemObject") If Err.Number <> 0 Then WScript.Echo "FSオブジェクトが作成できませんでした" WScript.Quit(1) End If Set objFile = objFS.OpenTextFile(strDBConCfg,ForReading) If Err.Number <> 0 Then WScript.Echo strDBConCfg & "を開く事ができませんでした" WScript.Quit(1) End If Do Until objFile.AtEndOfLine = True strDBParm(intCnt) = Split(objFile.ReadLine, "]", TextCompare) WScript.Echo strDBParm(intCnt) intCnt = intCnt + 1 Loop Set objADO = CreateObject("ADODB.Connection") If Err.Number <> 0 Then WScript.Echo "ADOオブジェクトが作成できませんでした" WScript.Quit(1) End If objADO.Open "Driver={SQL Server};" & _ "server=strDBParm(0); database=strDBParm(1); uid=strDBParm(2); pwd=strDBParm(3);" If Err.Number <> 0 Then WScript.Echo "サーバーに接続できませんでした" WScript.Quit(1) End If objADO.Close Set objFS = Nothing Set objADO = Nothing
- みんなの回答 (3)
- 専門家の回答
みんなの回答
「vbs上で直接記載」の場合と「ファイルから切り出し」の場合で objADO.Open の引数文字列を WScriot.Echo で表示して比べてみてください。 Dim strConnection strConnection = "Driver={SQL Server};" & "server=" & strDBParm(0) & "; database=" & strDBParm(1) & "; (...以下略) WScript.Echo strConnection objADO strConnection 接続できないほうは、おそらく引数文字列に余計な改行が入っていると思いますよ。
> uid=strDBParm(2);で改行されているように見えますが、 > uid=strDBParm(2);の後ろは改行されておらず、pwd=strDBParm(3);"があります。 いやいや、問題はそこではないです。 × "server=strDBParm(0); database=strDBParm(1); (...以下略) ○ "server=" & strDBParm(0) & "; database=" & strDBParm(1) & "; (...以下略) では? 元のコードでは、配列に入っているデータは接続に使われていませんよね? (『配列変数の名前』が接続に使われてますよね?)
Split 関数の戻り値は配列ですよね。 strDBParm(intCnt) = Split(objFile.ReadLine, "]", TextCompare)(1) と配列の2番目のデータを取得するようにしないとダメなのでは。 ついでに、 objADO.Open "Driver={SQL Server};" & _ "server=strDBParm(0); database=strDBParm(1); uid=strDBParm(2); これって、文字列連結がおかしくないでしょうか?
補足
ありがとうございます。 下記のロジックに変更して切り出しはできました。 また、データベースに接続する前にstrDBParm(0)~strDBParm(3)に切り出した値が格納されていることも確認しました。 ------------------------------------------------------- Do Until objFile.AtEndOfLine = True strBuf = objFile.ReadLine intPointer = 0 intPointer = InStr(1, strBuf, strSearch, 1) strBuf2 = Mid(strBuf, intPointer+1) strDBParm(intCnt) = strBuf2 WScript.Echo strDBParm(intCnt) intCnt = intCnt + 1 Loop ------------------------------------------------------------- uid=strDBParm(2);で改行されているように見えますが、 uid=strDBParm(2);の後ろは改行されておらず、pwd=strDBParm(3);"があります。 配列で設定情報を渡すと、データベースに接続できず、直接 値をセットするとデータベースに接続できるようになりましたが、ReadLineは改行がセットされないので改行コードが入ることがないので、接続できない原因がわからずつまずいています。
補足
ありがとうございます。 ご指摘頂いた通りに修正しましたが、dbには接続できませんでした。 vbs上で直接記載するとうまくいくので、ファイルから切り出したときの文字コードが 事なって渡されているため、ユーザー名などが認識出来ないのではと思っています。 お手数ですが、ご教示くださいますようお願いします。