- ベストアンサー
VBScriptの関数化
私のしたいことは、 (1)リンクボタンを押すと、 (2)csvファイルを作成し、 (3)作成したcsvファイルのダウンロードを行う というものです。 そこで、以下のようなプログラムを作成したのですが、上手くいきません。 まず、リンクボタンは <% Response.Write "[<a href=" & FileName & " onclick='set()'>保存</a> ]" %> 次に、関数化したプログラムは、 <SCRIPT LANGUAGE="VBScript" RUNAT="Server"> <!-- sub set() Dim i, fs,csv,flnm flnm=<% = Request.Form("FileName") %> Set fs = CreateObject("Scripting.FileSystemObject") Set csv = fs.CreateTextFile(flnm,True) '項目名を書き込む 'Serverからデータを取得 strSQL="select * from dtTbl " Set rs = db.DbCreateDynaset(strSQL,0) rs.MoveFirst 'データがなくなるまで繰り返す Do Until rs.EOF=True dtSQL="" For i=0 to 17 dtSQL = dtSQL & rs.fields.item(i).value & "," Next dtSQL=dtSQL & rs.fields.item(18).value 'ファイルに書き込む csv.WriteLine(dtSQL) '次の行を読み込む rs.MoveNext Loop 'ファイルを閉じる csv.Close end sub --> </SCRIPT> このプログラムは関数にしなければ正常に動作していました。 簡単なJavaScriptの関数を変わりにおいてみたところ、 そのプログラムは正常に動作したので、onclickは使えると思うのですが・・・ どこが間違っているのでしょうか? ちなみにこの他の部分も、VBScriptで作成しています。 今日中に仕上げなければならないので、困っています。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
根本的にクライアントサイドとサーバーサイドを一緒に考えていらっしゃるようで・・・(^^; onclick="set()" で <SCRIPT LANGUAGE="VBScript" RUNAT="Server"> </SCRIPT> 内にある関数は呼び出せません。 クライアントサイドから呼び出せるのは(基本的には)クライアントサイドの関数だけです。
その他の回答 (1)
- msystem
- ベストアンサー率42% (79/186)
私も似たような質問を以前ここでし、皆さんのおかげで解決しました。(質問番号114813) ただ違うのは(2)csvファイルを作成の部分は、ファイルを作成せずにそのままcsvファイルをダウロードさせる方法です。 以下その方法です。 リンク元のリンク部分 <a href="csvdown.asp?FILENAME=<%Response.Write FileName%>">保存</a> csvdown.aspの先頭(<body>や<html>などはすべてとる) <% Response.ContentType = "text/csv" Response.AddHeader "Content-Disposition","filename=" & Request("FILENAME") 'CSVデータを作成 Response.Write "1,2,3" & vbNewLine Response.Write "2,3,4" & vbNewLine %> ただ方法か違うため「VBScriptの関数化」の回答にはなってませんね
お礼
回答ありがとうございました。 結局、昨日なんとか完成しました!! こういう方法もあるのですね。 これからの参考にさせていただきます(^。^)
お礼
基本的なところがわかっていなかったようです。 まだまだ勉強がたりませんね。 結局、この部分は関数化するのはやめました(^。^; 別の方法で完成させました。 でも、別の関数を作成することができました。 ありがとうございました。
補足
では、 <SCRIPT LANGUAGE="VBScript" RUNAT="Server"> ではなく、 <SCRIPT LANGUAGE="VBScript"> とすればよいのでしょうか? しかし、 (1)行3:識別子がありません。 (2)行63:構文エラーです。 と、2つのエラーがでてきてしまいます。 関数にしなければ動作するのですが、 関数にする時には、プログラムの書き方も違ってくるのでしょうか?