- ベストアンサー
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で作成しています。 今日中に仕上げなければならないので、困っています。 よろしくお願いします。
- mybigbaby
- お礼率31% (22/70)
- Microsoft ASP
- 回答数2
- ありがとう数3
- みんなの回答 (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の関数化」の回答にはなってませんね
お礼
回答ありがとうございました。 結局、昨日なんとか完成しました!! こういう方法もあるのですね。 これからの参考にさせていただきます(^。^)
関連する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
- 締切済み
- Microsoft ASP
- 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 & " )"
- ベストアンサー
- SQL Server
- 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で その辺の制御はできるのでしょうか?
- 締切済み
- Microsoft ASP
- アクセス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を実行するところで、「日付エラー」となってしまいます。 データには特に日付等はないのでエラーになる原因がわかりません。 どなたかご教示いただけますでしょうか。
- 締切済み
- Visual Basic
- 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")%>") }
- ベストアンサー
- Microsoft ASP
- 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" 罫線や、色をつける方法がわかりません。 どうかご教授ください。
- ベストアンサー
- Microsoft ASP
- 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
- ベストアンサー
- Visual Basic
お礼
基本的なところがわかっていなかったようです。 まだまだ勉強がたりませんね。 結局、この部分は関数化するのはやめました(^。^; 別の方法で完成させました。 でも、別の関数を作成することができました。 ありがとうございました。
補足
では、 <SCRIPT LANGUAGE="VBScript" RUNAT="Server"> ではなく、 <SCRIPT LANGUAGE="VBScript"> とすればよいのでしょうか? しかし、 (1)行3:識別子がありません。 (2)行63:構文エラーです。 と、2つのエラーがでてきてしまいます。 関数にしなければ動作するのですが、 関数にする時には、プログラムの書き方も違ってくるのでしょうか?