• ベストアンサー

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で作成しています。 今日中に仕上げなければならないので、困っています。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • hequil
  • ベストアンサー率65% (242/372)
回答No.1

根本的にクライアントサイドとサーバーサイドを一緒に考えていらっしゃるようで・・・(^^;   onclick="set()" で   <SCRIPT LANGUAGE="VBScript" RUNAT="Server">   </SCRIPT> 内にある関数は呼び出せません。 クライアントサイドから呼び出せるのは(基本的には)クライアントサイドの関数だけです。

mybigbaby
質問者

お礼

基本的なところがわかっていなかったようです。 まだまだ勉強がたりませんね。 結局、この部分は関数化するのはやめました(^。^; 別の方法で完成させました。 でも、別の関数を作成することができました。 ありがとうございました。

mybigbaby
質問者

補足

では、 <SCRIPT LANGUAGE="VBScript" RUNAT="Server"> ではなく、 <SCRIPT LANGUAGE="VBScript"> とすればよいのでしょうか? しかし、 (1)行3:識別子がありません。 (2)行63:構文エラーです。 と、2つのエラーがでてきてしまいます。 関数にしなければ動作するのですが、 関数にする時には、プログラムの書き方も違ってくるのでしょうか?     

その他の回答 (1)

  • msystem
  • ベストアンサー率42% (79/186)
回答No.2

私も似たような質問を以前ここでし、皆さんのおかげで解決しました。(質問番号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の関数化」の回答にはなってませんね

参考URL:
http://oshiete1.goo.ne.jp/kotaeru.php3?q=114813
mybigbaby
質問者

お礼

回答ありがとうございました。 結局、昨日なんとか完成しました!! こういう方法もあるのですね。 これからの参考にさせていただきます(^。^)

関連するQ&A

  • wshでcsvファイルのソートを行いたい

    wshのプログラムで困っているため教えてください。 wshでcsv(カンマ区切り)のファイルのソートを行い、Escel形式で保存するプログラムを書いています。 調べてみたところ、wshではソート関数がないようで、 adodbのsort関数を使用して対処しようとしていますが、どうもうまくいきません。 (※adodbの必要はないのですが、ExcelVBAのsortのコードを書こうとするとエラーになってしまったので、adodbにしています。) <仕様> csvファイルのソートのキーになるのは、「判定区分」の値で昇順に行いたいです。 csvファイルの一行目は、カラム名としてソート対象にはなりません。 読み込んだcsvファイルをexcel形式に保存したいです。 ■csvファイルの形式は、以下のような形です。 性別,年代,判定区分,生年月日,日付 女性,10,0,2010/01/10,2013/7/7 23:57 男性,50,2,2000/03/30,2013/7/7 13:7 女性,10,0,1990/01/20,2013/7/7 15:22 女性,20,1,2001/12/10,2013/7/7 8:10 *----------------------------------- <ソース> Set con = CreateObject("ADODB.Connection") With con .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Path & ";" _ & "Extended Properties='text;HDR=Yes;FMT=Delimited'" .Open End With Set rec = CreateObject("ADODB.Recordset") rec.Open "select * from " & csvfile & " order by 判定区分", con *----------------------------------- うまくいかないため ↓でも書いています。 *----------------------------------- Const adDate = 7 Const adVarChar = 200 Dim ans Set objADO = CreateObject("ADODB.Connection") Set rs = CreateObject("ADODB.Recordset") Set re = CreateObject("VBScript.RegExp") rs.Fields.Append "性別", adVarChar, 255 rs.Fields.Append "年代", adVarChar, 255 rs.Fields.Append "判定区分", adVarChar, 255 rs.Fields.Append "生年月日", adDate rs.Fields.Append "日付", adDate rs.Open ans = "" rs.Sort ="判定区分 ASC" rs.MoveFirst Do While Not rs.EOF ans = ans & rs.Fields(0).Value & vbCrLf rs.MoveNext Loop MsgBox ans エラーになってしまいます。 ソート処理だけですでににっちもさっちもいかないため、教えていただきたいです。 どうぞ宜しくお願いいたします。

  • VBScriptについて

    VBScriptで現在このようなプログラムを書いています。 これで実行すると、空欄の場合もメッセージがでてしまいます。 そこで、空欄にはメッセージがでないようにしたいのですが・・・ どのように記述すればよいのか教えてください。 If IsNumeric(Request.Form("kiso")) Then rs.Fields("KISO").Value = CInt(Request.Form("kiso")) Else strMessage = strMessage & "<br>" & "基礎は数値で入力してください" End If

  • NULL文字のINSERT

    こんにちは。 SQLServer初心者です。 Access VBAで SQLServerから抽出したデータをDBにINSERT しようとしてるのですが、抽出した項目にNULLデータがあるので エラーになってしまいます。 どのように回避すればよろしいでしょうか? ISNULL関数を使えば回避できるのでしょうか? たとえば以下のようなINSERT分を実行したいのですが、 顧客名_漢字のフィールドにはNULL文字が入ってる場合があるとします。 よろしくお願い致します。 strSQL2 = "" strSQL2 = strSQL2 & " INSERT INTO NORSE_TMP_DATA ( " strSQL2 = strSQL2 & " ポート名" strSQL2 = strSQL2 & ", 顧客名_漢字" strSQL2 = strSQL2 & ", 顧客名_カナ" strSQL2 = strSQL2 & ", 契約状態" strSQL2 = strSQL2 & ", 契約番号" strSQL2 = strSQL2 & ", 契約枝番号" strSQL2 = strSQL2 & ", 顧客番号" strSQL2 = strSQL2 & " VALUES (" strSQL2 = strSQL2 & " '" & rs.Fields("ポート名").Value & "'" strSQL2 = strSQL2 & ", '" & rs.Fields("顧客名_漢字").Value & "'" strSQL2 = strSQL2 & ",'" & rs.Fields("顧客名_カナ").Value & "'" strSQL2 = strSQL2 & ",'" & rs.Fields("契約状態").Value & "'" strSQL2 = strSQL2 & "," & rs.Fields("契約番号").Value strSQL2 = strSQL2 & "," & rs.Fields("契約枝番号").Value strSQL2 = strSQL2 & "," & rs.Fields("顧客番号").Value strSQL2 = strSQL2 & " )"

  • Excel VBA ADOでのCSV取込みについて

    下記は、Excel VBAでADOを使って、CSVデータを取り出すソースです。ソースは、とあるサイトからほぼ丸写しです。 Sub main()   Const DRIVER As String = "DRIVER={Microsoft Text Driver (*.txt; *.csv)};DBQ="   Const PROVIDER As String = "Provider=MSDASQL;Extended Properties="""   Dim cn As New ADODB.Connection   Dim rs As New ADODB.Recordset   Dim idx As Integer   Dim strSQL As String   cn.ConnectionString = PROVIDER & DRIVER & "C:\"""   cn.Open   '全件数取得   strSQL = "SELECT * FROM Sample.csv"   'CSVファイルの内容を取得   Set rs = cn.Execute(strSQL)   rs.MoveFirst   Do Until rs.EOF     For idx = 0 To rs.Fields.Count - 1       Debug.Print rs.Fields(idx).Value '←ここ     Next idx     rs.MoveNext   Loop   Set rs = Nothing   cn.Close   Set cn = Nothing End Sub ここで、「'←ここ」と示した行のrs.Fields(idx).Valueって、実際には「001」と書かれた値は、ダブルクォーテーションでも入ってない限りは「1」と変換されちゃいますよね?これをちゃんと、実際の値「001」のまま取得することって出来ないのでしょうか?

  • VBScriptでファイル保存先のデフォルト設定

    こんにちわ。 ASP(VBScript)で、CSV形式のデータを出力する処理を作成しています。 ヘッダー部に Response.ContentType = "text/csv" Response.AddHeader "Content-Disposition","filename=" & CSVFileName と書いて、該当のページを開いたら、ファイル保存のダイ アログを表示するようにしているのですが、ファイル保存 先は、デフォルトではデスクトップになっています。 これを、Cドライブあたりにしたいのですが、VBScriptで その辺の制御はできるのでしょうか?

  • アクセスVBA。ADO

    CSVから列を分割してテーブルにしたいかったので 下記のコードを記述しましたが、 Dim cn As ADODB.Connection Dim rs As New ADODB.Recordset Dim datacount As Long Set cn = New ADODB.Connection With cn .ConnectionString = "Provider=Microsoft.jet.OLEDB.4.0;Data Source=" & CurrentProject.Path & "\;" .Properties("Extended Properties").Value = "text;HDR=YES;" .Open End With Set rs = cn.Execute("SELECT * FROM 構成マスタ.csv") datacount = rs.Fields.Count For i = 0 To datacount strsql = "SELECT " & rs.Fields(i).Name & " INTO " & rs.Fields(i).Name & " FROM 構成マスタ.csv;" cn.Execute strsql Next i rs.Close cn.Close Set rs = Nothing Set cn = Nothing SQLを実行するところで、「日付エラー」となってしまいます。 データには特に日付等はないのでエラーになる原因がわかりません。 どなたかご教示いただけますでしょうか。

  • asp(vbscript)で画面を切り替える

    教えてください。 Vbscript初心者です。 現在111.aspというプログラム内で、onClick="abc()"という関数を呼び出し 呼ばれた側の関数で新たに別画面を呼び出すようにしています。 別画面(222.asp)でなく画面を切り替えるようにしたいのですが、どのように変更すれば良いか分かりません。 宜しくお願い致します。 <TD><INPUT type="button" value="テスト" onClick="abc()"></TD> function abc(){ window.open("222.asp?id=<%=Request.QueryString("id")%>") }

  • ASPでExcelのセルに罫線、色付け

    WebサーバーにExcelがセットアップされてないので、 Set rs=Server.CreateObject("ADODB.Recordset") を使用し、Excelオブジェクトを作成後、 接続文字列、SQLを渡して、レコードセットを開きました。 strSQL = "select * from DATA_RANGE" Rs.Open strSQL, Con, 0 '0=adOpenForwardOnly 以下のようにして、Excelに値をセットすることはできたのですが、 rs.Fields(0).Value = "AAA" 罫線や、色をつける方法がわかりません。 どうかご教授ください。

  • WSHでVBScript使いDBのデータを削除、新規登録する。

    申し訳ありませんが、素人の質問です。 WSHをVBSCriptでDBのレコードを削除、 テキストファイルを呼びだし、 呼び出したデータを変数に格納し、DBにインサートしたいのですが、 DBへの接続の仕方がわかりません。 ASPで作成したものは正常に動作するのですが、 WSHで作成したものは、接続するさいにエラーしてしまいます。 エラー箇所は下記の部分です。 すみませんが、回答お願いします。 テキスト呼び出し箇所 Set fso = Server.CreateObject("Scripting.FileSystemObject") Set fts = fso.OpenTextFile("D:\**\*\*\*\A.dat", 1, False, 0) 接続箇所 Con_s.BeginTrans DELETE箇所 Set Rs = Server.CreateObject("ADODB.Recordset") Cmd_s.CommandText = delSq Rs.Open Cmd_s, , adOpenForwardOnly インサート箇所 Set Rs = Server.CreateObject("ADODB.Recordset") Cmd_s.CommandText = strSql Rs.Open Cmd_s, , adOpenForwardOnly 切断箇所 Con_s.CommitTrans

  • Excel VBA EOFに関して

    テキストボックスにDateを入力し、SQLServerに接続しSelectの結果をシートに書き込むだけのものなのですが、「BOFとEOFのいずれかがTrueになっているか、または現在のレコードが削除されています」というエラーでさっぱりわかりません。どなたかアドバイスをお願い致します。 -前後省略- stdate = UserForm1.stdate.Value endate = UserForm1.endate.Value strsql = "select ***" strsql = strsql & "from ***" strsql = strsql & "where *** and ***.start_date between '" & stdate & "' and '" & endate & "' " con.Open connectionString Set rs = con.Execute(strsql) Sheets("Data1").Select rs.MoveFirst i = 2 Do Until rs.EOF Cells(i, 1) = rs.Fields(0).Value Cells(i, 2) = rs.Fields(1).Value Cells(i, 3) = rs.Fields(2).Value Cells(i, 4) = rs.Fields(3).Value i = i + 1 rs.MoveNext Loop con.Close Set con = Nothing Exit Sub Err_DBConnectOpen: MsgBox Err.Description If con.State <> ADODB.adStateClosed Then con.Close End If Set con = Nothing End Sub