ワープロでも表計算でもない
第三のツールを活用しよう
Dec 8 OSC2018 Fukuoka
LibreOffice BASE で
データ処理の幅を広げよう
Koutarou Watanabe
CC-BY-SA4.0
Agenda   ~アジェンダ~
講師紹介
LibreOffice BASE って?
BASE を起動してみよう!
各オブジェクトを理解しよう
データ型を理解しよう(データの型を意識しよう)
Access の構成と比べてみる
データインポートとエクスポート
マクロを使った処理のあれこれ
  などなど 
講師紹介   ~ Lecturer Profiles ~
渡 浩太郎(邊 Koutarou Watanabe )
福岡市出身
某団体 2011 年 LibreOffice 導入時の
メイン担当&マニュアル作成 + 苦情処理係
(現在はシステム担当ではありません)
LibreOffice 日本語チーム( 2018/11 ~)
質問や悩み事等は直接本人まで!
今日もプライベート参加です
このプレゼンは渡辺の個人的見解であり、所属団体の見解ではございません
  
本セミナーはこんな内容です
事務職やシステム運用担当者など
非開発職の方々を対象とした
ノンプログラマー向けです。
BASE の使い方を細かく説明する、使い方講習会では
ありません。
BASE でデータ処理を始める時に押さえておきたい事
項について説明します。
大多数の人が「よくわからない」データベース。
使いこなせば、仕事をラクにできる事 100 倍です。
BASE で新しいデータ処理に触れてみましょう。
処理 SQL 等は自学でお願いします!
本セミナーの対象バージョン
本セミナーは
LibreOffice : Ver 6 . 1 . 3
OS : Windows10 ー 64 ビット
で動作確認できた内容についてお話ししています。
他のバージョンや OS では、セミナー内容とは違う場
合がありますのでご了承ください。
ちなみに Ver6.1.3 の BASE ではレポートフッターにページや日付を挿入
しようとすると LibreOffice がクラッシュします!
LibreOffice-BASE って知ってる?
1.LibreOffice-BASE とは?(ざっくり言うと)
・データベース統合開発環境である
・ RDB (リレーショナル DB )がメインである
2.Ms-Office で言うところの?
・ Access に該当(機能分類では)
・ファイル互換性は無いに等しい
3.LibreOffice インストール後スグ使える?
・ BASE を使うには JAVA 環境が必要
Writer - WORD
Calc - EXCEL
BASE -????
JRE : Java Runtime Environment
JDK : Java Development Kit 私の場合 Windows10
JRE10 では動かなかった
LibreOffice-BASE のデータベース?
1.BASE では埋込データベースを選択可能
・埋込 (Embedded)DataBase(DB) って?
・ HSQLDB と Firebird とは?
・ HyperSQL-DataBase ( Java100 %)
・ Firebird- 旧 Borland の InterBASE が土台
2.BASE で埋込 DB を選ぶなら?
・ Firebird を選択すべき理由
・ LibreOffice5.4 から Firebird が Ver 3に!
市販されていた DB なので
動作が非常に安定している
安定している・対応 SQL が多い・
ANSI SQL 標準に準拠・ネット上に情報が多い
LOVer 4.2から Firebird を選択可能になったが FB2.5 だった
1.何か分からない BASE の起動画面
・ Writer や Calc との違いとは?
2.データベースソフト (BASE) とは?
3.代表的なオブジェクトは4つだけ!
・テーブル ・・・ データ保管
・クエリー ・・・ 仮想表(多様な切り口)
・フォーム ・・・ 画面(インターフェース)
・レポート ・・・ 帳票(多様な見せ方)
LibreOffice-BASE を起動してみる
データを整理して蓄積し、さまざまな組み合わせで取り出せるソフト
表計算:数値データの集計・分析に使用するソフト
ここではビューとかストアドプロシージャは意識しないってことで
BASE の起動画面
何をやればよいのか
さっぱりわからない
オブジェクト
切り替え
各 OBJECT の役割を理解しよう
1.テーブル
・データを格納する単位
・データの論理的な集まり
2.クエリー
・問い合わせと結果( SQL 含む) : 仮想表
3.フォーム
・データの表示方法(一覧表・カード型 etc )
4.レポート
・見やすい印刷物を設計 / 表示
データ型を理解しよう
1.テーブルに格納されるデータは項目毎に設定され
たデータ型に従います
●
日付型の項目には「日付」以外、登録できない。
●
数値型の項目には「数字」以外、登録できない。
●
データベースではデータを「型」で分類する。
●
しっかりした「型」分類によりデータの整合性を保
持している。
●
データ型はデータインポート時に意識する必要が
出てくる。
BASE ( Firebird )のデータ型を知ろう  ~ 多いと感じますが ~
分類 データ型名 範囲
文字列 CHAR(m)
VARCHAR(m)
半角英数( ASCII )  1 ~ 32767 文字
全角( SJIS_0208 )  1 ~ 16383 文字
CHAR(m) は m 文字の固定長
VARCHAR(m) は最大 m 文字の可変長
整数 SMALLINT
INTEGER
-32,768 ~ 32,767
-2,147,483,648 ~ 2,147,483,647
長整数 BIGINT 符号付 64 ビット整数 Dialect3/FB1.5 以降で使用可能
実数 FLOAT
DOUBLE
PRECISION
3.4×10 の -38 乗~ 3.4×10 の 38 乗 有効桁数 7 桁
1.7×10 の -308 乗~ 1.7×10 の 308 乗 有効桁数 15 桁
固定小数点 NUMERIC ( m,n )
DECIMAL ( m,n )
有効桁数 m = 1 ~ 15
小数点以下の桁数 n=1 ~ 15 ( m >= n )
最高 m 桁の有効数字を格納
有効桁数 m = 1 ~ 15
小数点以下の桁数 n=1 ~ 15 ( m >= n )
最低 m 桁の有効数字を格納
日付 DATE
TIME
TIMESTAMP
西暦 100 年 1 月 1 日~ 32768 年 2 月 29 日までの年月日
00:00:00 ~ 23:59:59 までの時分秒
西暦 100 年 1 月 1 日~ 32768 年 2 月 29 日までの年月日と時分秒
その他 BLOB グラフィック,文字などの大量データに使用 : 可変長
論理型 BOOLEAN 真理値の「真 = true 」と「偽 = false 」
BASE のデータ型を知ろう ~ 普段使うのは赤枠内くらい ~
分類 データ型名 範囲
文字列 CHAR(m)
VARCHAR(m)
半角英数( ASCII )  1 ~ 32767 文字
全角( SJIS_0208 )  1 ~ 16383 文字
CHAR(m) は m 文字の固定長
VARCHAR(m) は最大 m 文字の可変長
整数 SMALLINT
INTEGER
-32,768 ~ 32,767
-2,147,483,648 ~ 2,147,483,647
長整数 BIGINT 符号付 64 ビット整数 Dialect3/FB1.5 以降で使用可能
実数 FLOAT
DOUBLE
PRECISION
3.4×10 の -38 乗~ 3.4×10 の 38 乗 有効桁数 7 桁
1.7×10 の -308 乗~ 1.7×10 の 308 乗 有効桁数 15 桁
固定小数点 NUMERIC ( m,n )
DECIMAL ( m,n )
有効桁数 m = 1 ~ 15
小数点以下の桁数 n=1 ~ 15 ( m >= n )
最高 m 桁の有効数字を格納
有効桁数 m = 1 ~ 15
小数点以下の桁数 n=1 ~ 15 ( m >= n )
最低 m 桁の有効数字を格納
日付 DATE
TIME
TIMESTAMP
西暦 100 年 1 月 1 日~ 32768 年 2 月 29 日までの年月日
00:00:00 ~ 23:59:59 までの時分秒
西暦 100 年 1 月 1 日~ 32768 年 2 月 29 日までの年月日と時分秒
その他 BLOB グラフィック,文字などの大量データに使用 : 可変長
論理型 BOOLEAN 真理値の「真 = true 」と「偽 = false 」
Access の構成と比べてみる
システムイメージ
Access
テーブル (TABLE)
フ
ォ
ー
ム
Form
ク
エ
リ
ー
Query
レ
ポ
ー
ト
Report
フ
ォ
ー
ム
Form
BASE
ク
エ
リ
ー
Query
レ
ポ
ー
ト
Report
Firebird (TABLE)
DataSource
Writer
Firebird 埋込 Embedded→
Access の方が各オブジェクト間の連携が強力で気軽に利用しやすい反面、実際の
DB 開発に近い環境を意識しにくい。その点はBASE に分がある
BASE を使ったデータ処理
1.BASE (データベース)の利点って?
・仮想的にデータを表示できる - クエリー
・仮想だから元データに影響が及ばない
・印刷設定も元データに影響しない - レポート
・処理パターンを保存できる - クエリー / レポート
2.データベースが得意な処理とは?
・データの連結
・集計(グループ化)
・一定の条件によるデータ抽出
BASE へのデータ移動 ~ データインポート ~
1.BASE へデータを移すには?
・テーブルにデータを移すには?
・ Calc を中継するパターンが簡単便利
➢範囲選択+コピー & ペースト(コピペ)で完了
➢連結用コードは Calc で生成しておこう!
2.データ型を意識しよう
・意識すべきデータ型は3つだけ!
・主キー(プライマリキー)は自動付与で!
※ 自動付与しない場合はデータ登録後でも付与可能
日付?
数値?
文字列?
BASE Calc で事前に型指定してしまう!
●Calc のセルの書式設定でデータ型を決める
・日付型で保存したいとき
➢Calc : 1999-12-31 形式で指定しておく
➢BASE :取込時に日付 DATE 型で指定
・数値型で保存したいとき
➢Calc :数で指定しておく
➢BASE :取込時に数値 BIGINT/INT 型で指定
・文字列型で保存したいとき  
➢Calc :テキストで指定しておく
➢BASE :特に指定しなくても OK
データ
インポート作業
BASE 貼り付けテーブルがある?ない?
●貼り付け先テーブルがない場合
・テーブル欄の空きスペースに貼り付け
➢テーブル作成ウィザードが起動する
➢画面遷移に従って処理をすすめると OK
●既存のテーブルに貼り付ける場合
・貼り付けるテーブル名を選択→貼り付け
・オートナンバー型項目があるテーブルへ
 貼り付ける場合の注意点
データ
インポート作業
※ オートナンバー型はテーブル作成時から指定しておく必要あり
※ オートナンバー型項目の送りデータ側のチェックを外す
インポート画面
オートナンバー型が
ある既存テーブルへ
のインポート
ソース側の
チェックを外す
BASE 連結コードは Calc で生成しておこう
●2 つのデータを連結する連結コードは Calc で項目
連結して作成しよう
データ
インポート作業
•データ照合には両データ共通の連結コードが必須。
•実際は、ほぼ連結用のコードを作成する必要がある。
•名簿であれば、「カナ氏名」と「生年月日」を連結しコー
ドを生成する方法がある。
•セル式に =trim( として余計なスペースを削除すれ
ば、かなり識別度の高いコードを生成できる。
•データ照合は「目」チェックが重要ですが、検証とし
て、連結コードによる「機械照合」もあれば、事務負担
が軽減されるのではないかと思う。
BASE 連結コードとリレーション
●2 つのデータを連結する連結コード同士をリレー
ション(関係付け)する(クエリー作成時で OK )
●
2つのデータにある識別用コードをリレーションする
●
連結コード同士の連結でデータ照合が可能となる
●
リレーションには4つの種類がある
➔
内部結合・・・ 両方に共通存在するデータ
➔
右結合 ・・・ 右側の全データ+左側で合致するデータ
➔
左結合 ・・・ 左側の全データ+右側で合致するデータ
➔
クロス結合・・・ 全データを全ての組み合わせで結合
データ処理の場合、処理の内容に応じてリレーションを使い分ける必要があるの
で、実際にクエリーを作成する段階でリレーションを張れば良い
不一致データを探す場合は、右結合か左結合を利用する
リレーション
テーブル間の連結
コード同士を接続
ソース側の
識別用 CD から
テーブル側へ
ドラッグ
この例はデータ A にあって
データ B には無い不一致
データを抽出しています
リレーション後
右クリック編集で
結合方法を選定
不一致検索は赤枠のようにデータ B のデータを検索するのがポイント
BASE でのデータ処理事例
●具体的なデータ処理例 ~クエリー&レポート~
・ 2 つのデータを照合する
①データ A にもデータ B にも存在する(内部結合)
②データ A にあってデータ B には無い(左結合)
③データ B にあってデータ A には無い(右結合)
・グループ単位で集計する(複数指定可)
・指定範囲内にあるデータを抽出する
・処理と結果データを保存し出力可能とする
・見映え良い印刷物として出力する
SQL (クエリー)の実行ボタンは2つある
●クエリーの実行とは?
・ SQL は SELECT 文だけに対応
・ LibreOffice-BASE が処理を実行する(らしい)
SELECT 文・ SQL ステートメントのシンタックスエラー・システム
テーブル (RDB$) へのアプローチ
●SQL コマンドを直接実行とは?
・ほとんどの SQL を実行可能
・利用している DataBase が処理を実行
 (動作はデータベースに依存)
Select 文以外の SQL を流す場合は「SQL コマンドを直接実行」を有効にする必要
がある、複雑なSelect 文でエラーが出る場合、直接実行で解決する時もある
SQL コマンドを直接実行ボタンを有効にした後、クエリーの実行ボタンを押します
BASE からデータ出力 ~ データエクスポート ~
●データ出力時の留意点
・コピー&ペースト(コピペ)だと文字化けします
・文字化けしない方法
①Calc の新規シートを開きます
②BASE のオブジェクト一覧を開きます
③出力したいオブジェクトを選択
④そのまま①の Calc 画面上へ Drag&Drop
⑤Calc シート上にデータ展開される
BUG ですね
文字化け
テーブル名を選択しコピー
シートに貼り付け(コピペ)
ドラッグ&ドロップ
コピペを行うと文字化けする、ドラッグ& ドロップだと文字化けしない
BASE でマクロを使う
●OpenBasic がメイン言語
・ Calc データのインポート / エクスポート
・テキストファイルのインポート / エクスポート
・出力するデータの文字コード指定
・フォームやレポートの動作制御(コントロール)
・フォームの入力値を条件に持つクエリー実行 
  などを自動化できます
●クエリー上で Function 関数が使えない
Access との大きな違い!ユーザー関数を気軽に利用できない
BASE マクロにはインポート・エクスポートコマンドはないが、処理マクロで実装
可能、Access のフォーム的な運用の実装もマクロで実現できます。
Access のようにクエリーにフォームの値を直接パラメーターとして読ませることはでき
ないので、マクロでSQL を直接書き換え、その後クエリー実行という流れになる。
There is no time like the present!
今が最適時です!
さあ!これで
 あなたも BASE 使い!
~データベース?
 使ってみたことあるよ と言おう~
今日の講演を聞いたから
きっと大丈夫!!
There is no time like the present!
SlideShare にも色々上げてるから見てね!
CALC の DB 機能?、あんなの飾りです
BASE を知らない人にはそれがわからんのですよ
ご清聴ありがとうございました
CC-BY-SA4.0

BASEでデータ処理の幅を広げよう