[三流君] −−> [ASPで遊ぶ、失敗する] −−> [バックナンバー一覧]
−−> No.091 ADO CSVでReadOnly=0と.AddNewを使いデータ追加

ADO CSVでReadOnly=0と.AddNewを使いデータ追加



本文(発行内容)


<ADO CSVでReadOnly=0と.AddNewを使いデータ追加>

こんにちは、三流プログラマーのKen3です。 今回は、 ADOのCSV接続で、 ReadOnly=0と.AddNewを使いデータを追加してみた そんなお話です。 http://www.ken3.org/cgi-bin/group/asp_ado_csv.asp に、 関連項目ASPでADO CSV接続の他のサンプルもあるので、合わせて見てください。

/* * 1.今回のキッカケ */

特に無いんだけど、 CSVの更新と削除は、 Microsoft OLE DB Provider for ODBC Drivers エラー '80004005' [Microsoft][ODBC Text Driver] この ISAM では、 リンク テーブル内のデータを削除することはできません。 と、怒られてました。 では、追加(ファイルの後ろにAppendの追記)はできるかなぁ〜 と あまり使わないかも的な処理を書いてみました。 ※普通に追加なら、FileSystemObjectで追加していけば通常はOKなのですが、  強引にネタとしてしまいました。

/* * 2.開き方のポイント ReadOnly=0なんてパラメータあったよ */

さてと、データを追加するのかぁ。 追加だから、 '接続文字列、SQLを渡して、レコードセットを開く rs.Open strSQL, Con, adOpenStatic, adLockOptimistic で、開こうとすると ADODB.Recordset エラー '800a0bb9' 引数が間違った型、または許容範囲外であるか、競合しています。 /cgi-bin/test/test091-1.asp, 行 44 あららダメかぁ・・・ Const adOpenStatic = 3 '---- CursorTypeEnum Values ---- で、開けないんですね・・・ そんなこんなで、失敗が続き、調べてみると、 http://support.microsoft.com/default.aspx?scid=kb%3Ben-us%3B316475 ↑xlsの例みたいですが、 cn.Open "Driver={Microsoft Excel Driver (*.xls)};DBQ=C:\MyDoc.xls;ReadOnly=0;" とあって、 おっ? ReadOnly=0なんてパラメータあったよ ^^^^^^^^^^ こんどは、ReadOnly=0で調べると、 ReadOnly=0 (更新可能) ReadOnly=1 (更新不可、リードオンリー) となっている。(ReadOnly=True/Falseとは書けないのかなぁ?) 接続文字列を下記のように作成しました。 '※接続情報の作成 ドライバーの指定と、DBQには、パスのみを指定する Con = "Driver={Microsoft Text Driver (*.txt; *.csv)};DBQ=" _ & Server.MapPath(".") & ";" _ & "ReadOnly=0;" で、開く時は、レコードセットを作成して、 'ADO DB Recordset オブジェクトを作成する、英文そのままじゃん Set rs=Server.CreateObject("ADODB.Recordset") rs.CursorLocation = adUseServer 'カーソルはサーバーの指定 'SQLのテーブル名には、ファイル名を指定します(test091.csvを指定) strSQL = "select * from test091.csv" '接続文字列、SQLを渡して、レコードセットを開く rs.Open strSQL, Con, adOpenDynamic, adLockOptimistic と、SQLを渡して作成してみました。 ※rs.CursorLocation = adUseServer 'カーソルはサーバーの指定  は、無くてもOKでした(あとで気が付きました)

/* * 3..AddNewでデータを追加してみた */

接続が出来たら(レコードセットが作成できたら) 今度はレコードを追加してみたかったので、 .AddNewでデータを追加してみます。 ファイル名はtest091.csvで、データは,カンマで区切られてます。 FID,書き込み時刻,IP情報,Reffer の4つの項目をCSVで管理してみます。 このASP(test091-1.asp)が実行されたら、 test091.csvと接続後、 最終行にカーソルを移動(.Movelast)してFID+1の次の番号を計算。 .Addnew後、 IPアドレスの頭10桁とReferrer(どこからきたか)をフィールドにセットして、 .Updateで更新してみます。 実際のテストは、 http://www.ken3.org/cgi-bin/test/test091-1.asp で、実行できます。(ソースの全ても見れます。) まずは、 接続・レコードセットの作成です ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ '※接続情報の作成 ドライバーの指定と、DBQには、パスのみを指定する Con = "Driver={Microsoft Text Driver (*.txt; *.csv)};DBQ=" _ & Server.MapPath(".") & ";" _ & "ReadOnly=0;" 'SQLのテーブル名には、ファイル名を指定します(test091.csvを指定) strSQL = "select * from test091.csv" 'ADO DB Recordset オブジェクトを作成する、英文そのままじゃん Set rs=Server.CreateObject("ADODB.Recordset") rs.CursorLocation = adUseServer 'カーソルはサーバーの指定 '接続文字列、SQLを渡して、レコードセットを開く rs.Open strSQL, Con, adOpenDynamic, adLockOptimistic ここまでで、なんとかCSVと接続しました。 ポイントは、接続文字列のReadOnly=0です。 最後の番号を取得したいので、 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ '最終のデータを取得する rs.MoveLast 'レコードを最終行へ移動 NEXT_NO = Cint(rs.Fields("FID").Value) + 1 '次の番号を+1して計算する .MoveLastで最終行に移動後、.Fields("FID").Valueの値に+1して、 次の連番を作成しました。 データを.AddNewで追加する ^^^^^^^^^^^^^^^^ rs.AddNew rs.Fields("書き込み時刻").Value = Now() rs.Fields("FID").Value = NEXT_NO '次の番号をセットする '↓番号でフィールドにアクセスも出来るよ rs.Fields(2).Value = Left(Request.ServerVariables("REMOTE_ADDR"), 10) rs.Fields(3).Value = Request.ServerVariables("HTTP_REFERER") Response.Write ".Updateで更新(レコード確定)<br>" rs.Update rs.Close 'クローズして確定する ここも、ポイントは特に無いのですが、 rs.Fields("書き込み時刻")やrs.Fields("FID") と、フィールド名で指定する方法と rs.Fields(2)やrs.Fields(3)のように、フィールドの番号で指定する方法、 どちらも使えます。 データをセットしたら、 .Update で データを確定してます (忘れても、.Closeやカーソル移動で自動確定されるけど) http://www.ken3.org/cgi-bin/test/test091-1.asp で、テスト可能なので、遊んでみてください(ソースの全ても見れます。)

/* * 4.終わりの挨拶 </HTML> */

今回は、 ADOを使用して、CSVと接続、データを追加してみました。 ※ADOで接続が面倒、これなら、FileSystemObjectで追加したほうが楽。  と、判断材料に使ってもらえればうれしいです。 いろいろと問題点や疑問点を残しつつ、脱線・寄り道の多いメルマガですが、 今後とも、よろしくお願いします。 何かの参考となれば幸いです。 ASP、VBScript勉強中の三流プログラマーのKen3でした。


ページフッター

ここまで、読んでいただきどうもです。目的の情報が見つかったか?少々心配しつつ、、、

三流君へ メッセージを送る

感想や質問・要望・苦情など 三流君へメッセージを送る。
返信例 XXXXさんへ
下記のフォームからメッセージを送ることができます。


あなたのお名前(ニックネーム):さん
返信は?:

アドレス:に返事をもらいたい
感想や質問↓:


(感想や質問・要望・苦情はHPで記事に載せることがあります。)

種類別のリンク や 広告など

[三流君(TOP ken3.org へ戻る)] / [ASPで遊ぶ、失敗する] / [ASP記事 バックナンバー目次]


Blogとリンク:[三流君のMemo別館]/ [ASP 三流君のソースコード置き場]/ [Ken3Video YouTubeで動画解説]
広告:

気になった ジャンル ↓を選択してください。

まぁ、基本はデータの受け取りかなぁ。
・[Form等を使用したデータのやり取り]・・・ASPと言っても、HTMLの入力フォームからデータを受け取ります。POSTやGETでやりとりを押さえますか。

次は、データの入出力 で ADOを使った(ADOで接続) と SQLの解説を少々
・[ADOでMdbファイルを使う]・・・MDBと接続して、簡単な追加・更新・削除を行った。
・[ADOでExcelと接続してみた]・・・.xlsと接続してSQLを使ってみた。
・[ADOでCSVと接続してみた]・・・.CSV テキストを読み出した。※更新・削除はできません

広告:



DBが使えるので、あまり使用しないけど、普通のテキストファイル処理
・[テキストファイル処理]・・・ファイルを開いて、書き込む。1行読み込みなどを軽く

VBScriptでFormat関数が無いなど、微妙にVBAと違うけど
[VBScript関数関係の説明]・・・少し、処理を書いてみた。
[その他処理サンプル]・・・あまり良いサンプル作れなかったけど。。。
何かの参考となれば幸いです。



[三流君(TOP ken3.org へ戻る)] / [ASPで遊ぶ、失敗する] / [ASP記事 バックナンバー目次]


広告: