以前、
『テキストファイルやExcelシートをSELECT文で見てみる』と言うコラムを書きましたが、
今回は、その第2弾です。
前回は、拙作 exp2csv を使用しましたが、今回は Excelで作ったツール「imoportomi.xls」を使用します。
このツールは、特にこれと云った目的もなく作ったものです。
私はそもそも、SQL関連のツールは SQL*Plus や クエリアナライザ など、
「ネイティブなツールを使う派」です。
名作・オブジェクトブラウザですら使った事がありません。
つみきさんのCSEをたまに使わせてもらうくらいです。
私が作るツールは、ORACLE や SQL Server に接続可能ではありますが、
どちらかと言うと、『テキストファイルやExcelシートをSELECT文で見てみる』
と言うシュミシュミな部分に重きを置いています。
(DSNやudlファイルを作る事なく)
しかし、最近では、資料作成やデータ移行などの時に、Excelのシートをマージしたり、
Accessがインストールされていない環境でmdbを見る必要があったり等、
仕事をする上での必要上、色々ブラッシュアップしてきたので、
今回、一年ぶりに更新しました。
「imoportomi.xls」は
ここにあります。
ダウンロード後、解凍してください。
※画像はクリックで拡大します(ブラウザの「戻る」で戻ってください)
[実行画面,実行結果]
動作確認のため、まずはこのまま実行してください。
実行結果シートに現在日時が表示されればOKです。
[データベースに接続]
では、何かお手持ちのデータベースに接続してみてください。
「接続情報設定」ボタンで、このフォームが開きます。
この例では ORACLE 9i に接続しています。
[実行画面,実行結果]
オブジェクトリストはこのようになります。
まあ、よくあるスタイルですね。
※画像はクリックで拡大します(ブラウザの「戻る」で戻ってください)
[Text,CSVに接続]
ログイン画面の参照ボタンをクリックし、対象となるテキストファイルを選択してください。
ファイル名を除いたディレクトリのパスが接続文字列欄に反映されるので、その状態で「接続」ボタンをクリックしてください。
テキストの場合は、OLEプロバイダーよりもODBCドライバーの方が快適な気がしました。
(ですので、デフォルトもODBCドライバーにしてあります)
[実行画面,実行結果]
オブジェクトリストはこのようになります。
OLEプロバイダーを選択した場合は、ファイル名が「kemp#csv」のようにピリオドが#で表示されます。
[Excelに接続]
ログイン画面の参照ボタンをクリックし、対象となるExcelファイルを選択してください。
ファイルパスが接続文字列欄に反映されるので、その状態で「接続」ボタンをクリックしてください。
[実行画面,実行結果]
オブジェクトリストはこのようになります。
シート名の後ろに「$」が付加されたものがテーブル名となるので、SQL文内では "[]"で括ってください。
ここまでは、importomi.xls で用意されている RDBMS の種類の範囲ですが、
OLEプロバイダー/ODBCドライバー文字列も直接書けるので、
大抵の RDBMS にネイティブな接続文字列で(ODBCデータソースやudlファイルを作成する事なく)接続できます。
ドライバー/プロバイダーの書き方を知っている必要はありますが。
次は、プロバイダー文字列を直接書いて、HTMLのTABLEタグをSQLテーブルとして扱う方法です。
プロバイダー文字列としては以下のように指定します。
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\test\test.html;Extended Properties="HTML Import;HDR=Yes;"
[HTMLに接続]
「Driver直接入力」ラジオボタンを選択し、接続文字列欄に上記の文字列を入力してください。
[実行画面,実行結果]
オブジェクトリストはこのようになります。
TABLEタグが1つしかない場合は、TITLEがテーブル名となり、
captionが指定されている場合は、それがテーブル名になります。
どちらも無い場合は、このスクリーンショットのように「Table」「Table1」...「Table[n]」
のようになります。
これは、接続先がJetであれば、SQLでも指定できます。
(但し、接続先が mdb や Excel では可能ですが、CSVやTextファイルでは×のようです)
select
*
from
[HTML Import;
DATABASE=C:\test\test.html;
HDR=YES].[Table]
※オブジェクトリストの内容の差違
どの接続先を選択した場合も同様ですが、
OLEプロバイダー/ODBCドライバーもしくはそのバージョンにより、
オブジェクトリストに表示される内容が変わる場合があります。
例えば、Accessのmdbの場合、リンクテーブルが、OLEプロバイダーでは「LINK」、
ODBCドライバーでは「SYNONYM」と表示される、等です。シノニムてw