odbc.rbは、Ruby用のODBCライブラリです。Windows上で動作します。
動作確認は、ruby 2.0.0p195 (ActiveScriptRuby)で行っています。
odbc.rbのダウンロード(odbcV115_rb20.lzh)
odbc.rbのダウンロード(odbcV114_rb19.lzh)
Odbcクラス odbc用クラスです。
データソースへの接続は、connectまたは、driverConnectを使用します。
キーワード | 内容 |
---|---|
DSN | データソース名 |
UID | ユーザID |
PWD | パスワード |
ウインドウハンドルを指定し、fdrvにSQL_DRIVER_PROMPTを指定するとデータソース選択ダイアログが表示されます。 その場合、sConStrは、""または、"DSN=dsnname"の形式が指定出来ます。
col no. | 項目 | 内容 |
---|---|---|
0 | TABLE_CAT | カタログ名(データベース名)または、nil |
1 | TABLE_SCHEM | TABLE_NAMEの入ったスキーマの名前または、nil |
2 | TABLE_NAME | テーブル名、ビュー名または、別名 |
3 | TABLE_TYPE | 「TABLE」、「VIEW」または、「SYSTEM TABLE」 |
4 | REMARKS | テーブルに関する情報または、nil |
col no. | 項目 | 内容 |
---|---|---|
0 | TABLE_CAT | カタログ名(データベース名)または、nil |
1 | TABLE_SCHEM | スキーマ名または、nil |
2 | TABLE_NAME | テーブル名、ビュー名または、別名 |
3 | COLUMN_NAME | 列名 |
4 | DATA_TYPE | 列のデータタイプ |
5 | TYPE_NAME | 列のデータタイプ名 |
6 | COLUMN_SIZE | カラムのデータサイズ |
7 | BUFFER_LENGTH | 列データ取得バッファサイズ |
8 | DECIMAL_DIGITS | 列のスケールまたは、nil |
9 | NUM_PREC_RADIX | 10(正確な数値タイプ)、2(近似値タイプ)または、nil |
10 | NULLABLE | 列が NULL を受け入れない場合は SQL_NO_NULLS(0)。列が NULL 値を受け入れる場合は SQL_NULLABLE(1)。 |
11 | REMARKS | 記述情報または、nil |
12 | COLUMN_DEF | 列のデフォルト値または、nil |
13 | SQL_DATA_TYPE | データタイプ |
14 | SQL_DATETIME_TYPE | 日時データ・タイプのサブタイプ・コード。SQL_CODE_DATE(0)、SQL_CODE_TIME(1)、SQL_CODE_TIMESTAMP(2)または、nil |
15 | CHAR_OCTET_LENGTH | 文字データタイプの場合はオクテット単位の最大長。それ以外は、nil |
16 | ORDINAL_POSITION | 表中の列の順序 1~ |
17 | IS_NULLABLE | NULL可能でない場合は「NO」、それ以外は、「YES」 |
作成例 odbcd = Odbc.new(__ENCODING__)
引数に文字のエンコーディング「__ENCODING__」を指定します。シフトJIS(magic comment:「Windows-31j」,「shift_jis」)とUTF-8が有効です。
Excelファイルをデータベースとして使用出来ます。Excel表の1行目が列名となり、
2行目以降がデータとなります。また、シート名がテーブル名となります。(例:[Sheet1$])
接続はdriverConnectを使用し接続文字列sConStrにWindowsで用意されているExcel用ドライバと
接続するExcelファイル名を指定します。キーワードReadOnly=0でデータの追加、更新が可能となります。
# -*- coding: utf-8 -*- # ODBC->Excel require "./odbc" class ExcelOdbc < Odbc def initialize super(__ENCODING__) end def execQuery(sSQL) ir = execdirect(sSQL) if ir != 0 sa = "ODBC Excel SQL error¥r¥n" + getErr + "¥r¥n[" + sSQL + "]¥r¥n" print sa disconnect exit end return ir end end exceldb = ExcelOdbc.new #sconstr = "Driver={Microsoft Excel Driver (*.xls)};" + sconstr = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" + "dbq=" + __dir__ + "¥¥exlodbc0.xlsx;ReadOnly=0" ir = exceldb.driverConnect(sconstr) if ir != 0 print "接続エラー " + ir.to_s + "¥r¥n" print exceldb.getErr exit end sSQL = "CREATE TABLE [Sheet1$] (id int, tda DATE, cnote TEXT)" exceldb.execQuery(sSQL) sSQL = "SELECT max(id) FROM [Sheet1$]" exceldb.execQuery(sSQL) ir,ardt = exceldb.getData id = 0 if ir != -1 if ardt[0] != nil id = ardt[0].to_i end end id += 1 sSQL = "INSERT INTO [Sheet1$] VALUES (" + id.to_s + ",'" + Time.now.strftime("%Y-%m-%d %H:%M:%S") + "'," + "'日本ニホン123abc①Ⅱ')" exceldb.execQuery(sSQL) #データ書き込み print "データ表示¥r¥n" sSQL = "SELECT TOP 5 * FROM [Sheet1$] ORDER BY id DESC" exceldb.execQuery(sSQL) ir,ardt = exceldb.describeCol print ardt[0] + "," + ardt[1] + "," + ardt[2] + "¥r¥n" while true do ir,ardt = exceldb.getData if ir == -1 break end print ardt[0] + "," + ardt[1] + "," + ardt[2] + "¥r¥n" end #sSQL = "DELETE FROM [Sheet1$] WHERE id = 1" <-- エラー #sSQL = "UPDATE [Sheet1$] SET cnote = 'テクセル12ab' WHERE id = 1" #exceldb.execQuery(sSQL) exceldb.disconnect print "終了¥r¥n" |
履歴