以前、↓で質問を挙げさせてもらった者です。
<http://oshiete.goo.ne.jp/qa/6615640.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ファイルのフォーマットは決まっている為、
現在のフォーマットで表示させたいのです。
お礼を言うのが少し遅くなってしまうかもしれませんが、
ご教示いただけると嬉しいです。
A 回答 (2件)
- 最新から表示
- 回答順に表示
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
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 …
あと、コーディングで気になりましたが、もし、strId がハードコーディングとかでなければ
SQLインジェクションに注意してください。
たぶん「?」やADODB.Parametersを利用してパラメータ付きクリエにするべきかと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- その他(プログラミング・Web制作) データ解析ソフトRでのファイル入力read.csvがエラーになります 7 2022/03/27 22:11
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- Visual Basic(VBA) エクセルVBAについて 8 2022/07/13 22:41
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) VBAで特定の場所にあるCSVファイル(複数)から特定場所を抜き出してExcelに転記したいです。 11 2023/05/23 16:29
- Excel(エクセル) CSVファイルがカンマ区切りにならない。対処法を教えていただきたいです。 仕事でSMS一斉送信ができ 2 2022/07/01 21:24
- Visual Basic(VBA) VBA初心者です。電話番号の数字の前に0を表示させたいです。 2 2022/12/14 03:58
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
カンマ区切りのCSVファイルから...
-
複数のcsvファイルをExcelに一...
-
CSV形式での保存時に”文字列...
-
csvファイルでの日付設定「yyyy...
-
ADODBでSQL実行前にレコードセ...
-
複数のCSVファイルのAccessテー...
-
データ解析ソフトRでのファイル...
-
【C#】パス名で無効な文字
-
csvファイルを列数ごとに分割す...
-
【ExcelVBA】UTF-8の文字コード...
-
COBOL85でのCSVファ...
-
VBAでcsvファイルを読み込んで...
-
csvファイル 項目数取得
-
CSVファイル作成
-
エクセルVBA 大容量CSVファイル...
-
vb2010でCSVファイルを並び替え...
-
ファイル名ないにあるカンマを...
-
エクセルで運転時間を見たい
-
マクロから出力されるcsvのダブ...
-
ファイルのアクセス回数について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カンマ区切りのCSVファイルから...
-
CSV形式での保存時に”文字列...
-
複数のcsvファイルをExcelに一...
-
csvファイル 項目数取得
-
csvファイルでの日付設定「yyyy...
-
バッチでCSVを処理する時、空の...
-
マクロから出力されるcsvのダブ...
-
csvファイルを列数ごとに分割す...
-
エクセル形式のファイルの読み込み
-
csvファイルのデータの一部を取...
-
エクセルVBA 大容量CSVファイル...
-
CSVファイル作成
-
EXCEL|csvで保存→開くcsvを閉じる
-
CSVファイルの項目行を削除...
-
巨大なCSVの加工(指定列のみの...
-
データ解析ソフトRでのファイル...
-
VBAでCSVファイルのデータを集...
-
【ExcelVBA】UTF-8の文字コード...
-
【C#】パス名で無効な文字
-
特定文字を入ってるCSVの特定の...
おすすめ情報