|
[三流君] Top ken3.orgへ [ASP解説] ASPの解説TOP [ASP記事 バックナンバー] 番号順のバックナンバー [SOHO/在宅プログラマー/派遣] 派遣のお話ほか [...サイトマップ(総合案内へ)] 分類別ガイド ADOで[ADO Mdb接続] ,[ADO Excel接続] ,[ADO CSV接続] [ASP Form データのやりとりPOSTとGET] [ASPでTextFile操作] [ASPでVBScriptを使う] [その他サンプル] |
| No.80 | 2003/10/12 Microsoft Text Driver (*.txt; *.csv) で接続してみた |
[ページTOPへ戻る] |
<Microsoft Text Driver (*.txt; *.csv) で接続してみた>
こんにちは、三流プログラマーのKen3です。 今回は、 Driver={Microsoft Text Driver (*.txt; *.csv)} を使って、csvファイルと接続してみました。/* * 1.今回のキッカケ */
csvファイルの中から、指定した行を削除したい。 現在の接続は、 Con = "Driver={Microsoft Text Driver (*.txt; *.csv)};DBQ=" & パス & ";" を使っています。 そんな処理の質問をもらったので、 今回チャレンジしてみたいと思います。 csvファイル内の行を削除かぁ・・・ 全部書き出すや読み込みしかやってなくて、考えたことなかったなぁ。/* * 2.まずは、csvファイルとの接続テスト処理を作成する */
test080.csv と 下記のようなカンマ区切りのファイルを作成しました ISBN,書名,出版社名略称,価格,発売日 4-8399-0986-5,CPUの創りかた,毎コミ,2800,2003/9/30 4-8399-0997-0,速効!図解 ホームページ・ビルダー7,毎コミ,1280,2003/3/13 4-7980-0455-3,写真・イラスト入りはがきをつくる本,秀和システム,1280,2003/1/30 4-89369-974-1,VBAによるArcGISプログラミングガイド,BNN新社,2500,2003/9/26 4-7561-4198-6,プロジェクトマネジメント 実践の極意,アスキー,3200,2002/12/2 さてと、このcsvファイルと接続して、データを表示してみたいと思います。 ASPからAccess(*.MDB)への接続は、 ^^^^^^^^^^^^^^^^^^^^^^ http://www.ken3.org/cgi-bin/group/asp_ado_mdb.asp に、サンプルのリンクまとめたけど、 Set db=Server.CreateObject("ADODB.Connection") db.Provider = "Microsoft.Jet.OLEDB.4.0" db.ConnectionString = Server.MapPath("db026.mdb") db.open なんて感じで、簡単にASPからAccessMDBへ接続できました。 ASPからExcel(*.xls)への接続は、 ^^^^^^^^^^^^^^^^^^^^^^^ http://www.ken3.org/cgi-bin/group/asp_ado_excel.asp に、チョコットまとめたけど、 'ADO DB Recordset オブジェクトを作成して、 Set rs=Server.CreateObject("ADODB.Recordset") 'シートに付けた範囲名前をテーブル名に strSQL = "select * from DATA_RANGE" '接続文字列で、Microsoft Excel Driver (*.xls)ドライバーを指定 Con = "Driver={Microsoft Excel Driver (*.xls)};DBQ=" & _ Server.MapPath("test053.xls") & ";" 'レコードセットを開いてみた Rs.Open strSQL, Con, 0 '0=adOpenForwardOnly ASPからカンマ区切り(*.csv)への接続は、 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ これから作成するんだけど(笑)、 書き込みあった質問だと >Con = "Driver={Microsoft Text Driver (*.txt; *.csv)};DBQ=" & パス & ";" を使用しているみたいなので、簡単に書けるかな。 そんなこと言ってないで、簡単なら、書いてみろよ。 ハイハイ。 Microsoft VBScript 実行時エラー エラー '800a01a8' オブジェクトがありません。: '' /cgi-bin/test/test080-1.asp, 行 54 なんて感じで、変数名を間違えたりしながら、簡単に書いてみました(まだ言ってるよ) (時間かかりましたけど、なんとか、書けました) ポイントは、 ^^^^^^^^^^^^ 'ADO DB Recordset オブジェクトを作成する、英文そのままじゃん Set rs=Server.CreateObject("ADODB.Recordset") と、レコードセットのオブジェクト作成します。 この段階では、空のワクって感じですね。 'SQLのテーブル名には、ファイル名を指定します。 strSQL = "select * from test080.csv" レコードセットの元となるSQL文では、 通常テーブル名を書く所、csvのアクセスでは、 ファイル名となります。(test080.csvからSelect*で全項目って感じかなぁ) ^^^^^^^^^^^^^^^^^^^^^ 次が一番のポイントの接続情報の作成ですね。 '接続情報の作成 ドライバーの指定と、DBQには、パスのみを指定する Con = "Driver={Microsoft Text Driver (*.txt; *.csv)};DBQ=" & _ Server.MapPath(".") & ";" '↑MapPathに(".")を私、カレントディレクトリを渡す ここでは、ドライバーの指定とDBQでディレクトリを指定してます。 この2つ(SQL文と接続情報)を使い、 レコードセットをオープンします。 '接続文字列、SQLを渡して、レコードセットを開く rs.Open strSQL, Con, 0 '0=adOpenForwardOnly .Openのメソッドを使い、SQLと接続情報を渡してます。 3番目の0(adOpenForwardOnly)は、 今回、読み込みのテストだったので前方スクロールのカーソルにしました。 ※rs.MoveNextしか使っていなくて、戻らないし、追加・変更・削除も無いので 接続文字列を作るだけで、csvファイルへアクセスできたのには少しびっくりしました。 http://www.ken3.org/cgi-bin/test/test080-1.asp で、下記ソースのテストできます。 <%@LANGUAGE=VBScript%> <html> <head> <title>ASP ADO Driver={Microsoft Text Driver (*.txt; *.csv)};DBQ=で接続</title> </head> <body> <h1>ASP ADO Driver={Microsoft Text Driver (*.txt; *.csv)};DBQ=で接続</h1> test080-1.asp<br> ASPからADOを使用してテキストファイル(*.csv)に接続を行う<br> ファイル名はtest080.csvで、データは,カンマで区切られてます。<br> <hr> <% 'ADO DB Recordset オブジェクトを作成する、英文そのままじゃん Set rs=Server.CreateObject("ADODB.Recordset") 'SQLのテーブル名には、ファイル名を指定します。 strSQL = "select * from test080.csv" '接続情報の作成 ドライバーの指定と、DBQには、パスのみを指定する Con = "Driver={Microsoft Text Driver (*.txt; *.csv)};DBQ=" & _ Server.MapPath(".") & ";" '↑MapPathに(".")を私、カレントディレクトリを渡す Response.Write "使用する接続文字列は<br>" Response.Write "<STRONG><CODE>" & Con & "</CODE></STRONG><hr>" '接続文字列、SQLを渡して、レコードセットを開く rs.Open strSQL, Con, 0 '0=adOpenForwardOnly 'データの表示をテーブルで行う Response.Write "<TABLE Border='1'>" '見出しを(フィールド名を)そのまま書き込む Response.Write "<TR>" For Each fld_A In rs.Fields 'フィールドのアイテムに対してループ Response.Write "<TH>" & fld_A.Name & "</TH>" '←.Nameでフィールド名 Next Response.Write "</TR>" 'お約束のEOFまでループは(データが無くなるまでループ)、 Do While rs.EOF = False 'レコードセットの.EOFがFalseの間 Response.Write "<TR>" '内容を表示する For Each fld_A In rs.Fields 'フィールドのアイテムに対してループ Response.Write "<TD>" & fld_A.Value & "</TD>" '←.Valueでフィールドの値 Next Response.Write "</TR>" rs.MoveNext '次のレコードに移動する Loop Response.Write "</TABLE></SAMP>" 'テーブルは終わりです '後始末 rs.Close '開いていたレコードセットを閉じる Set rs = Nothing 'お行儀よくオブジェクトも開放しましょう %> <hr> [<a Href="test080.csv" TARGET="_blank">test080.csvを開く</a>]<br> </body> </html>/* * 3.好奇心で、ソートできるか試してみる */
なんとか接続がうまく行きました。 strSQL = "select * from test080.csv" なんて感じで、無条件でデータを取り出してました。 Select文が普通に書けるなら、ソートもできるのかなぁ? よし、試してみますか。 こんな感じで、 strSQL = "select * from test080.csv Order By 発売日 DESC" Order By 発売日 DESCで、発売日の降順にしてみました ISBN,書名,出版社名略称,価格,発売日 4-8399-0986-5,CPUの創りかた,毎コミ,2800,2003/9/30 4-8399-0997-0,速効!図解 ホームページ・ビルダー7,毎コミ,1280,2003/3/13 4-7980-0455-3,写真・イラスト入りはがきをつくる本,秀和システム,1280,2003/1/30 4-89369-974-1,VBAによるArcGISプログラミングガイド,BNN新社,2500,2003/9/26 4-7561-4198-6,プロジェクトマネジメント 実践の極意,アスキー,3200,2002/12/2 ・ ・ ・ のデータを無事にソートすることができるかなぁ? テスト結果は、 http://www.ken3.org/cgi-bin/test/test080-2.asp を見てください。/* * 4.Count関数で出版社名略称を集計してみた */
ISBN,書名,出版社名略称,価格,発売日 4-8399-0986-5,CPUの創りかた,毎コミ,2800,2003/9/30 4-8399-0997-0,速効!図解 ホームページ・ビルダー7,毎コミ,1280,2003/3/13 4-7980-0455-3,写真・イラスト入りはがきをつくる本,秀和システム,1280,2003/1/30 4-89369-974-1,VBAによるArcGISプログラミングガイド,BNN新社,2500,2003/9/26 4-7561-4198-6,プロジェクトマネジメント 実践の極意,アスキー,3200,2002/12/2 ・ ・ ・ のデータに対して、 出版社名略称でグループ化して、冊数を数えてみました。 CSVファイルにも、ADO接続で、Gorup Byが使えることを確認してみました。 'Group By 出版社名略称でグループ化して冊数を数えてみました strSQL = "select 出版社名略称, Count(*) AS 冊数 from test080.csv" strSQL = strSQL & " Group By 出版社名略称" と、SQL文を発行すると、 なんだぁ普通に使えるみたいですね。 ^^^^^^^^^^^^^^^^^^^^ テスト結果は、 http://www.ken3.org/cgi-bin/test/test080-3.asp を見てください。 -【けんぞう!】--------------------------------------------------------- ASPが利用可能なレンタルサーバーをお探しのアナタ、 http://www.ken3.org/asp/server.html ← けんぞうも使っているサーバーの紹介 『おっIISでbasp21でメール送信、mdbも使えるよ』(三流PG:31歳) ------------------------------------------------------------------------/* * 5.終わりの挨拶 </HTML> */
今回は、 ADOでCSVファイルと接続してみました。 ヤバイ、質問は、CSVファイルのデータ削除方法だった。 すぐに調べないと・・・ 違う方法があるかもしれないけど、 何かの参考となれば幸いです。 ASP、VBScript勉強中の三流プログラマーのKen3でした。
| No.81 | 2003/10/21 Split関数で複数キーワードをスペースで分解する |
[ページTOPへ戻る] |
<Split関数で複数キーワードをスペースで分解する>
こんにちは、三流プログラマーのKen3です。 今回は、 スペースで区切られた検索条件で遊んでみたいと思います。/* * 1.今回のキッカケ */
掲示板で下記の質問をもらいました ------ 質問1:検索キーワードにおいて、複数キーワードを区切る祭 半角/全角スペースの入力に対応方法は可能でしょうか? (半角だけのは出来ているのですが・・・) ・ ・ ・ splkey = Split(Request.Form("keywd")," ") SQL="SELECT * FROM all_info WHERE search Like '%" & splkey(0) & "%' " For i=1 To UBound(splkey) SQL=SQL & "OR search like '%" & splkey(i) & "%' " Next Set rs=db.Execute(SQL) ------ と、 フリーワードの検索処理みたいですね。/* * 2.単純に考えて、全角スペースを半角スペースへ置換する */
三流 プログラマー 三流□プログラマー ※□は全角スペースだと思ってください スペース区切りで検索キーワードを入れるのかぁ。 それをSplit関数でバラす、そんな感じですね。 試しに、昔作成したSplit関数のテストプログラムを使ってみると、 http://www.ken3.org/cgi-bin/test/test024-2.asp で、 三流 プログラマー と全角のスペースをテストすると 元のデータは、[三流 プログラマー]です strBOX(0) -- 三流 プログラマー あらら、分解できないよ・・・ 問題点を整理すると、 ^^^^^^^^^^^^^^^^^^ 全角の空白だとSplit関数で分解できない。 って、ことですね。 あたりまえか、全角のスペースと、半角スペースを区別しているんだから。 そっか。チョット融通効いてもいいのにねコンピュータは正直だから。 頭固い男は美人オペレーターに嫌われるって、コンピュータ君に教えてあげなきゃ。 ~~~~~~~~~~~~~~~~~~~~~~ さて、どうやって、教えるかな。 全角スペースと半角スペースの区別が付かないので、 全角スペースを半角スペースに変換してから、キーワードの分解処理を行う、 そんな対応方法をコンピュータに教えてやるか。 全角スペース□を半角スペースにReplace関数で置換する strMOTO = Replace(strMOTO, " "," ") その後、Split関数を使用して、スペース指定で配列を作成する strBOX = Split(strMOTO, " ") って、流れで、作成してみました。 http://www.ken3.org/cgi-bin/test/test081-1.asp で、テストできるので、遊んでみてください。 test081-1.asp ---- <%@LANGUAGE=VBScript%> <html> <head> <title>キーワード分解 Replace関数とSplit関数とUBound関数</title> </head> <body> <h1>キーワード分解 Replace関数とSplit関数とUBound関数</h1> test081-1.asp<br> スペースで区切って好きな言葉を入れてください(全角半角スペースまぜてね)<br> <FORM ACTION="test081-1.asp" METHOD="POST"> <INPUT TYPE="text" SIZE="40" NAME="DATA" VALUE="AB 型 三流君 ←全角"><BR> <INPUT TYPE="submit" VALUE="分割実行"> <INPUT TYPE="reset" VALUE="クリア"> </FORM> 分割実行ボタンを押すとReplace関数で全角スペースを半角に置換してから<br> Split関数とUBound関数を使用してデータ分割表示します<br> <br> <% '入力パラメーターDATAがあるかチェックする If IsEmpty(Request.Form("DATA")) = False Then Response.Write "<hr><b>テスト結果</b><br>" 'データが入力されていたら、バラして表示する Dim strMOTO strMOTO = Request.Form("DATA") 'Postで受け取ったデータ Response.Write "元のデータは、[" & strMOTO & "]です<br>" '全角スペース□を半角スペースに置き換える strMOTO = Replace(strMOTO, " "," ") 'スペースでデータをバラす strBOX = Split(strMOTO, " ") '区切り文字にスペース指定 'ループでデータを表示させる For i = 0 To UBound(strBOX) 'UBound使用インデックス最大値までループ Response.Write "<BR>" Response.Write "strBOX(" & i & ") -- " '変数名表示 Response.Write strBOX(i) '中身を表示 Next End If %> <hr> 処理概要:<br><code> 全角スペース□を半角スペースにReplace関数で置換する<br> strMOTO = Replace(strMOTO, " "," ")<br> その後、Split関数を使用して、スペース指定で配列を作成する<br> strBOX = Split(strMOTO, " ")<br> Split関数で配列を作成後、<br> 'ループでデータを表示させる<br> For i = 0 To UBound(strBOX) 'UBound使用インデックス最大値までループ<br> とUBound関数で配列の要素数を判断、ループさせてます。</code><br> </body> </html> -- 余談 -- ASP VBScript関数の解説とサンプルをまとめる http://www.ken3.org/cgi-bin/group/asp_vbscript.asp も、ヒマな時見て笑ってください。/* * 3.Split関数の意外な盲点? */
よし、これで、Webの恋人検索画面で男性操作者が かわいい□素直□明るい性格 なんて検索条件を入れても、分解して検索可能になったかなぁ。 いつもの小芝居を1つ(最近不評だけど) ^^^^^^^^^^^^^^^^^^^^ 恋人紹介の怪しい場所での風景? オイ責任者出せ責任者 なんでしょうか? なんだこの恋人検索システム、 保母 看護婦 で検索したのに、 家事手伝い や OL や 秘書 が検索結果として出力されるよ えっ、(冗談でしょう?操作間違ってんだろ会いたい会いたいと興奮して) 客のオレ様がウソ言ってると思うのか?やってみろよ。(別な意味で興奮?) チッ、パソコン使えねぇエロオヤジが・・・と心で思いつつ、 (営業スマイルで)「では、私が試しにやってみますね」 保母 看護婦 で、でますよXX件、あとがんばってくださいね(手間かけさせやがって) なんて、小話は、置いといて、 話の展開、バレましたよね。 全角スペースじゃなくて、 今度は、半角スペースを2つ書いてみると、 ~~~~~~~~~~~~~~~~~~~~~~~~~~ 保母 看護婦 を http://www.ken3.org/cgi-bin/test/test081-1.asp でテストしてみると、(半角SP2つを入れてキーワードを区切ってみると) strBOX(0) -- 保母 strBOX(1) -- strBOX(2) -- 看護婦 あらら、見事に1つ抜けましたね。 連続するスペースをSplit関数では、判断できないみたいですね。 これで、条件を作成すると、"..OR 項目 Like '%%'"みたいになって、 全件検索されて、 保母さん、看護婦さん が大好きなおじさんに怒られるよ(笑) システムの作り手は、 ^^^^^^^^^^^^^^^^^^^^ パソコン操作上手なので、気が付かないけど、 スペースを2つや全角スペースの入力はあると思う。 さて、看護婦好きのおじさんのタメに、少し細工するか。 一番安易なのは、 また同じ思考で行くと、Replace関数で半角2つを半角1つに置換する。 '全角スペース□を半角スペースに置き換える strMOTO = Replace(strMOTO, " "," ") 'さらに、半角スペース2個を半角スペース1個にする strMOTO = Replace(strMOTO, " "," ") 'スペースでデータをバラす strBOX = Split(strMOTO, " ") '区切り文字にスペース指定 でOKかなぁ。 場当たり的な対応なんだよね ^^^^^^^^^^^^^^^^^^^^^^^^^^ なにが?(いつもの半ギレ) 出来たよ半角2つでも検索OKになったよ。 半角スペース2個を半角スペース1個にする strMOTO = Replace(strMOTO, " "," ") そんな対応なんだぁ、(バカにしたような目線を送りつつ) じゃ、半角3つスペースがあったら? あれ?おかしいなぁ。 strMOTO = "高収入 高学歴" とスペース3つを strMOTO = Replace(strMOTO, " "," ") で置換しても、 "高収入 高学歴" 3つが2つに減るだけなんですね。 うるせえなぁ。(アラばかり探しやがってこのヤロウ!) strMOTO = Replace(strMOTO, " "," ") strMOTO = Replace(strMOTO, " "," ") strMOTO = Replace(strMOTO, " "," ") ほらよ、これで、4つOKだよ。 いくらなんでもそんなにスペース入れないだろう。 でも、5つ入れたら? そこまで面倒見切れないよ・・・わかったよ、ループで回しますよ。 10回も回せばいいでしょ。 For rCNT=1 To 10 '複数スペースを最大10までカット(1つに)する strMOTO = Replace(strMOTO, " "," ") Next それで、安心したの?もしかして? いいだろ、10個以上スペースなんて入れないよキーワードに。 じゃ、こんな夢見る女性が居たら? 私は、高学歴か高収入かマンション持っているか次男坊のどれかを検索したいのです。 検索条件には(or検索で) 高学歴 高収入 マンション 次男 の4つで検索をかけました。 OR検索だったので、未来の彼氏候補が500人も見つかっちゃった。 サスガのお姉ちゃんもここからは多くて選びきれないので、 とりあえず、高収入かマンション持っている人にしたいので、 高学歴と次男のキーワードを消して、下記の条件で検索をかけました。 高収入 マンション ↑※ ↑※ あれ、なんか検索結果がおかしい?なぜでしょう? 高学歴 高収入 マンション 次男 これを操作する時、アナタなら?どうしますか? DELやBSで 高収入 マンション とキレイにカットしてくれればいいけど □高収入□マンション□ と、前後にスペースを残してカットしてしまいました。 (あと、スペースで上書きする人も希少だけど居たりする、スペースで消す?) □高収入□マンション□ を作成した、分解処理で分解すると、頭のスペースに反応してしまうんですね。 さて、どうしましょうか? Trim関数で前後のスペースをカットすればいいんだろ(半分キレぎみ) strMOTO = Trim(strMOTO) で、いいんでしょ。/* * 4.作成した、キーワード分解処理 */
" 背が高い お金持ち 高学歴 マンション " ・頭にスペースあり、最後にスペースあり ・全角スペース□で区切られていたり、 ・スペース2個や4個で区切られている、 そんなデータに対応するために 作成した流れ ^^^^^^^^^^^^ 前後のスペースを取り除くためTrimを使用する strMOTO = Trim(strMOTO) 全角スペース□を半角スペースにReplace関数で置換する strMOTO = Replace(strMOTO, " "," ") スペースn個を1つのスペースにする<br> For rCNT = 1 To 10 '複数スペースを最大10までカット(1つに)する strMOTO = Replace(strMOTO, " "," ") Next その後、Split関数を使用して、スペース指定で配列を作成する strBOX = Split(strMOTO, " ") と、こんな感じで、スペース区切りのキーワードを作成してます。 あとは、 For i = 0 To UBound(strBOX) などで、SQL文を作成すればOKかなぁ。 http://www.ken3.org/cgi-bin/test/test081-2.asp で、テストできます。遊んでみてください。 -【けんぞう!】--------------------------------------------------------- 転職関係、在宅プログラマー、SOHOの広告まとめました http://www.ken3.org/etc/500yen/zaitaku.html いろいろとあるので転機の人はぜひ 登録料無料、匿名で探せるので在宅で小金稼ぎの人も見てね ~~~~~~~~~~~~~~~~ オレ様、私は、SE様だ、月給30万以上ボーナス100万を探すのもありだよ。 私にみたいにVBA少しできるぐらいだと仕事無いよ・・・ と軽く言われても匿名なら気にならないし(笑) 逆にこんな簡単な仕事で月給27万貰えるの?って会社もあるし、世の中イロイロ。 http://www.ken3.org/etc/500yen/job.html ------------------------------------------------------------------------/* * 5.終わりの挨拶 </HTML> */
今回は、 キーワードの分解処理に挑戦してみました。 Split関数を使用するのですが、その前に、データをキレイにするのに手間取りました。 Split単: http://www.ken3.org/cgi-bin/test/test024-2.asp (Splitのみ全角SP不可) 途中 : http://www.ken3.org/cgi-bin/test/test081-1.asp (スペースn個未対応) 最終版 : http://www.ken3.org/cgi-bin/test/test081-2.asp (前後スペース、対応) で、テストできます。遊んでみてください。 もっと、想定外の操作ってあったりするけど、 何かの参考となれば幸いです。 ASP、VBScript勉強中の三流プログラマーのKen3でした。
| No.82 | 2003/10/29 ページ単位の表示にチャレンジしてみた |
[ページTOPへ戻る] |
<ページ単位の表示にチャレンジしてみた>
こんにちは、三流プログラマーのKen3です。 今回は、 データが100件あって、20行単位で画面にデータを表示したい、 そんなよく見かけるページ処理に挑戦してみたいと思います。/* * 1.今回のキッカケ */
掲示板で下記の質問をもらいました ------ 質問2:検索キーワードから表示したデータの改ページ処理機能 (検索結果が30件あったら、とりあえず20件まで 表示させ”次ページ”ボタン等で残り結果を表示させる ように・・・) ------ と、 ページ単位の表示について、質問をもらいました。/* * 2.単純に考えて、ページ番号をもらい空送りする */
う〜ん、どうしましょう。 いつもは、 DBと接続して、 strDB = "../test/cnt_etc.mdb" db.ConnectionString = Server.MapPath(strDB) db.open で、無事DBと接続したら、 下記のように、レコードセットをSQL文作って作成したなぁ。 'ORDER BY WriteTime DESC で書き込み時刻の降順にする Set rs = db.Execute("Select * From log ORDER BY WriteTime DESC") あとは、ループで、 'EOFまでループ or データ20件まで nCNT = 1 Do While rs.EOF = False And nCNT <= 20 '.EOFがFalseで20以下の間 なんて、やってたなぁ。 こいつを1ページ20単位で切り替えるのかぁ。 単純にページ番号をもらったら、空送りしてみますか。 test082-1.asp?page=5 とか、ページ番号をもらって、 5ページ目からスタートだから、 20*(page-1)分、80空読みして、 81からスタートすればOKかなぁ。 で、前後のページへの移動ボタンをつけるのかぁ。 test082-1.asp?page=5 だったら、 test082-1.asp?page=4 と test082-1.asp?page=6 へのリンクを作成するのかな。 何にも考えないで、そんな処理を作成してみます。 http://www.ken3.org/cgi-bin/test/test082-1.asp?page=5 や http://www.ken3.org/cgi-bin/test/test082-1.asp?page=21 と、指定ページに飛べるので、 テストして遊んでみてください。 下記が何も考えないで、空読みした処理のソースデータです。 <%@LANGUAGE=VBScript%> <% '頭でページのパラメータをチェックする nPAGE = Cint("0" & Request.QueryString("page")) If nPAGE = 0 Then 'パラメータ無しなら強引に1ページにする nPAGE = 1 End IF %> <html> <head> <title>20行単位でページ送りするテストプログラム</title> </head> <body> <h1>20行単位でページ送りするテストプログラム</h1> test082-1.asp?page=99とページ番号を受け取り、該当ページを表示する<br> 単純にループで空読みしてみました(オイオイ手抜きか?)<br> 前ページ・次ページのリンクも作ってみました。 <hr> <% 'テストで開始時刻の表示 Response.Write "開始:" & Now() & "<hr><br>" 'リンクを表示する、先頭ページのチェックpage=1だけは行う Response.Write "<b>" & nPAGE & "ページ</b> 表示中 -- " If nPAGE <> 1 Then '1ページ以外かチェックする Response.Write "[<a Href='test082-1.asp?page=" & (nPAGE - 1) & "'>" Response.Write "前ページへ</a>]" Else Response.Write "[前ページへ]" '押せないリンクじゃないけど、そのまま文字表示 End IF '次ページは手抜きで+1を必ず表示する '(最終ページのチェックぐらいしろよコラ)すみません手抜きで・・・ Response.Write "[<a Href='test082-1.asp?page=" & (nPAGE + 1) & "'>" Response.Write "次ページへ</a>]" Response.Write "<br>" 'ADO DB Connection オブジェクトを作成 Set db=Server.CreateObject("ADODB.Connection") db.Provider = "Microsoft.Jet.OLEDB.4.0" '接続DBの位置を渡し、DBオープン strDB = "cnt_etc.mdb" db.ConnectionString = Server.MapPath(strDB) db.open 'データベースをオープンする 'お約束のレコードセットの作成 テーブル名logから全項目(*)を指定 'ORDER BY WriteTime DESC で書き込み時刻の降順にする Set rs = db.Execute("Select * From log ORDER BY WriteTime DESC") 'データの頭だし 芸無く空読みする nCNT = 1 'EOFまでループ or データが(nPAGE-1)*20まで空読み Do While rs.EOF = False And nCNT <= (nPAGE-1) * 20 '.EOFがFalseで件数以下 '次のレコードにポインタを移動する(何もしてないのに・・・(笑)) rs.MoveNext 'これを忘れると悲惨なことに、、、 'カウンタを増やす nCNT = nCNT + 1 Loop 'データの表示をテーブルで行う Response.Write "<TABLE Border='1'>" '見出しをバカっぽく、そのまま書き込む Response.Write "<TR>" Response.Write "<TH>NO.</TH>" Response.Write "<TH>日付</TH>" Response.Write "<TH>来てもらった場所</TH>" Response.Write "<TH>リンク元</TH>" Response.Write "</TR>" 'EOFまでループ or nPAGE*20 件まで Do While rs.EOF = False And nCNT <= (nPAGE*20) '.EOFがFalseで30以下の間 Response.Write "<TR>" '1行、1レコードの内容を表示する Response.Write "<TD>" & nCNT & "</TD>" 'カウンタ表示 Response.Write "<TD>" & rs.Fields.Item("WriteTime") & "</TD>" '時刻 '訪問場所の表示 Response.Write "<TD><A HREF='" & rs.Fields.Item("URL") & "'>" Response.Write rs.Fields.Item("URL") & "</A></TD>" 'リンク元の表示 Response.Write "<TD><A HREF='" & rs.Fields.Item("referrer") & "'>" If Left(rs.Fields.Item("referrer"), 15) = "http://www.ken3" Then Response.Write Mid(rs.Fields.Item("referrer"), 20, 30) & "</A>...</TD>" Else Response.Write Left(rs.Fields.Item("referrer"), 30) & "</A>...</TD>" End If Response.Write "</TR>" & Chr(13) & Chr(10) 'データ表示終了(行の終わり) '次のレコードにポインタを移動する rs.MoveNext 'これを忘れると悲惨なことに、、、 'カウンタを増やす nCNT = nCNT + 1 Loop Response.Write "</TABLE>" 'テーブルは終わりです '開いていたレコードセットを閉じる rs.Close 'データベースも閉じようよ db.Close 'お行儀よくオブジェクトも開放しましょう(通常は自動的に解放されるけど) Set db = Nothing 'テストで終了時刻の表示 Response.Write "<hr>終了:" & Now() & "<hr>" %> こんな感じで、20単位で1ページを単純に管理してみました。<br> えっ、手抜き処理が多いって?<br> </body> </html>/* * 3.意外と速かったけど・・・結果オーライの処理なんだよね */
http://www.ken3.org/cgi-bin/test/test082-1.asp?page=1 と http://www.ken3.org/cgi-bin/test/test082-1.asp?page=40 時間がかかるかなぁと思ったら、 1つのテーブルでOrderByぐらいしか使っていないSQLだったので、 1ページ目と40ページ目(20行*40ページで800の空読み)あまり時間差が無かった。 ネタ的には、もっと時間がかかってほしくて。 なんで? マシーン速度に頼ったプログラムなんですよね。 ※たまたま、借りてたレンタルサーバーの性能がよかったのと、 共有サーバーで、負荷がたまたまかかっていなかった、 一番は、SQLが単純なので、比べられなかった など、いろいろと要因はあるんだけど。 だから?何が言いたいのアンタは? いいじゃん、動いてるんだから? まず、1点目、 たぶん皆さんも疑問に思うのが、 [<a Href='test082-1.asp?page=39'>前ページへ</a>] [<a Href='test082-1.asp?page=41'>次ページへ</a>] と 自分自身を呼んでます。 いいじゃん、ページが変わって、頭出しをするんだから。自分を呼んだって。 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ そこなんですよ、そこ。 頭から処理が走るので、 DBに再接続、レコードセットを再構築(SQLの再発行) してるんですよ。 これを、レコードセットを保持したまま、処理を継続できないかなぁ? そんなことを考えたり。 えっ、レコードセット、ずっと開きっぱなしなの? 複数人がレコードセット開きっぱなしで、 そっちのほうがサーバーに負荷かかるんじゃないの? でも、前ページ・次ページで何回も送っていくき、空読みするのもなぁ。/* * 4.問題点 */
最終ページのチェックが入っていないので、 http://www.ken3.org/cgi-bin/test/test082-1.asp?page=999 など、データが無いページを指定することができます。 う〜ん、チャントレコード数数えないとね。 -【けんぞう!】--------------------------------------------------------- ASPが利用可能なレンタルサーバーをお探しのアナタ、 http://www.ken3.org/asp/server.html ← けんぞうも使っているサーバーの紹介 『おっIISでbasp21でメール送信、mdbも使えるよ』(三流PG:31歳) ------------------------------------------------------------------------/* * 5.終わりの挨拶 </HTML> */
今回は、 ページ送りの処理に挑戦してみました。 いろいろと問題点を残しつつ。 次回以降の先送りが多くって。 あっ、先送りといえば、 前回のCVSへのアクセス処理、接続はOKで行のDELETE処理・・・ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ >QA ASP - No.80 >返信は、noreturn >二宮金次郎さん <xxxx@xxx.xxx> から >残念、途中で終わってしまった。csvファイルのデータ削除方法を、待っています。 >丁度、業務で、このことが必要になりましたので、よろしくお願いいたします。 なんて、書き込みいただいて、チャレンジしてみたけど、 .Deleteでエラーが発生するんですよね。 やはり、テキストドライバで途中の行を削除はムリなのかなぁ。 ※DBじゃないので、追加以外はできなくて、 削除や更新は、全体の再保存って処理を別に作成しないといけないのか・・ ハヤメに探らないと。 いつも、積み残しが多いメルマガですが、 何かの参考となれば幸いです。 ASP、VBScript勉強中の三流プログラマーのKen3でした。
| No.83 | 2003/11/10 Select TOP 20 と Select Top n PERCENT で遊ぶ |
[ページTOPへ戻る] |
<Select TOP 20 と Select Top n PERCENT で遊ぶ>
こんにちは、三流プログラマーのKen3です。 前回、 データが100件あって、20行単位で画面にデータを表示したい、 そんなよく見かけるページ処理に挑戦してみました。 今回は、その続きをグダグタと・・・/* * 1.今回のキッカケ */
掲示板で下記の質問をもらいました ------ 質問2:検索キーワードから表示したデータの改ページ処理機能 (検索結果が30件あったら、とりあえず20件まで 表示させ”次ページ”ボタン等で残り結果を表示させる ように・・・) ------ と、 ページ単位の表示について、質問をもらいました。 に対して、 ページ番号を受け取り、 Set rs = db.Execute("Select * From log ORDER BY WriteTime DESC") 'データの頭だし 芸無く空読みする nCNT = 1 'EOFまでループ or データが(nPAGE-1)*20まで空読み Do While rs.EOF = False And nCNT <= (nPAGE-1) * 20 '.EOFがFalseで件数以下 '次のレコードにポインタを移動する(何もしてないのに・・・(笑)) rs.MoveNext 'これを忘れると悲惨なことに、、、 'カウンタを増やす nCNT = nCNT + 1 Loop なんて、やってました。 http://www.ken3.org/cgi-bin/test/test082-1.asp?page=7 と、指定ページに飛べることは、飛べるけど・・・ SQL Select文をいろいろと探っていたら、 今回の件とはあまり関係無いけど、 ^^^^^^^^^^^^^^^^^^^^^^^^^^ Select TOP 20 とか Select 20 〜 なんて項目を見つける/* * 2.Select TOP XXX を使ってみた */
SQLの基本とか言われそうだけど、 Select文で、条件を絞るのには、Whereの条件式を使います、 帰ってくる結果を調整する書き方、 Select TOP 30 なんて書き方ができるんですね。 ランキングの表示で、 Select URL, Count(URL) As URLCNT From log GROUP BY URL HAVING Count(URL) >= 50 ORDER BY Count(URL) DESC と、 SQL文 HAVING句でGroup化されたレコードに条件設定する http://www.ken3.org/cgi-bin/test/test043-1.asp で、 件数が50件以上の上位データを表示してましたが、 TOPってキーワードを使うと、TOP 20とか簡単にレコードセットを絞れます。 TOP 20で訪問者上位20件を表示 Select TOP 20 URL, Count(URL) As URLCNT と指定して、下記のSQL文を作成してみました。 Select TOP 20 URL, Count(URL) As URLCNT From log GROUP BY URL ORDER BY Count(URL) DESC 単に、Selectの次にTOP 20としただけでした(オイオイ) この指定だけで、TOP20のレコードセットを返してくれます。 SQL文 Select TOP 20 でGroup化集計値のTOP20を作成 http://www.ken3.org/cgi-bin/test/test083-1.asp でテスト可能です。/* * 3.私が今ほしいのは、上位n件じゃなくて、21〜40件目のデータだけど */
TOPのキーワードを使うと、簡単にランキングをSQLで絞れそうなのがわかりました。 が、 私が探していたのは、 1ページ、20件単位の区切り(かたまり) たとえば、 2ページ目のデータ、21件目〜40件目のデータ を返す方法でした。 過去、 http://www.ken3.org/cgi-bin/test/test037-1.asp では、 Set rs = db.Execute("Select * From log ORDER BY WriteTime DESC") と、SQL文からレコードセットを作成して、 カウンタ変数を使用して、頭から30件になったらループを抜けてました。 'EOFまでループ or データ30件まで nCNT = 1 Do While rs.EOF = False And nCNT <= 30 '.EOFがFalseで30以下の間 Response.Write "<TR>" '内容を表示する ・ ・ rs.MoveNext 'これを忘れると悲惨なことに、、、 'カウンタを増やす nCNT = nCNT + 1 Loop こんな感じで、 Select * From log ORDER BY WriteTime DESC ↑書き込み時刻WriteTimeの降順(DESC指定)して作成したレコードセット をループで回しつつ、カウントを取り、制御してました。 Select TOP 999 で結果のレコードセットを制御できるので、 下記のSQL文を発行してテストしてみました。 Select TOP 30 * From log ORDER BY WriteTime DESC ~~~~~~~~~ ※なんか違和感あるよねSelect TOP 30 *ってのが、 トップさんじゅうアスタリスク?って感じでどこが切れ目だか・・ なれないと、TOPってフィールド名とか勘違いしそうです。 'Select TOP 30 と 件数を指定しました Set rs = db.Execute("Select TOP 30 * From log ORDER BY WriteTime DESC") ・ ・ 'EOFまでループ Do While rs.EOF = False '.EOFがFalseの間 と、レコードセットが指定した30件を返してくれるので、 カウンタで判断しないで、.EOFだけの判断としました。 SQL Select TOP 30 で 返って来るレコードセットを30件にする http://www.ken3.org/cgi-bin/test/test083-2.asp でテスト可能です。/* * 4.期待したのに出来なかった書き方(笑) */
さて、ここまで、ひっぱってきました(オイオイ) 期待したのに出来なかった書き方(笑)があって、(失敗したよ・・・) そしたら、勝手な想像で、 ^^^^^^^^^^^^^^^^^^^^^^^^ Select TOP 10 to 20 なんて感じで、書けないかなぁ・・と思ったら、ムリだった。。。 これが出来れば、21〜40もと思ったけど。 ※もう少しSelect文の書き方、勉強しないとなぁ。。。 -- 余談 -- http://www.ken3.org/backno/backno_guchi36.html#181 で TimeAddって関数を予想する力? なんて、書いてたけど(注※TimeAddって関数は実際は無いので注意してね) Select TOP 10 to 20 ^^^^^^^^^^^^^^^^^^^ 想像だけで、無かったです(笑)できなかった(爆) まぁ、試行錯誤はタダだからいっかな。 ~~~~~~~~~~~~~~~~~~~~ みなさんは、いろいろと試してみて成功してヤッターの感覚を味わってね。 ※私は試行錯誤で、ヤッパダメか・・・が最近多い。 えっ、プログラマーの能力、見切りや予想の力が足りないって? う〜ん・・・ http://www.ken3.org/backno/backno_guchi36.html#181 TimeAddって関数を予想する力? を発展させて、プログラマーの予想能力について、偉そうに書いてみようかなぁ。 愚痴マガ http://www.ken3.org/guchi/ もヨロシクです。/* * 5.全体のn%のレコードを返す Top n PERCENT */
おまけで発見した、もう一つの指定方法 Select TOP 10 PERCENT これは、全体から頭10%を取得してくれます。 Select TOP 10 PERCENT URL, Count(URL) As URLCNT From log GROUP BY URL ORDER BY Count(URL) DESC と、SQLを作成して、発行してみました。 http://www.ken3.org/cgi-bin/test/test083-3.asp で、テスト表示を行ってます。 SQL、いろいろと書けるんですね。 -【けんぞう!】--------------------------------------------------------- ASPが利用可能なレンタルサーバーをお探しのアナタ、 http://www.ken3.org/asp/server.html ← けんぞうも使っているサーバーの紹介 『おっIISでbasp21でメール送信、mdbも使えるよ』(三流PG:31歳) ------------------------------------------------------------------------/* * 5.終わりの挨拶 </HTML> */
今回は、 SQL文のSelect TOPの使い方でした。 狙っていた本題の20〜40の途中のレコード表示までは、いかなかったです。 いろいろと問題点を残しつつ、脱線・寄り道の多いメルマガですが、 今後とも、よろしくお願いします。 何かの参考となれば幸いです。 ASP、VBScript勉強中の三流プログラマーのKen3でした。
| No.84 | 2003/11/11 ADO Excel(*.xls)接続 [Sheet1$]でシート指定、列名無しで遊ぶ |
[ページTOPへ戻る] |
<ADO Excel(*.xls)接続 [Sheet1$]でシート指定、列名無しで遊ぶ>
こんにちは、三流プログラマーのKen3です。 今回は、ほったらかしの ADO Excel(*.xls)接続を少し。 ^^^^^^^^^^^^^^^^^^^^ あいかわらず、バラバラの解説だよね、ADO *.csvの行削除は?いつ? ギク・・・/* * 1.今回のキッカケ */
掲示板で下記の質問をもらいました ------ ><ADOでExcelファイル(*.xls)とやっと接続できた(ほっ)>のページ、とって >も役に立ちました! >サーバーにエクセルが入ってないのに、一生懸命 >Set xlApp = Server.CreateObject("Excel.Application") >でつなごうとしてました(^^*) > >で、すみません、初歩的なことを教えてください・・・ >Set xlApp = Server.CreateObject("Excel.Application")では、セルの値を参照 >する時に、 ><% Response.Write xlSht.Range("b3").Value %> >でよかったのですが、このように、ADOを使う場合はどういう指定になるんで >しょうか。。 > >ACCESSのDBなら、 ><%= rs.Fields("test").Value %>ですよね。 ------ と、 b3のセルへのアクセス方法について、質問をもらいました。 >で、すみません、初歩的なことを教えてください・・・ なんて書かれているけど、、、う〜ん、私も初歩的なことわからないから、 メルマガのネタにして、やってみますか。 ※最近、実力以上の質問が来て・・困っていたりする。 掲示板だとみなさんの目に止まるが、メールで直の難しい質問も多数来てたり・・ カッコつけられるように頑張らないとね。。。/* * 2.Excel(*.xls)との接続復習 */
b3セルの値を取りたいかぁ。 http://www.ken3.org/cgi-bin/group/asp_ado_excel.asp に ADO Excel接続関係の情報をまとめてます。 と 宣伝を入れつつ、 .xlsにアクセスしているサンプルを復習すると、 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 名前の範囲を使用して、アクセスしてみる方法は、 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ No.53 ADOでExcelファイル(*.xls)とやっと接続できた(ほっ) http://www.ken3.org/backno/backno_asp11.html#53 が参考元の解説で、 http://www.ken3.org/cgi-bin/test/test053-1.asp で、テストできます。 ここでは、ブックtest053.xlsでシートに付けた名前の範囲、DATA_RANGEに対して、↑表のイメージ、先頭行が列名となっている Con = "Driver={Microsoft Excel Driver (*.xls)};DBQ=" & _ Server.MapPath("test053.xls") & ";" strSQL = "select * from DATA_RANGE" '接続文字列、SQLを渡して、レコードセットを開く Rs.Open strSQL, Con, 0 '0=adOpenForwardOnly Select文で、Excelで付けた名前の範囲DATA_RANGEをテーブルと見立てて、 select * from DATA_RANGEと書けることを説明しました。 データへのアクセスは、 Do While Rs.EOF = False For Each FieA In Rs.Fields strOUT = strOUT & FieA.Name & " -- " & FieA.Value & "<BR>" Next Rs.MoveNext '次のレコードへ移動 Loop と、 先頭行がフィールドして扱われていることがわかると思います。 シート名とセル範囲を指定したアクセス方法 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 名前範囲を事前に付けておく、そんなことやってらんないよ!! なんて人達も多いと思います。 そんな人達にお薦めなのが、 Excel(*.xls)グラフ付雛形にADOで接続しデータ更新 http://www.ken3.org/cgi-bin/test/test057-1.asp では、
↑シート名とイメージ Select * from [DATA$A1:B9] として、 シート名DATA A1:B9とセル範囲を自分で指定しました。 rs.Open "Select * from [DATA$A1:B9]", db, adOpenStatic, adLockOptimistic で、レコードセットを開いて、 For n = 1 To 8 '当日+一週間の7日で8回まわる rs.Fields(0).Value = dHIZUKE(n) rs.Fields(1).Value = PageCNT(n) rs.Update '更新 rs.MoveNext '次のレコードへ(次の行へ) Next と ここでは、rs.Fields(0).Value,rs.Fields(1).Value (0),(1)みたいにn番目のフィールドとフィールドの番号を指定して アクセスしてました。
/* * 3.列名がもし無かったら? And 遊びでsheetname$でアクセスする */
基本パターンは、 ^^^^^^^^^^^^^^ ADO Excel接続の書き方は、テーブル指定の方法が3つあって、 ワークシート sheetname$ 名前付き範囲 rangename 名前付きではない範囲 sheetname$rangeaddress です。 http://www.microsoft.com/japan/msdn/columns/office/office10052000.asp がMSのページです。※よかったこれは日本語だよ(オイオイ) さてと、b3へのアクセスかぁ・・・ 名前付き範囲 rangename は、"select * from DATA_RANGE"とやったし、 名前付きではない範囲 sheetname$rangeaddress は、"Select * from [DATA$A1:B9]"でやったので、 Select * from [シート名$B3] も考えたけど(列名無しで、単独指定できるのか興味ありの疑問だけど) せっかくなので、 アト一つ残った、ワークシート sheetname$ でシートを指定を試してみたいと思います 度が過ぎた、遊びで、列名も付けない表を作成してみました。 A列 B列 C列 D列 1: 列の項目名がなかったら? 2: c2どうなるの? 3: b3のセルはここ 4: a4のせるはここ 5: d5に1つ端っこ 6: 名前 三流君 7: 住所 東京都の田舎町 8: 好きな球団 横浜ベイスターズ 9: 10: 名前範囲も付けてません END? ※シート名はデフォルトのよくみかける[Sheet1]に作りました、 ブック名はtest084.xlsで、aspと同じディレクトリにFTPでUPしてあります↑が作成した表のイメージです。 なんだ、このシートは?テストデータぐらいまともにつくれよ!! まぁまぁ、まともじゃない表に対してのアクセステストになるんじゃない? こんな表、オレは認めないよ。勝手にやってよ。 ハイハイ。 では、ワークシート sheetname$で単純にアクセスしてみます。 'SQL文 Sheet1$として、シートのみ指定してみます strSQL = "select * from Sheet1$" '接続文字列、SQLを渡して、レコードセットを開く Rs.Open strSQL, Con, 0 '0=adOpenForwardOnly とすると・・あらら、ダメでした。 Microsoft OLE DB Provider for ODBC Drivers エラー '80040e14' [Microsoft][ODBC Excel Driver] FROM 句の構文エラーです。 /cgi-bin/test/test084-1.asp, 行 36 それなら、select * from [Sheet1$]と[]で囲うのが正解でした。 気を取り直して、 strSQL = "select * from [Sheet1$]" Rs.Open strSQL, Con, 0で、レコードセットを作成しました 作成したレコードセットのフィールド名を下記のプログラムで表示してみると、 '項目名の表示(シートしか指定してないのに?) Response.Write "<TR>" For Each FldA In Rs.Fields 'フィールド分ループする Response.Write "<TH>" & FldA.Name & "</TH>" '.Nameでフィールド名を表示 Next Response.Write "</TR>" 列の項目名がなかったら? F2 F3 F4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ とA1の文字と空白はF2,F3,F4と勝手に作成された。 どうやら1行目をフィールド名として強引にあてはめるらしい。 シートしか指定していないので、レコードの終わり判断できるか? 少し不安だったけど、 'レコードが終了するまでループ(シートしか指定してないけど大丈夫?) Do While Rs.EOF = False Response.Write "<TR>" For Each FldA In Rs.Fields 'フィールド分ループする Response.Write "<TD>" & FldA.Value & "</TD>" '.Valueで値を表示 Next Response.Write "</TR>" Rs.MoveNext '次のレコードへ移動 Loop で、 無事、データが表示されました。 http://www.ken3.org/cgi-bin/test/test084-1.asp で、テスト結果と全てのソースを見ることが出来ます。 なんか不思議な感じがするけど、なんとか表示できました。 あっ、質問はb3へのアクセスだった。 列名無しで接続できるが、先頭行が強引にフィールド名となってしまう。 B3のセルに対して、アクセスするには、 先頭行(A1やB1,C1,D1)がフィールド名となっているので、 Open時のカーソルは、A2,B2,C2と2行目からのスタートなので、 3行目に行くために、.MoveNextで1行空読みして、 Rs.Fields(1)でOKかなぁ。 Response.Write "Rs.Open strSQL, Con, 0<br>" Rs.Open strSQL, Con, 0 '0=adOpenForwardOnly Response.Write "Rs.MoveNext<br>" Rs.MoveNext '1行飛ばす Response.Write "Rs.Fields(1)は<big>[" & Rs.Fields(1) & "]</big>です<br>" Response.Write "Rs.MoveNext<br>" Rs.MoveNext '1行飛ばす Response.Write "現在のRs.Fields(0)は<big>[" & Rs.Fields(0) & "]</big>です" なんて感じで、下のほうでテストしてみました。 ADOでExcel(*.xls)に接続 [Sheet1$]で列名無しテスト http://www.ken3.org/cgi-bin/test/test084-1.asp で、確認してみてください。 なんかなぁ・・・イマイチ(笑) -【けんぞう!】--------------------------------------------------------- ASPが利用可能なレンタルサーバーをお探しのアナタ、 http://www.ken3.org/asp/server.html ← けんぞうも使っているサーバーの紹介 『おっIISでbasp21でメール送信、mdbも使えるよ』(三流PG:31歳) ------------------------------------------------------------------------
/* * 4.終わりの挨拶 </HTML> */
今回は、 ASPでADOを使用して*.xlsと接続、 [Sheet1$]とシート名だけで接続したときのフィールド名について少し遊んでみました。 なんか、サクっとxxxx!B3みたいに出来なかったけど、 参考になったかなぁ・・・・ いろいろと問題点を残しつつ、脱線・寄り道の多いメルマガですが、 今後とも、よろしくお願いします。 何かの参考となれば幸いです。 ASP、VBScript勉強中の三流プログラマーのKen3でした。
三流解説を読んでいただき、どうもです。ここから下は、三流君宛のメッセージ送信や 三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、※質問や感想は、気軽に送ってくださいね。
まぁ、基本はデータの受け取りかなぁ。
・[Form等を使用したデータのやり取り]・・・ASPと言っても、HTMLの入力フォームからデータを受け取ります。POSTやGETでやりとりを押さえますか。
次は、データの入出力 で ADOを使った(ADOで接続) と SQLの解説を少々
・[ADOでMdbファイルを使う]・・・MDBと接続して、簡単な追加・更新・削除を行った。
・[ADOでExcelと接続してみた]・・・.xlsと接続してSQLを使ってみた。
・[ADOでCSVと接続してみた]・・・.CSV テキストを読み出した。※更新・削除はできません
DBが使えるので、あまり使用しないけど、普通のテキストファイル処理
・[テキストファイル処理]・・・ファイルを開いて、書き込む。1行読み込みなどを軽く
VBScriptでFormat関数が無いなど、微妙にVBAと違うけど
[VBScript関数関係の説明]・・・少し、処理を書いてみた。
[その他処理サンプル]・・・あまり良いサンプル作れなかったけど。。。
何かの参考となれば幸いです。
ニガテな環境設定系など
[Win2003 Server に IIS を Setup]・・・ポイントの無い、ほぼ一本道解説だけど。
[IIS 仮想ディレクトの作成とASP動作TEST]・・・Web拡張でASPを有効にしただけです。
Blog:[三流君の作業日記]/ [サンプルコードのゴミ箱]/ 広告-[通販人気商品の足跡]
質問や要望など連絡方法でお互い確認が取りやすく、便利なのが掲示板なのですが、私の対応のまずさから不定期で荒れてしまい、掲示板は現在封鎖中です。(反省しなきゃ)
感想や質問・要望・苦情など 三流君へメッセージを送る。
時間的余裕のある要望・質問・苦情の場合は、下記のフォームからメッセージを送ることができます。