2015年04月10日

データベースの移行

ピアノ調律のお客様データをデータベース化しています。
実はかなり前から取り組んでいますが途中で考えや方針が変わったりしてなかなか進んでいませんでした。

以前OpenOfficeのBaseでまあまあ実用になるデータベースと入力フォームを作りましたが、更にそれを進めてデータはGoogleDrive上に置き事務所(自宅)以外でどこからでも、つまり工房や外出先などでタブレットからもデータを参照したり変更追加したいアクセスできるようにしたいと考えました。

ということで実際にLibreofficeのBaseで作業します。

当初なにも考えずBaseの埋め込みデータベースHSQLDBを使用していたが、AndroidではLibreOfficeBaseは無いしもっと早く動く(そんなに大量のデータがあるわけではないが)ほうがと思い、デスクトップ機やノートPC(すべてUbuntu)は言うに及ばすタブレットでも標準サポートされているSQLiteを使用することに・・。

まずはデスクトップ、ノートPCでLibreofficeのBaseからSQLiteを操作できるかやってみた。

まずはsqlite3 とodbcのドライバのインストール

$ sudo apt-get install sqlite3 libsqlite3-dev unixodbc unixodbc-dev unixodbc-bin libsqliteodbc

それぞれ設定していきます。

データベースをodbcで接続してLibreOffice Baseで作成したフォームで検索閲覧や追加修正する・・。
dataform.jpg

はまった点。
その1
$ ODBCManageDataSourcesQ4
で設定ができなかったこと。
userでもsudoで起動しても設定ファイルが保存されない。なんででしょう?
仕方がないので設定ファイルを手動で作った。

インストール直後にodbcinst.iniを見てみると
$ cat /etc/odbcinst.ini
[SQLite]
Description = SQLite ODBC Driver
Driver = libsqliteodbc.so
Setup = libsqliteodbc.so
UsageCount = 1

[SQLite3]
Description = SQLite3 ODBC Driver
Driver = libsqlite3odbc.so
Setup = libsqlite3odbc.so
UsageCount = 1

ドライバーの在処が何故かフルパスで書かれていない

念の為手動で作成
$ cat /etc/odbcinst.ini
[SQLite]
Description = SQLite ODBC Driver
Driver = /usr/lib/i386-linux-gnu/odbc/libsqliteodbc.so
Setup = /usr/lib/i386-linux-gnu/odbc/libsqliteodbc.so
UsageCount = 1

[SQLite3]
Description = SQLite3 ODBC Driver
Driver = /usr/lib/i386-linux-gnu/odbc/libsqlite3odbc.so
Setup = /usr/lib/i386-linux-gnu/odbc/libsqlite3odbc.so
UsageCount = 1


$ cat ~/.odbc.ini
~/.odbc.iniは無い

手動で作成
$ cat ~/.odbc.ini
[mysqlitedb]
Description = mysqlitedb
Driver = SQLite3
Database = /home/hoge/mytest.db
Timeout = 100000
StepAPI = No
LongNames = No


その2
データベースをGoogleDriveに置いてどこからでもアクセスしようとしたら・・・

odbc.iniにデータベースの場所を書き込む。
[mysqlitedb]
Description=mysqlitedb
Driver=SQLite3
Database=/home/hoge/'Google Drive'/hogehoge.db
Timeout=100000
StepAPI=No
LongNames=No

データベースファイルをローカルのローカルのGoogle Driveのディレクトリに置いてみたらBaseから接続できないことがわかった。
このディレクトリはgriveをgrive-toolsでセットアップした時に作られたもの。

ディレクトリ名はダブルクォート、シングルクォートで囲ったがどちらもダメ。バックスラッシュも試したけどダメでした。

おそらくBaseからodbc.iniを読むときディレクトリ名にスペースが入っていてそれを解さないのでしょう。
したがってディレクトリ名を変える必要がある。

この解決策はgrive-toolsを改造してOKです。これは別の記事で・・・。
posted by 片桐 健 at 15:34 | Ubuntu