adosql.js
データベースに ADO で接続して SQL を実行できるコンソールスクリプトを作った。通常はデータベース付属のツールがインストールされていると思うので必要ないと思われます。
Microsoft Access にはこんな感じで接続する。接続文字列変えればいろんなデータベースに接続できる、きっと。
C:\Temp\db>cscript //nologo adosql.js -c "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=user.mdb" ? select ...
行頭「!」入力は、eval してその結果を表示する。
? !1 + 2 3
行頭「$」入力は、コマンド実行。
? $cmd /c dir ドライブ C のボリューム ラベルがありません。 ボリューム シリアル番号は 4C18-D6C3 です C:\Temp\db のディレクトリ 2009/06/15 17:37 <DIR> . 2009/06/15 17:37 <DIR> .. 2009/06/15 16:58 5,499 adosql.js 1 個のファイル 5,499 バイト 2 個のディレクトリ 6,996,881,408 バイトの空き領域
「quit」で終了。
? quit
おまけ機能で Microsoft ODBC Desktop Database Drivers を簡単に使えるようにしてある。
引数にフォルダを指定した場合、そのフォルダのテキストファイルがテーブルとなる。
C:\Temp\db>cscript //nologo adosql.js .
この場合、テーブルがカレントフォルダの tbl1.csv ファイルとして作成される。
? create table tbl1.csv (name varchar, age integer) ? $cmd /c dir ドライブ C のボリューム ラベルがありません。 ボリューム シリアル番号は 4C18-D6C3 です C:\Temp\db のディレクトリ 2009/06/15 17:43 <DIR> . 2009/06/15 17:43 <DIR> .. 2009/06/15 16:58 5,499 adosql.js 2009/06/15 17:43 115 schema.ini 2009/06/15 17:43 14 tbl1.csv 3 個のファイル 5,628 バイト 2 個のディレクトリ 6,996,881,408 バイトの空き領域
普通に SQL を発行できる。
? insert into tbl1.csv values('Taro', 28) ? select * from tbl1.csv #>name,age 1>Taro,28
作成された tbl1.csv はこんなんなっている。普通の CSV ファイル。
? $cmd /c type tbl1.csv "name","age" "Taro",28
なんか schema.ini ファイルも作成されるが基本気にしない。
? $cmd /c type schema.ini [tbl1.csv] ColNameHeader=True CharacterSet=932 Format=CSVDelimited Col1=name Char Width 255 Col2=age Integer
schema.ini がなくてもそれなりに動作するので、既存の CSV ファイルも操作できるよ。
? $cmd /c echo f1,f2 > tbl9.csv ? $cmd /c echo boo, 256 >> tbl9.csv ? $cmd /c echo foo, 128 >> tbl9.csv ? select * from tbl9.csv where f1 = 'boo' #>f1,f2 1>boo,256 ? quit C:\Temp\db>
引数に xls ファイルを指定した場合、そのファイルがデータベースになる感じ。
C:\Temp\db>cscript //nologo adosql.js db.xls ? $cmd /c dir db.xls ドライブ C のボリューム ラベルがありません。 ボリューム シリアル番号は 4C18-D6C3 です C:\Temp\db のディレクトリ 2009/06/15 17:53 9,216 db.xls 1 個のファイル 9,216 バイト 0 個のディレクトリ 7,117,938,688 バイトの空き領域 ? create table tbl2 (name varchar, age integer) ? insert into tbl2 values('Jiro', 24) ? select * from tbl2 #>name,age 1>Jiro,24 ? update tbl2 set age = 25 where name = 'Jiro' ? select * from tbl2 #>name,age 1>Jiro,25
引数には mdb ファイルも指定できる。
C:\Temp\db>cscript //nologo adosql.js db3.mdb C:\Temp\db\adosql.js(40, 5) Microsoft OLE DB Provider for ODBC Drivers: [Microso ft][ODBC Microsoft Access Driver] ファイル '(不明)' が見つかりませんでした。
けど、ドライバは xls ファイルとは違い自動で mdb ファイルを作成してくれない。
なので、AdoDbUtil オブジェクトに createMdb() を定義してあるのでこれを使う。
C:\Temp\db>cscript //nologo adosql.js . ? !AdoDbUtil [object Object] ? !AdoDbUtil.createMdb('db3.mdb') ? $cmd /c dir db3.mdb ドライブ C のボリューム ラベルがありません。 ボリューム シリアル番号は 4C18-D6C3 です C:\Temp\db のディレクトリ 2009/06/15 17:55 65,536 db3.mdb 1 個のファイル 65,536 バイト 0 個のディレクトリ 6,996,807,680 バイトの空き領域 ? exit C:\Temp\db>cscript //nologo adosql.js db3.mdb ? create table tbl3 (name varchar, age integer) ? insert into tbl3 values('Taro', 28) ? insert into tbl3 values('Jiro', 25) ? insert into tbl3 values('Sabu', 21) ? delete from tbl3 ? $cmd /c dir db3.mdb ドライブ C のボリューム ラベルがありません。 ボリューム シリアル番号は 4C18-D6C3 です C:\Temp\db のディレクトリ 2009/06/15 17:58 77,824 db3.mdb 1 個のファイル 77,824 バイト 0 個のディレクトリ 6,996,791,296 バイトの空き領域 ? quit
ついでに mdb を圧縮する compactMdb() も定義してある。
C:\Temp\db>cscript //nologo adosql.js . ? !AdoDbUtil.compactMdb('db3.mdb') ? $cmd /c dir db3.mdb ドライブ C のボリューム ラベルがありません。 ボリューム シリアル番号は 4C18-D6C3 です C:\Temp\db のディレクトリ 2009/06/15 17:59 73,728 db3.mdb 1 個のファイル 73,728 バイト 0 個のディレクトリ 6,996,795,392 バイトの空き領域 ? quit