• 締切済み

ASP(VBScript)について教えてください。

以前、↓で質問を挙げさせてもらった者です。 <http://okwave.jp/qa/q6615640.html> ASPで作成した画面上からADOを用いて、CSVファイルの 項目を表示しようと思ったのですが、エラーが出てしまいました。 エラー箇所を調べてみたのですが、原因がわからず作業が中断しています。 申し訳ありませんが、下記のソースでどこが間違っているのか 教えていただけないでしょうか? ■期待する動作: CSVファイルを読み取り、指定したIDの行の名前(NAME),年齢(AGE)を 表示させる ******* CSVファイル(test.csv)の中身 ******* [ID],[NAME],[AGE] 1,山田,20 2,田中,30 3,佐藤,40 ******************************************* ******* ASP(VBScript)のソース ******* <% Dim objAdo Dim objRS Dim strPath Dim strId Dim strName Dim strAge strId = "2" 'test.csvのパスを取得 strPath = replace(Server.MapPath("test.csv"),"\test.csv","") 'ADOオブジェクトを作成 Set objAdo = CreateObject("ADODB.Connection") 'ADOを使いCSVファイルを扱う準備(オープン)を行う objAdo.Open "Driver={Microsoft Text Driver (*.txt ; *.csv)} ; DBQ=" & strPath & " ; ReadOnly=1" 'SQLを実行し、当該タスクのデータを抽出 Set objRS = objAdo.Execute("select * from test.csv where '[ID]' = '" & strId & "'") →ここからエラーになります。 strName = objRS("'[NAME]'").Value response.write("strName:" & strName & "<br>") strAge = objRS("'[AGE]'").Value response.write("strAge:" & strAge & "<br>") objRS.Close objAdo.Close %> select文内のwhere句で失敗しているように感じたので、 where '[ID]' = '" & strId の部分を下記の3パターンで 試してみたのですが、全てエラーが起きてしまいました。 where [[ID]] = '" & strId where {[}ID{]}' = '" & strId where [ID] = '" & strId CSVファイルのフォーマットは決まっている為、 現在のフォーマットで表示させたいのです。 お礼を言うのが少し遅くなってしまうかもしれませんが、 ご教示いただけると嬉しいです。

みんなの回答

回答No.2

案外、フィールド名を 「'」でくくっているのがおかしいかもしれません。 フィールド名やテーブル名は「"」でくくるんじゃありませんでした? 同じ問題で、objRS("'[NAME]'").Value も objRS("[NAME]").Value だったりしません? ASPのことはよくわからないので恐縮ですが とりあえず、発生しているエラーの詳細を確認してみてはどうでしょう? サンプルを見よう見まねで書くとこんな感じ? たとえば objAdo.Execute のあと、 if objAdo.Errors.Count > 0 then dim Errors as Object Set Errors = CreateObject("ADODB.Error") foreach Errors in objAdo.Errors response.write("Error:" & Errors.Description & "<br>") next end if ADODB.Error はこちらを参照してください。 http://msdn.microsoft.com/ja-jp/library/cc364259.aspx あと、コーディングで気になりましたが、もし、strId がハードコーディングとかでなければ SQLインジェクションに注意してください。 たぶん「?」やADODB.Parametersを利用してパラメータ付きクリエにするべきかと思います。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

私はASP環境はありません。しかしWEBの記事などで下記を作って見ました。 下記で私の場合は動きましたので、対比して質問のものも残しているので考えてください。 データをエクセルシートにセットしましたが、お好みで。 フィールド名の関係でSQL文のWHERE以下を略してますが、本筋と関係ないでしょう。 私の場合は「C:\Documents and Settings\XXXX\My Documents\」にtest01.csv  があります。 そういう環境で実行。 ーー Sub test01() Dim objAdo Dim objRS Dim strPath Dim strId Dim strName Dim strAge strId = "2" 'test.csvのパスを取得 'strPath = Replace(Server.MapPath("test.csv"), "\test.csv", "") strPath = "C:\Documents and Settings\XXXX\My Documents\" '\は必要 'ADOオブジェクトを作成 Set objAdo = CreateObject("ADODB.Connection") 'ADOを使いCSVファイルを扱う準備(オープン)を行う 'objAdo.Open "Driver={Microsoft Text Driver (*.txt ; *.csv)} ; DBQ=" & strPath & " ; ReadOnly=1" connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=" & strPath & ";" _ & "Extended Properties=""Text;HDR=NO;FMT=Delimited""" objAdo.Open connectionString 'SQLを実行し、当該タスクのデータを抽出 Set objRS = objAdo.Execute("select * from test01.csv") ' where '[ID]' = '" & strId & "'") rowNo = 1 'objRs.Openは要らないようだ '--以下はエクセルのシートにデータをセットした例 colNo = 1 Do While objRS.EOF = False 'データ抽出 For Each Item In objRS.fields MsgBox Item.Value '確認後はこの行抹消 Worksheets("Sheet1").Cells(rowNo, colNo).Value = Item.Value colNo = colNo + 1 Next colNo = 1 rowNo = rowNo + 1 '次のレコード objRS.MoveNext Loop objRS.Close objAdo.Close End Sub

関連するQ&A

  • VBScriptにて、csvファイルから特定のレコードを取得したい

    以下のcsvファイルから例えば、「name」列が「aaa」の行を取得するVBScriptを作成したのですが、うまくいきません。ご教授お願いいたします。 --------------- name,id aaa,1 bbb,2 ccc,3 --------------- 作成したVBScriptは以下のものになります。 (SQL文のWhere句に直接、「where name= 'aaa'」と打つとうまくいきますが、変数を指定したいです。) ------------------------------------------- Option Explicit Dim objADO Dim objRS Dim strName strName = "aaa" 'ADOオブジェクトを作成 Set objADO = CreateObject("ADODB.Connection") 'ADOを使いCSVファイルを扱う準備(オープン)を行う objADO.Open "Driver={Microsoft Text Driver (*.txt; *.csv)};" & _ "DBQ=C:\sagyou\;" & _ "ReadOnly=1" 'SQLを実行し、当該タスクのデータを抽出します Set objRS = objADO.Execute("select * from test.csv where name= strName") 'レコードセットをクローズobjRS.Close objRS.Close 'ADOオブジェクトをクローズ objADO.Close

  • VBScriptでCSVファイルのデータ取得

    VBScriptで、ADOを使ってCSVファイルのデータを読み込みたいのですが、 うまういきません。 CSVファイル(Data.csv)の内容は下記です。 item1,item2 AA1,BB1 AA2,BB2 AA3,BB3 プログラムの内容は、下記です。 'ADOオブジェクトを作成 Set objADO = CreateObject("ADODB.Connection") 'ADOを使いCSVファイルを扱う準備(オープン)を行う objADO.Open "Driver={Microsoft Text Driver (*.txt; *.csv)};" & _ "DBQ=C:\Documents and Settings\houjyou-n\デスクトップ;" & _ "ReadOnly=1" 'SQLを実行し、当該タスクのデータを抽出します Set objRS = objADO.Execute("select * from Data.csv where item1 = 'AA3'") If Not objRS.Eof Then If objRS("item2") = "BB3" Then Flg = True End If End If 'レコードセットをクローズobjRS.Close objRS.Close 'ADOオブジェクトをクローズ objADO.Close 実行すると、「オブジェクト'Data.csv'が見つかりませんでした。オブジェクトが存在していること、名前やパス名が正しいことを確認してください。」というエラーが出ます。 パスもファイル名も間違っていないのですが、何がいけないのでしょうか。 手がかりになることがあれば、何でも教えていただければ幸いです。

  • VBScriptでのDBのエラー取得

    VBScriptでADO(ADODB)接続により、SQLServer(2012)に接続して クエリを発行し、結果をファイルに出力するVBScriptを作成して います。 SQL実行時のエラーに対応する為、VBScriptにてエラーオブジェクトのプロパティ (Err.Number、Err.Description)を使用し、エラー番号と内容を取得しているの ですが、SQL Serverから発行しているエラー番号、エラー内容を取得したいので すが、取得できません。 どのようにすれば、データベース固有のエラーを取得ができますか。 是非ご教示いただきたく、 お手数をおかけ致しますが、宜しくお願い致します。 ------------------------------------------------- Option Explicit Dim objADO Dim objRS Dim Sql if WScript.Arguments.Count <> 1 then WScript.echo("usage: script.vbs arg1") WScript.Quit(-1) end if arg1 = WScript.Arguments(0) Set objADO = CreateObject("ADODB.Connection") objADO.Open "Provider=SQLOLEDB;" & _ "Data Source=hoge;" & _ "Initial Catalog=hoge;" & _ "Integrated Security=SSPI;" sql = "" sql = "select ~ where column ='"&arg1&"'" set objRS = objADO.Execute(sql) If Err.Number <> 0 Then objADO.Close Set objADO = Nothing WScript.Quit(-1) End If sql = "" sql = "update ~ ~ where column ='"&arg1&"'" objADO.Execute(sql) If Err.Number <> 0 Then 更新の破棄とエラー内容の表示 Else 更新を反映 End If objADO.Close Set objADO = Nothing

  • vbsで最後の行を削除する

    csvファイル(test.csv)からフラグが1のものを抽出するのですが 最終行に改行がはってしまうので、最終行を削除してcsvファイルを保存したいのですが、 うまくいきません。ご教授ください。 Dim objADO Dim i Dim wsql Dim rs Dim wHeader Dim wData Dim objFSO Dim objFile Set objADO = CreateObject('ADODb.connection') objADO.Open "Driver={Microsoft Text Driver (*.txt;*csv)};"&_ "DBQ=C:\test;"&_ "ReadOnly=1" '抽出条件 wsql="select * from test.csv where フラグ='1'" Set rs =objADO.Execute(Wsql) 'ヘッダ部 wHeader='ID,商品名,商品番号,フラグ" 'データ部 wData="" Do While rs.EOF=False For i = 0 to rs.fields.count - 1 if i = (rs.fields.count -1) then wData = wData & chr(34) & rs.Fields.ltem(i) & chr(34) & chr(13) else wData = wData & chr(34) & rs.Fields.ltem(i) & chr(34) & "," end if next rs.MoveNext loop '最終改行削除? rs = Left(wData,Len(wData) - Len(chr(13))) 'ファイル出力 set objFSO = createObject("Scripting.FileSystemObject") set objFile = objFSO.OpentextFile("c:\test\test.csv",2, true) if err.Number = 0 then objFile.WriteLine(wHeader) objFile.WriteLine(wData) objFile.close end if set objFile = Nothing set objFSO = Nothing set objADO = Nothing ****************************************** ID,商品名,商品番号,フラグ 100,パソコン,100-12,1 200,ペン,200-11,1 ***ここの改行を削除する***** 〔EOF〕

  • Excelシートのあるセルから値を取り出す場合のASPの記述方式

    Excelファイル(Test.xls)の中のシート(sheet1)にあるセル(A3、B11等) にある値を取得したい場合のSQL文の表記方法が、わかりません。何方か教えて頂けないでしょうか? 【サンプルプログラム】 Set objADO = CreateObject("ADODB.Connection") objADO.Open "Driver={Microsoft Excel Driver (*.xls)};" & _ "DBQ=D:\Test.xls;" & _ "ReadOnly=1" Set objRS = objADO.Execute("【?】") すみませんが、よろしくお願い致します。

  • VBscriptでXMLデータの抽出に関する質問

    教えて下さい。以下のようなXMLファイルがあります。 <?xml version="1.0" encoding="Shift-JIS"?> <ROOT> <INFO> <NO>0001</NO> <NAME>ABC</NAME> <COMMENT> </COMMENT> <AGE>30</AGE> </INFO> </ROOT> これを以下のようにVBScriptにてデータを取り出したいです。 Dim DOM, docRoot, node, nodeList, i, m Dim objADO, objADO2 Dim objRS Dim sqlstmt, strSQL Dim no, comment 'DOMオブジェクト生成 Set DOM = CreateObject("Microsoft.XMLDOM") '同期モード DOM.async = True 'XMLを読み込む DOM.load("11.xml") 'ルートセット Set docRoot = DOM.documentElement 'ノードの設定 Set nodeList = docRoot.selectNodes("/ROOT/INFO") 'ループ For Each node In nodeList For i = 0 to node.ChildNodes.length - 1 Select case node.childNodes(i).nodeName case "NO" no = node.childNodes(i).firstChild.nodeValue case "COMMENT" comment = node.childNodes(i).firstChild.nodeValue End select Next Next ところがCOMMENTタグのようにデータが空のものがあると 「オブジェクトがありません」とエラーになります。 if Not IsNull(node.childNodes(i).firstChild.nodeValue) then というようにもやってみましたが、これでも同じエラーとなってしまいます。 何か方法はないでしょうか?アドバイスを宜しくお願いします。

    • ベストアンサー
    • XML
  • 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 %> ご教示いただけると、幸いです。

  • ファイルの取り込みの件

    CSVの取り込み機能を作成しています。 サーバーのフォルダ(C:/TEST/)にファイルを置いて下記の処理を行っているところで、自分のPCのフォルダから取り込むようにするにはどうすればいいでしょうか。 //コンピュータ名/C:/TEST/でやってみましたがエラーとなってしまいます。 strFolderName = "C:/TEST/" FileName = データ.csv strPath = strFolderName & FileName Set strmFile = objFile.OpenTextFile(strPath, 1, FALSE)

  • AccessでSQL結果を直接csvに書き出すには?

    Access2003,WinXP お世話になります。 自作のSQLを書いて、結果をTransferTextで手軽にCSVにできないかと考えてこんなのを書いてました。 Dim strSql AS String Dim strPath AS String strSql = 自作SQL文 strPath = c:\test.csv Docmd.TransferText acExportDelim, , strSql, strPath, True しかし、TransferTextでは「テーブル」か「クエリ」名を直接書くように指示してあり、これだと動かない?んでしょうか。 SQLは300個くらい出力する必要があるため(クエリ300個作れば解決するのですが・・・)上のようなコードをループして動かしたいのですが、何か他の簡単な出力方法があるのでしょうか。 よろしくお願いいたします。

  • 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

専門家に質問してみよう