脱
脱
Access
Access
は、まず脱
は、まず脱
Base
Base
から
から
オフィスアプリの
オフィスアプリの
OpenOffice.org
OpenOffice.org
への移行
への移行
鎌滝雅久(
鎌滝雅久(
[email protected]
[email protected]
)
)
関西
関西
OpenOffice.org
OpenOffice.org
勉強会
勉強会
オープンソースカンファレンス
オープンソースカンファレンス
2008 Kansai
2008 Kansai
2008
2008
年
年
7
7
月
月
19
19
日
日
11:15
11:15
-
-
12:00
12:00
京都コンピュータ学院 教室
京都コンピュータ学院 教室
C
C
本日の内容
本日の内容
●
Access
Access
と
と
Base
Base
の違い
の違い
●
Base
Base
と接続可能な
と接続可能な
DB
DB
形式
形式
●
脱
脱
Base
Base
その
その
1 HSQLDB
1 HSQLDB
の見直し
の見直し
●脱
脱
Base
Base
その
その
2 Writer
2 Writer
フォームを使う
フォームを使う
●脱
脱
Base
Base
その
その
3 Calc
3 Calc
をレポートに使う
をレポートに使う
●Access
Access
で作成されたアプリの移行
で作成されたアプリの移行
●Access
Access
のクエリーを
のクエリーを
Base
Base
で実現
で実現
Access
Access
と
と
Base
Base
の違い
の違い
●
Access
Access
– DBDBとフロントエンドが一体となったアプリケーションとフロントエンドが一体となったアプリケーション – フロントエンドとはフロントエンドとは ● クエリー、フォーム、レポートなどデータの出し入れの機能クエリー、フォーム、レポートなどデータの出し入れの機能 – mdbmdbというひとつのファイル形式に収録というひとつのファイル形式に収録 ●Base
Base
– フロントエンドのみのアプリケーションフロントエンドのみのアプリケーション – DBDBとの接続はデータソース経由で行われるとの接続はデータソース経由で行われる – odbodbというひとつのファイル形式に収録できるのはというひとつのファイル形式に収録できるのは HSQLDB HSQLDBのみのみAccess
Access
と
と
Base
Base
の違い
の違い
DB(テーブル) ク エ リ ー フ ォ ー ム レ ポ ー ト フロントエンド ク エ リ ー フ ォ ー ム レ ポ ー ト フロントエンド データソース DB(テーブル)
Base
Base
と接続可能な
と接続可能な
DB
DB
形式
形式
●
JDBC/ODBC
JDBC/ODBC
規格のドライバで接続可能な
規格のドライバで接続可能な
DB
DB
– HSQLDBHSQLDB((OpenOffice.orgOpenOffice.orgにインストール済み)にインストール済み)
– MySQLMySQL、、PostgreSQLPostgreSQL、、FirebirdFirebirdなどのなどのOSSOSSののRDBMSRDBMS – OracleOracle、、SQL ServerSQL Server、、DB2DB2などの商用などの商用RDBMSRDBMS
– 表計算ドキュメント、d表計算ドキュメント、dBaseBaseなどの簡単ななどの簡単なDBDB
●
Windows
Windows
のみで利用可能な
のみで利用可能な
DB
DB
– OSOSに付属のドライバで接続に付属のドライバで接続 – AccessAccess
脱
脱
Base
Base
その
その
1 HSQLDB
1 HSQLDB
の見直し
の見直し
●標準
標準
HSQLDB
HSQLDB
の欠点
の欠点
– BaseBase起動直後のテーブルの表示に時間がかかる起動直後のテーブルの表示に時間がかかる ● ZIPZIP圧縮、展開が行われる分だけ遅くなるのも原因圧縮、展開が行われる分だけ遅くなるのも原因 – 複数人での複数人でのDBDB共有に向かない共有に向かない ● クイック起動常駐時、最初のユーザーのロックファイルが残るクイック起動常駐時、最初のユーザーのロックファイルが残る ●HSQLDB
HSQLDB
以外の選択肢
以外の選択肢
– MySQLMySQL、、PostgreSQLPostgreSQL、、FirebirdFirebirdなどなど
●
HSQLDB
HSQLDB
への接続方法を見直す
への接続方法を見直す
– サーバーベースで接続サーバーベースで接続
HSQLDB
HSQLDB
へサーバーベースで接続
へサーバーベースで接続
●Base
Base
での設定方法
での設定方法
– HSQLDBHSQLDBのサーバー起動のサーバー起動 java -cp "$(inst)\program\classes\hsqldb.jar" java -cp "$(inst)\program\classes\hsqldb.jar"org.hsqldb.Server -database \Database\db
org.hsqldb.Server -database \Database\db
– データソースのデータソースのURLURL jdbc:hsqldb:hsql://localhost/;default_schema=tr jdbc:hsqldb:hsql://localhost/;default_schema=tr ue ue – JDBCJDBCドライバクラスドライバクラス org.hsqldb.jdbcDriver org.hsqldb.jdbcDriver
– OpenOffice.orgOpenOffice.orgのバージョンによってはのバージョンによってはJavaJavaの設定での設定で クラスパス登録が必要
HSQLDB
HSQLDB
へファイルベースで接続
へファイルベースで接続
●Base
Base
での設定方法
での設定方法
– データソースのデータソースのURLURL jdbc:hsqldb:c:\database\db;default_schema=tr jdbc:hsqldb:c:\database\db;default_schema=tr ue ue – JDBCJDBCドライバクラスドライバクラス org.hsqldb.jdbcDriver org.hsqldb.jdbcDriver – HSQLDBHSQLDBのファイル群のファイル群 ● db.propertiesdb.properties ● db.scriptdb.script ● db.logdb.log – クエリー、フォーム、レポートを収録したクエリー、フォーム、レポートを収録したodbodbファイルファイルDB
DB
間でテーブルのコンバート
間でテーブルのコンバート
●
テーブルのコピー
テーブルのコピー
&
&
貼り付け
貼り付け
– BaseBaseではテーブルカテゴリでコピーではテーブルカテゴリでコピー&&貼り付けが可能貼り付けが可能 – 「テーブルのコピー」ダイアログで設定「テーブルのコピー」ダイアログで設定
脱
脱
Base
Base
その
その
2 Writer
2 Writer
フォームを使う
フォームを使う
●
Base
Base
フォームの欠点
フォームの欠点
– AccessAccessのような「標準のフォーム」機能がないのような「標準のフォーム」機能がない – BaseBaseでマクロを実行できるのはフォームなどでマクロを実行できるのはフォームなど – GUIGUIメニューの遷移が容易ではないため、オペレーターメニューの遷移が容易ではないため、オペレーター が利用しやすいメニューの構築が難しい が利用しやすいメニューの構築が難しい●
Base
Base
のフォームではなく
のフォームではなく
Writer
Writer
フォームを使おう
フォームを使おう
– WriterWriterフォームを「標準のフォーム」にすればよいフォームを「標準のフォーム」にすればよい – WriterWriterのマクロ機能が利用できるのマクロ機能が利用できる
フォームを
フォームを
Writer
Writer
に移植する
に移植する
●
Base
Base
のフォームから
のフォームから
Writer
Writer
に移植する
に移植する
– フォームウィザードで作成フォームウィザードで作成
– [ファイル]-[コピーに名前を付けて保存][ファイル]-[コピーに名前を付けて保存]
– WriterWriterドキュメントとして保存ドキュメントとして保存
Writer
脱
脱
Base
Base
その
その
3 Calc
3 Calc
をレポートに使う
をレポートに使う
●
Base
Base
レポートの欠点
レポートの欠点
– データの加工が容易なデータの加工が容易なCalcCalcではないではないWriterWriter形式のド形式のド キュメント
キュメント
– 小計などの集計欄の設定が容易ではない小計などの集計欄の設定が容易ではない
– 作成されたレポートのカスタマイズが難しい作成されたレポートのカスタマイズが難しい
●
レポートには
レポートには
Calc
Calc
形式ドキュメントを使おう
形式ドキュメントを使おう
– BasicBasicででCalcCalcのテンプレートファイルに出力のテンプレートファイルに出力 – BasicBasicにクエリーを埋め込み可能にクエリーを埋め込み可能
Basic
Basic
による
による
Calc
Calc
レポート出力
レポート出力
●
Basic
Basic
の基本構文
の基本構文
● DBDBとの接続部分との接続部分 DatabaseContext=createUnoService("com.sun.star.sdb.DatabaseContext") DatabaseContext=createUnoService("com.sun.star.sdb.DatabaseContext") DataSource=DatabaseContext.getByName("business_sample") DataSource=DatabaseContext.getByName("business_sample") ● SQLSQLのセットのセット Connection = DataSource.GetConnection("","") Connection = DataSource.GetConnection("","") Statement = Connection.createStatement() Statement = Connection.createStatement()ResultSet= Statement.executeQuery(“SELECT * FROM T_
ResultSet= Statement.executeQuery(“SELECT * FROM T_売上”売上”))
● CalcCalcファイルとシートの指定ファイルとシートの指定 sURL = ConvertToURL("C:\report.ods")
sURL = ConvertToURL("C:\report.ods")
oDoc = starDesktop.loadComponentFromURL(sURL,"_default",0,Array()) heet= oDoc.Sheets.getByName("
oDoc = starDesktop.loadComponentFromURL(sURL,"_default",0,Array()) heet= oDoc.Sheets.getByName("表表
1")
1")
● 出力出力
While ResultSet.next ' x
While ResultSet.next ' xががcolcol方向、方向、yyががrowrow方向の座標値方向の座標値
x = 0x = 0 n = 1
n = 1
While n <= COLUMNS ' COLUMNS
While n <= COLUMNS ' COLUMNSははSQLSQLでセットされたフィールド数でセットされたフィールド数
Cell =Sheet.getCellByPosition(x,y)Cell =Sheet.getCellByPosition(x,y) Cell.setString(ResultSet.getString(n)) Cell.setString(ResultSet.getString(n)) n = n +1n = n +1 x = x +1x = x +1 Wend Wend
データパイロットを利用したレポート
データパイロットを利用したレポート
●Access
Access
のクロス集計クエリー
のクロス集計クエリー
– ウィザード形式で設定が可能ウィザード形式で設定が可能 ●Calc
Calc
のデータパイロット機能を利用する
のデータパイロット機能を利用する
– [データ]-[データパイロット]-[呼び出す][データ]-[データパイロット]-[呼び出す]Access
Access
で作成されたアプリの移行
で作成されたアプリの移行
●
Access
Access
の
の
VBA
VBA
を用いたオフィスアプリケーション
を用いたオフィスアプリケーション
– 現行のアプリケーションの仕様を再検討現行のアプリケーションの仕様を再検討
– グループウェアなど次世代型のオフィスアプリも選択肢グループウェアなど次世代型のオフィスアプリも選択肢
●
OpenOffice.org Basic
OpenOffice.org Basic
への移行
への移行
– StarSuiteStarSuiteなどのコンバートツールはあてにしないなどのコンバートツールはあてにしない ● マクロ移行ウィザードマクロ移行ウィザード http://docs.sun.com/app/docs/doc/819-1360? http://docs.sun.com/app/docs/doc/819-1360? l=ja&q=starsuite+8 l=ja&q=starsuite+8 – コンバートではなく書き換えコンバートではなく書き換え
コンボボックスによる絞込み
コンボボックスによる絞込み
●フォームにコンボボックスを追加
フォームにコンボボックスを追加
– コンボボックスウィザードで設定が行えるコンボボックスウィザードで設定が行える – イベント「テキストを変更した時」に以下のマクロを設定イベント「テキストを変更した時」に以下のマクロを設定 Sub NewTitleSelected(oEvent) Sub NewTitleSelected(oEvent) Dim oForm Dim oForm oForm = oEvent.Source.getModel().getParent() oForm = oEvent.Source.getModel().getParent() oForm.Filter = """oForm.Filter = """店名店名""='" & oEvent.Source.getText() & "'"""='" & oEvent.Source.getText() & "'" oForm.ApplyFilter = True oForm.ApplyFilter = True oForm.reload() oForm.reload() End Sub End Sub
入力フォームによる検索
入力フォームによる検索
●
Access
Access
の
の
[forms]![
[forms]![
フォーム名
フォーム名
]![
]![
コントロール名
コントロール名
]
]
– 非連結コントロールを使った検索フォーム非連結コントロールを使った検索フォーム
– クエリーに埋め込み可能クエリーに埋め込み可能
●
フォームにテキストボックス、検索ボタンを設置
フォームにテキストボックス、検索ボタンを設置
– テキストボックスから値を取得テキストボックスから値を取得
Access
Access
のクエリーを
のクエリーを
Base
Base
で実現
で実現
●
Access
Access
のクエリーで
のクエリーで
Base
Base
のメニューにないもの
のメニューにないもの
– 更新クエリー更新クエリー – 削除クエリー削除クエリー ● 上記上記22つはつはSQLSQLコマンドを直接実行するコマンドを直接実行する ● [ツール]-[[ツール]-[SQLSQL]] – ユニオンクエリーユニオンクエリー – 追加クエリー追加クエリー – 重複クエリー重複クエリー – 不一致クエリー不一致クエリー ● 上記上記44つはクエリーデザインで実現可能つはクエリーデザインで実現可能
更新クエリー
更新クエリー
●クエリーデザインで雛形を作成する
クエリーデザインで雛形を作成する
●SQL
SQL
コマンドに変換
コマンドに変換
– 「デザインビューのオン「デザインビューのオン//オフ 切り換え」ボタンオフ 切り換え」ボタン SELECT "SELECT "カード送付カード送付", 0 FROM "T_", 0 FROM "T_顧客顧客" WHERE "" WHERE "カード送付カード送付" = 1" = 1
– 更新クエリーに書き換える更新クエリーに書き換える
UPDATE "T_
UPDATE "T_顧客顧客" SET "" SET "カード送付カード送付" = 0 WHERE "" = 0 WHERE "カード送付カード送付" = 1" = 1
削除クエリー
削除クエリー
●クエリーデザインで雛形を作成する
クエリーデザインで雛形を作成する
●SQL
SQL
コマンドに変換
コマンドに変換
– 「デザインビューのオン「デザインビューのオン//オフ 切り換え」ボタンオフ 切り換え」ボタン SELECT "SELECT "カード送付カード送付" FROM "T_" FROM "T_顧客顧客" WHERE "" WHERE "カード送付カード送付" = 1" = 1
– 削除クエリーに書き換える削除クエリーに書き換える
DELETE FROM "T_
DELETE FROM "T_顧客顧客" WHERE "" WHERE "カード送付カード送付" = 1" = 1
ユニオンクエリー
ユニオンクエリー
●
クエリーデザインで雛形を作成する
クエリーデザインで雛形を作成する
●
2
2
つのクエリーを
つのクエリーを
UNION
UNION
演算子で結合する
演算子で結合する
SELECT "
SELECT "学年学年", "", "組組", "", "性別性別", AVG( "", AVG( "国語国語" ) AS "" ) AS "国語国語", AVG( "", AVG( "算数算数" ) AS "" ) AS "算数算数", AVG( "", AVG( "理科理科" ) AS "" ) AS "理科理科", AVG( "", AVG( "社会社会" ) AS "" ) AS "社会社会" " FROM "
FROM "成績表成績表" GROUP BY "" GROUP BY "学年学年", "", "組組", "", "性別性別"" UNION
UNION
SELECT NULL AS "
SELECT NULL AS "学年学年", 99 AS "", 99 AS "組組", '", '学年平均学年平均' AS "' AS "性別性別", AVG( "", AVG( "国語国語" ) AS "" ) AS "国語国語", AVG( "", AVG( "算数算数" ) AS "" ) AS "算数算数", AVG( "", AVG( "理科理科" ) AS " ) AS
"
"理科理科", AVG( "", AVG( "社会社会" ) AS "" ) AS "社会社会" FROM "" FROM "成績表成績表" GROUP BY "" GROUP BY "学年学年" ORDER BY "" ORDER BY "組組", "", "性別性別""
–
「
「
SQL
SQL
コマンドを直接実行」ボタンをオンに
コマンドを直接実行」ボタンをオンに
–フィールドの数をそろえる必要あり
フィールドの数をそろえる必要あり
追加クエリー
追加クエリー
●ユニオンクエリーと「テーブルのコピー」機能を利用
ユニオンクエリーと「テーブルのコピー」機能を利用
する
する
– 追加したいデータをクエリーで抽出追加したいデータをクエリーで抽出 – 追加先テーブルと結合ユニオンクエリーを作成追加先テーブルと結合ユニオンクエリーを作成 – 同クエリーをコピーしテーブルカテゴリで貼り付け同クエリーをコピーしテーブルカテゴリで貼り付け – 「テーブルのコピー」ダイアログでテーブル作成「テーブルのコピー」ダイアログでテーブル作成 – テーブルカテゴリに新規テーブルとして追加されるテーブルカテゴリに新規テーブルとして追加される重複クエリー
重複クエリー
●考え方
考え方
– 重複チェックをするフィールドで重複チェックをするフィールドで22つ以上のデータが重複つ以上のデータが重複 するレコードを抽出するクエリーを作成する するレコードを抽出するクエリーを作成する これを「重複条件」という名前で保存する これを「重複条件」という名前で保存する – 上記クエリーの結果をもとに、上記クエリーの結果をもとに、ININ演算子を使って重複条演算子を使って重複条 件が真となるレコードを抽出する 件が真となるレコードを抽出する 重複をチェックするフィールドの条件欄は 重複をチェックするフィールドの条件欄は IN ( SELECT * FROM [ IN ( SELECT * FROM [重複条件重複条件] ) ] )不一致クエリー
不一致クエリー
●考え方
考え方
– 不一致とするキーワードを含むレコードを抽出するクエ不一致とするキーワードを含むレコードを抽出するクエ リーを作成する リーを作成する これを「不一致条件」という名前で保存する これを「不一致条件」という名前で保存する – 上記クエリーの結果をもとに、上記クエリーの結果をもとに、NOT INNOT IN演算子を使って演算子を使って 不一致条件が真となるレコードを抽出する 不一致条件が真となるレコードを抽出する 不一致をチェックするフィールドの条件欄は 不一致をチェックするフィールドの条件欄はNOT IN ( SELECT [ID] FROM [
まとめ
まとめ
●
Access
Access
でできることは
でできることは
Base
Base
にもできる
にもできる
– 大きな期待は禁物大きな期待は禁物
– 改善要望が実現するのは改善要望が実現するのは3.13.1以降以降
●
オフィスアプリの開発には
オフィスアプリの開発には
Basic
Basic
は不可欠
は不可欠
– AccessAccessでもでもVBAVBAは不可欠は不可欠
●
Base
Base
での開発は、
での開発は、
Visual Studio
Visual Studio
で
で
DB
DB
アプリを作
アプリを作
成する気持ちで取り組もう
成する気持ちで取り組もう
●Basic
Basic
などの開発環境に関する情報
などの開発環境に関する情報
– 本資料の「参考」をご覧ください本資料の「参考」をご覧ください本日はありがとうございました
本日はありがとうございました
参考
参考
●
OpenOffice.org Q&A
OpenOffice.org Q&A
● http://oooug.jp/faq/http://oooug.jp/faq/
Base
Base、、BasicBasicに関する情報も数多く登録されていますに関する情報も数多く登録されています
●
StarSuite8
StarSuite8
日本語ドキュメント
日本語ドキュメント
● http://docs.sun.com/app/docs/coll/1268.1?http://docs.sun.com/app/docs/coll/1268.1? l=ja&q=starsuite+8 l=ja&q=starsuite+8 ●グラス片手にフォーム設計
グラス片手にフォーム設計
● http://openoffice- http://openoffice-docj.sourceforge.jp/wiki/images/HowToForm2.pdf docj.sourceforge.jp/wiki/images/HowToForm2.pdf ●OpenOffice.org
OpenOffice.org
の開発言語に関するサイト
の開発言語に関するサイト
参考 その
参考 その
2
2
●
短期連載「
短期連載「
OpenOffice.org
OpenOffice.org
操縦術」
操縦術」
(
(
日経
日経
Linux)
Linux)
● http://bd.tank.jp/nikkei/http://bd.tank.jp/nikkei/
●
Andrew Pitonyak
Andrew Pitonyak
氏の
氏の
Basic
Basic
解説書
解説書
● http://www.pitonyak.org/http://www.pitonyak.org/
● データベースとデータベースとBasicBasicについて書かれたについて書かれたAndrewBaseAndrewBase
● http://www.pitonyak.org/database/AndrewBase.pdfhttp://www.pitonyak.org/database/AndrewBase.pdf
●