家で一人でテレビ見てブツブツ言っているタイプ

2005/04/04

むかしのひび

Excelファイルのデータベース操作(Excel97-2000)

♪ODBCドライバの接続文字列
Driver={Microsoft Excel Driver (*.xls)};DBQ=(ファイルパス);ReadOnly=0
ReadOnly=1とすると読み取り専用。OLE DBでは設定不可。
登録済みのデータソース名に対して「DSN=(データソース名)」もOK。

♪OLE DBプロバイダの接続文字列
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=(ファイルパス);Extended Properties="Excel 8.0;HDR=YES;"
HDR=NOとすると先頭行からデータ行とする。ODBCでは設定不可。

♪トランザクション
トランザクションは実装されていない。コマンド発行で即時更新。

♪テーブル指定
[シート名$セル範囲] で指定した範囲をDBの表として扱う。セル範囲省略可。
実際に有効になるのは、指定したセル範囲とシート全体のセル範囲の共通部分。
セル範囲の先頭行がヘッダ行(セル値が列名)、2行目以降がデータ行。
空のセルはFn(nはセル範囲内の順序)、重複する項目は2番目以降に1,2,…を付記。
例:セル値 IDX,NAME,,,データ,NAME → 列名 IDX,NAME,F3,F4,データ,NAME1

♪ODBCドライバのデータ型
シート・列の書式設定により決まる。行・セルの書式設定は無視。
標準・数値・会計・パーセンテージ・分数・指数・文字列 → NUMBER
通貨 → CURRENCY
日付・時刻 → DATETIME
セルが空か、セル値を列のデータ型に変換できないときはDBNULL。
文字列もNUMBER型となる。入力によっては変換されない。文字列型は返せない?

♪OLE DBプロバイダのデータ型
セルの書式設定により決まる。標準のときはセル値で判別される。
数値・パーセンテージ・分数・指数 → DBTYPE_R8
通貨・会計 → DBTYPE_CY
日付・時刻 → DBTYPE_DATE
文字列 → DBTYPE_WVARCHAR
セルが空か、セル値が列のデータ型に変換できないときはDBNULL。

♪更新コマンド(UPDATE、INSERT、DELETE)
DELETE文は使用できない。
INSERT文は、指定したセル範囲またはシート全体のセル範囲の次の行に挿入。
UPDATE文は、有効なセル範囲を越えたセルに値をセットできない。
シートのセル範囲外のセルに値を挿入するとセル範囲を拡張する。
しかし、セルにNULLをセットするなどしてもセル範囲は縮小されない。

♪SQLの例
Sheet1の1行目は空、A2~C10にデータが入っているものとする。

SELECT F1, F2, F3 FROM [Sheet1$A1:C8]
→ 3列(A~C)×7行(2~8)のレコードセットを返す。

SELECT * FROM [Sheet1$A1:Z999]
→ 3列(A~C)×9行(2~10)のレコードセットを返す。

UPDATE [Sheet1$A1:C10] SET F2 = 'DEF'
→ B2~B10がDEFに更新される。9を返す。

UPDATE [Sheet1$A1:C2] SET F2 = 'GHI', F3 = 160 WHERE F1 = 2
→ A2が2ならばB2~C2がGHI,160に更新される。0または1を返す。

INSERT INTO [Sheet1$A1:C12] VALUES (11, 'JKL', NULL)
→ 11行目に11,JKL,空が挿入される。1を返す。

INSERT INTO [Sheet1$D7:E7] (F1, F2) VALUES ('MNO', 220)
→ D8~E8にMNO,220が挿入される。1を返す。

ソーシャル/購読

X Threads note
RSS Feedly Inoreader

このブログを検索

ブログ アーカイブ