SlideShare uma empresa Scribd logo
1 de 24
Baixar para ler offline
マクロで BASE を操る
記述あれこれ
Dec 9 2018   8th 九州 Libreoffice 勉強会
LibreOffice BASE
マクロで操作しよう
Koutarou Watanabe
CC-BY-SA4.0
Let's operate with macros
Manipulate BASE with macros
Description
Agenda   ~アジェンダ~
講師紹介
BASE のマクロでできたこと
マクロの動作を見てみよう(フォーム)
データインポートとエクスポート
マクロを使った処理のあれこれ
などなど 
講師紹介   ~ Lecturer Profiles ~
渡 浩太郎(邊 Koutarou Watanabe )
福岡市出身
某団体 2011 年 LibreOffice 導入時の
メイン担当&マニュアル作成 + 苦情処理係
(現在はシステム担当ではありません)
LibreOffice 日本語チーム( 2018/11 ~)
質問や悩み事等は直接本人まで!
今日もプライベート参加です
このプレゼンは渡辺の個人的見解であり、所属団体の見解ではございません
  
Base User ≒ Access User
Access コンバートやってみたけど、情報が少なくて
挫折した過去を持つユーザー向けです。
BASE のマクロで、これだけはできてほしいことの中
から、とりあえず動作したものを個人的判断で紹介す
るものです。
大多数の人が「よくわからないと投げ出す」BASE マ
クロ。でもマクロができれば、手間を減らせる事 10 倍
です。何ができるのか確認しましょう
tried access converting, but it is for users who have past information
that is less frustrated.
本セミナーの対象バージョン
本セミナーは
LibreOffice : Ver 6 . 1 . 3
OS : Windows10 ー 64 ビット
で動作確認できた内容について話します。
他のバージョンや OS では、セミナー内容とは違う場
合がありますのでご了承ください。
ちなみに Ver6.1.3 の BASE ではレポートフッターにページや日付を挿入
しようとすると LibreOffice 本体がダウンします!
I will talk about contents that I can check the operation
Target version of this seminar
BASE ってどうなの?
1.どうなの?って?
・とにかく、情報が少なすぎる
・何ができて、なにができないのかわからない
2.BASE のユーザー数が少ない
・ Access-User ≧ BASE-User
・ユーザーが少ない = 情報も少ない
3.求められている情報は何か?
・ Access と同じことは如何にしてやれるのか
How can I do the same with Access?
What are the required information?
Anyway, too little information
We do not know what We can do and what We can not do
Few users, so little information
What about BASE?
What about ?
Access の構成と比べてみる
System Image
Access
テーブル (TABLE)
フ
ォ
ー
ム
Form
ク
エ
リ
ー
Query
レ
ポ
ー
ト
Report
フ
ォ
ー
ム
Form
BASE
ク
エ
リ
ー
Query
レ
ポ
ー
ト
Report
Firebird (TABLE)
DataSource
Writer
Firebird 埋込 Embedded→
BASE のマクロでできたこと
1.フォームの自動オープン
2.フォーム・レポートのオープン
3.レコードの移動
4.新規レコード画面の表示
5.特定コントロールへのフォーカス移動
6.フォーム値の SQL ・クエリーへの反映
7.テーブルインポート・エクスポート
8.クエリーのエクスポート
9.SQL のエクスポート
Automatic form open
Opening a form and report
Move Record
Display of New Record screen
Focus movement
Parameter query
Import / Export
Export Query
Export SQL
Can do with macro
MACRO の動作を見てみよう( Form )
1.フォームの自動オープン
2.フォーム・レポートのオープン
3.レコードの移動
4.新規レコード画面の表示
5.特定コントロールへのフォーカス移動
6.フォーム値の SQL ・クエリーへの反映
FormAutomatic form open
Opening a form and report
Move record
Display of new record screen
Focus movement
Parameter Query
※ フォームマクロはフォームにセットしたボタンに関連付けして利用
します、モジュールだけ流してもDrawpage の所でエラーになります。
Form macros are used in association with
buttons set in the form
MACRO の動作を見てみよう
1.テーブルインポート・エクスポート
2.クエリーのエクスポート
3.SQL のエクスポート
BASE には Access のようなインポート・エクスポート命令が用意されて
いません。
BASE does not have import / export instructions like Access.
Import / Export
Export Query
Export SQL
There is no example as it will be a very long description
記述が長いので例はありません。 ごめんなさい。
フォームの自動オープン Automatic form open
Sub Auto_FormOpen( )
Dim ObjectType As Variant
Dim FormMei As String
ObjectType = com.sun.star.sdb.application.DatabaseObject.FORM
FormMei = " 売上メイン MTF" ' 見かけのフォーム名(呼び名) Form Name
If ThisDatabaseDocument.FormDocuments.hasbyname(FormMei) Then
ThisDataBaseDocument.CurrentController.Connect()
ThisDatabaseDocument.CurrentController.loadComponent(ObjectType, FormMei, FALSE)
Else
MsgBox " 指定フォームが見つかりません。"& chr(13) & " フォーム名: " & FormMei &
chr(13) &" フォームの存在を確認ください! " ,16, " エラーです "
End if
End Sub
フォーム・オープンとクローズ
'***** フォームを開くマクロ例   *****  (開く) ボタンの「実行時」イベントに割り当てます。
Sub FormOpen
Dim oDoc As Object
oDoc = ThisDatabaseDocument
If oDoc.supportsService("com.sun.star.sdb.OfficeDatabaseDocument") = false Then
Exit Sub
End If
oDoc.FormDocuments.getByName("FRM_parameter").open()
End Sub
'***** フォームを閉じるマクロ例  ***** (閉じる)
Sub FormClose
Dim oDoc As Object
oDoc = ThisDatabaseDocument
If oDoc.supportsService("com.sun.star.sdb.OfficeDatabaseDocument") = false Then
Exit Sub
End If
oDoc.FormDocuments.getByName(" 売上メイン MTF").close()
End Sub
Opening a form and Close
レポート・オープン
'***** レポートを開くマクロ例 ******
Sub ReportOpen01
Dim oDoc As Object
oDoc = ThisDatabaseDocument
If oDoc.supportsService("com.sun.star.sdb.OfficeDatabaseDocument") = false Then
Exit Sub
End If
oDoc.ReportDocuments.getByName(" レポート名 ").open()
End Sub
Opening a Report
レコード移動
Sub Move_Record(FormName As String)
' レコードを移動する
Dim oForm As Object
'oForm = ThisComponent.Drawpage.Forms.getByName("MainForm")
oForm = ThisComponent.Drawpage.Forms.getByName(FormName)
' oForm.previous ' 前のレコードへ移動
oForm.Next ' 次のレコードへ移動
' oForm.first ' 最初のレコードへ移動
' oForm.Last ' 最後のレコードへ移動
End sub
‘Example
Sub GotoRec
call Move_Record("MainForm")
end sub
Move record
新規レコード画面の表示
Sub Move_New_Record(FormName As String)
' 新規入力レコードに移動する
Dim oForm As Object
'oForm = ThisComponent.Drawpage.Forms.getByName("MainForm")
oForm = ThisComponent.Drawpage.Forms.getByName(FormName)
oForm.moveToInsertRow
End sub
‘Example
Sub GotoNewRec
call Move_New_Record("MainForm")
end sub
Display of New Record screen
特定コントロールへのフォーカス移動
Sub Focuscontrol
Dim oDoc As Object
Dim oForm As Object
Dim oTxtControl As Object
oDoc = ThisComponent
oForm = oDoc.getDrawPage().getForms().getByName("MainForm")
oTxtControl = oDoc.getCurrentController().getControl(oForm.getByName("dat 売上計上日 "))
oTxtControl.setFocus()
End sub
Focus movement
フォーム値の SQL ・クエリーへの反映
Sub LikeTxt 'Fuzzy search
Dim pProp(1) As New com.sun.star.beans.PropertyValue
Dim oFilter as string
Dim oDoc As Object
Dim oDraw As Object
Dim oForm As Object
Dim oAConnection As Object
Dim oQueries As Object
Dim oQuery As Object
oDoc = ThisComponent.getParent()
oAConnection = oDoc.CurrentController.ActiveConnection
oDraw = ThisComponent.getDrawPage()
oForm = oDraw.getForms().getByName("FRM0002") '*** 「フォームの属性」での名前*** FormName is Confirm a Form Navigator
Dim kmoji as String '*** 検索文字列 *** Search string
kmoji = oForm.getByName("txtlike01").text '*** テキストボックスの値を変数に代入
oFilter = "SELECT * FROM ""TABLE_A1"" WHERE "" 名称 "" LIKE '" & "%" & kmoji & "%" & "'"
print oFilter 'Confirm a SQL
oQueries = oAConnection.getQueries()
If oQueries.hasByname("TxtLikeQuery") then '*** 変更するクエリー名 *** Query Name
oQuery = oQueries.getByname("TxtLikeQuery")
oQuery.command = oFilter
Else
msgbox " 変更するクエリーがありません。" & chr(10) & chr(10) & "TxtLikeQuery という名のクエリーを作成してください "
Exit sub
End if
End sub
Parameter Query
表示レコードの削除
Sub Delete_Record(FormName As String)
' 表示レコードを削除する
Dim oForm As Object
'oForm = ThisComponent.Drawpage.Forms.getByName("MainForm")
oForm = ThisComponent.Drawpage.Forms.getByName(FormName)
oForm.DeleteRow
'oForm.reload
End sub
‘Example
Sub Delete_RecP
' 削除モジュールの呼び出し
Dim Chkflg As String
Chkflg = MsgBox( " 表示しているレコードを削除しますか。" , 256 + 32 + 4 ," 確認 ")
If Chkflg = 6 Then
call Delete_Record("MainForm")
' call Move_New_Record("MainForm")
Else
MsgBox " 操作を中止します。"
Exit Sub
End If
End Sub
Delete Record
コンボボックスで選択に対応した値を返す
Sub Cbox_setvalue
' コンボボックスに対応した項目を隣のテキストボックスに表示する  vlookup 的な動作です
Dim sSql As String
Dim oDraw As Object
Dim oForm As Object
Dim oResult As Object
Dim sValue As String
Dim oTextbox2 As Object
oDraw=ThisComponent.getDrawPage()
oForm=oDraw.getForms().getByName("MainForm") 'form を指定
' 例では選択した数字に対応した人物名を隣のテキストに表示します
sSql ="select "" 名称 "" from "" 幕末人物 MT"" where "" 名簿 ID"" = '" &
oForm.getByName("combotext").text & "';"
oResult =
ThisDataBaseDocument.DataSource.getconnection("","").createstatement.executequery(sSql)
While oResult.next()
sValue = oResult.getString(1)
Wend
oTextbox2 = oForm.getByName( "name_txt01" )
oTextbox2.Text = sValue
End Sub
コンボボックスのデータソースを絞り込む
Sub Cbox_selection
' コンボボックス 1 の内容で次のコンボボックス 2 のデータソースを絞り込む
Dim pProp(1) As New com.sun.star.beans.PropertyValue
Dim oFilter as string
Dim oDoc As Object
Dim oDraw As Object
Dim oForm As Object
Dim oAConnection As Object
oDoc = ThisComponent.getParent()
oAConnection = oDoc.CurrentController.ActiveConnection
oDraw = ThisComponent.getDrawPage()
oForm = oDraw.getForms().getByName("MainForm") '*** 「フォームの属性」での名前***
oFilter = "SELECT "" 出身地 CD"", "" 出身藩 "", "" エリア ID"" FROM "" 出身地MT "" where
"" エリア ID"""
oFilter = oFilter & " = '" & oForm.getByName("combotext1").text & "';"
print oFilter
oForm.getByName("combotext2").ListSource = oFilter
oForm.getByName("combotext2").refresh
End sub
There is no time like the present!
今が最適時です!
さあ!これで
 あなたも BASE 使い!
~ Base Macro ?
 使ってみたことあるよ と言おう~
Let's say I've used it!
今日の講演を聞いたから
きっと大丈夫!!
There is no time like the present!
SlideShare にも色々上げてるから見てね!
I heard today's lecture
it must be no problem!
何かご質問はありませんか?
Base-M
Base-IM
Any questions?
In Japanese please
ご清聴ありがとうございました
CC-BY-SA4.0
thank you for your attention

Mais conteúdo relacionado

Mais procurados

「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
Takahiro Inoue
 
データベース技術の羅針盤
データベース技術の羅針盤データベース技術の羅針盤
データベース技術の羅針盤
Yoshinori Matsunobu
 

Mais procurados (20)

あなたのScalaを爆速にする7つの方法(日本語版)
あなたのScalaを爆速にする7つの方法(日本語版)あなたのScalaを爆速にする7つの方法(日本語版)
あなたのScalaを爆速にする7つの方法(日本語版)
 
ADRという考えを取り入れてみて
ADRという考えを取り入れてみてADRという考えを取り入れてみて
ADRという考えを取り入れてみて
 
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかDDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
 
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみようドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
 
Marp Tutorial
Marp TutorialMarp Tutorial
Marp Tutorial
 
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜
 
MLOpsの概要と初学者が気をつけたほうが良いこと
MLOpsの概要と初学者が気をつけたほうが良いことMLOpsの概要と初学者が気をつけたほうが良いこと
MLOpsの概要と初学者が気をつけたほうが良いこと
 
Databricksを初めて使う人に向けて.pptx
Databricksを初めて使う人に向けて.pptxDatabricksを初めて使う人に向けて.pptx
Databricksを初めて使う人に向けて.pptx
 
Swiftで、Webサーバにデータを送信・登録しよう!
Swiftで、Webサーバにデータを送信・登録しよう!Swiftで、Webサーバにデータを送信・登録しよう!
Swiftで、Webサーバにデータを送信・登録しよう!
 
Embulk 20150411
Embulk 20150411Embulk 20150411
Embulk 20150411
 
O/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐO/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐ
 
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
 
フーリエ変換と画像圧縮の仕組み
フーリエ変換と画像圧縮の仕組みフーリエ変換と画像圧縮の仕組み
フーリエ変換と画像圧縮の仕組み
 
オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門
 
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方
 
データベース技術の羅針盤
データベース技術の羅針盤データベース技術の羅針盤
データベース技術の羅針盤
 
概念モデリング再入門 + DDD
概念モデリング再入門 + DDD概念モデリング再入門 + DDD
概念モデリング再入門 + DDD
 
研究発表のためのパワーポイント資料作成の基本
研究発表のためのパワーポイント資料作成の基本研究発表のためのパワーポイント資料作成の基本
研究発表のためのパワーポイント資料作成の基本
 
MariaDBとMroongaで作る全言語対応超高速全文検索システム
MariaDBとMroongaで作る全言語対応超高速全文検索システムMariaDBとMroongaで作る全言語対応超高速全文検索システム
MariaDBとMroongaで作る全言語対応超高速全文検索システム
 

Semelhante a マクロでBASEを操作しよう BASE Let's operate with macros

Html5 Web Applications
Html5  Web ApplicationsHtml5  Web Applications
Html5 Web Applications
totty jp
 
Vue.jsでFormをAtomic Designしてみた時のコンポーネント間のデータのやりとり
Vue.jsでFormをAtomic Designしてみた時のコンポーネント間のデータのやりとりVue.jsでFormをAtomic Designしてみた時のコンポーネント間のデータのやりとり
Vue.jsでFormをAtomic Designしてみた時のコンポーネント間のデータのやりとり
Yuta Ohashi
 
TypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービューTypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービュー
Akira Inoue
 
2011年2月9日第130回FxUG勉強会@東京第一打者空振り三振
2011年2月9日第130回FxUG勉強会@東京第一打者空振り三振2011年2月9日第130回FxUG勉強会@東京第一打者空振り三振
2011年2月9日第130回FxUG勉強会@東京第一打者空振り三振
Sadao Tokuyama
 

Semelhante a マクロでBASEを操作しよう BASE Let's operate with macros (20)

Movable TypeのWebアプリケーションフレームワークの基本
Movable TypeのWebアプリケーションフレームワークの基本Movable TypeのWebアプリケーションフレームワークの基本
Movable TypeのWebアプリケーションフレームワークの基本
 
Sc2009autumn s2robot
Sc2009autumn s2robotSc2009autumn s2robot
Sc2009autumn s2robot
 
Html5 Web Applications
Html5  Web ApplicationsHtml5  Web Applications
Html5 Web Applications
 
Apexコアデベロッパーセミナー070726 配布用
Apexコアデベロッパーセミナー070726 配布用Apexコアデベロッパーセミナー070726 配布用
Apexコアデベロッパーセミナー070726 配布用
 
Ext.direct
Ext.directExt.direct
Ext.direct
 
Vue.jsでFormをAtomic Designしてみた時のコンポーネント間のデータのやりとり
Vue.jsでFormをAtomic Designしてみた時のコンポーネント間のデータのやりとりVue.jsでFormをAtomic Designしてみた時のコンポーネント間のデータのやりとり
Vue.jsでFormをAtomic Designしてみた時のコンポーネント間のデータのやりとり
 
jQuery超入門編
jQuery超入門編jQuery超入門編
jQuery超入門編
 
20130924 Picomon CRH勉強会
20130924 Picomon CRH勉強会20130924 Picomon CRH勉強会
20130924 Picomon CRH勉強会
 
ScalaMatsuri 2016
ScalaMatsuri 2016ScalaMatsuri 2016
ScalaMatsuri 2016
 
Apache Torqueについて
Apache TorqueについてApache Torqueについて
Apache Torqueについて
 
JavaScript入門
JavaScript入門JavaScript入門
JavaScript入門
 
ReduxとSwiftの組み合わせ:改訂版
ReduxとSwiftの組み合わせ:改訂版ReduxとSwiftの組み合わせ:改訂版
ReduxとSwiftの組み合わせ:改訂版
 
第4回REST勉強会 RequireJS編
第4回REST勉強会 RequireJS編第4回REST勉強会 RequireJS編
第4回REST勉強会 RequireJS編
 
現実(えくせる)と戦う話
現実(えくせる)と戦う話現実(えくせる)と戦う話
現実(えくせる)と戦う話
 
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825 Hokuriku.NET ASP.NET MVC入門 「実践」 20120825
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825
 
第4回Symfony2勉強会 基礎編ワークショップ.1
第4回Symfony2勉強会 基礎編ワークショップ.1第4回Symfony2勉強会 基礎編ワークショップ.1
第4回Symfony2勉強会 基礎編ワークショップ.1
 
Lt 111119
Lt 111119Lt 111119
Lt 111119
 
TypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービューTypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービュー
 
初めての Data api cms どうでしょう - 大阪夏の陣
初めての Data api   cms どうでしょう - 大阪夏の陣初めての Data api   cms どうでしょう - 大阪夏の陣
初めての Data api cms どうでしょう - 大阪夏の陣
 
2011年2月9日第130回FxUG勉強会@東京第一打者空振り三振
2011年2月9日第130回FxUG勉強会@東京第一打者空振り三振2011年2月9日第130回FxUG勉強会@東京第一打者空振り三振
2011年2月9日第130回FxUG勉強会@東京第一打者空振り三振
 

Mais de koutarou watanabe

Mais de koutarou watanabe (10)

Officeマクロ仕事で使う勘所
Officeマクロ仕事で使う勘所Officeマクロ仕事で使う勘所
Officeマクロ仕事で使う勘所
 
文系でも学んでおきたいOfficeマクロプログラミング
文系でも学んでおきたいOfficeマクロプログラミング文系でも学んでおきたいOfficeマクロプログラミング
文系でも学んでおきたいOfficeマクロプログラミング
 
LibreOffice運用心得の條
LibreOffice運用心得の條LibreOffice運用心得の條
LibreOffice運用心得の條
 
Libre office導入後の今を語る
Libre office導入後の今を語るLibre office導入後の今を語る
Libre office導入後の今を語る
 
Libre office導入してわかったこと
Libre office導入してわかったことLibre office導入してわかったこと
Libre office導入してわかったこと
 
Advice to LibreOffice migration Example in Fukuoka, Japan
Advice to LibreOffice migration Example in Fukuoka, JapanAdvice to LibreOffice migration Example in Fukuoka, Japan
Advice to LibreOffice migration Example in Fukuoka, Japan
 
LibreOffice導入へのアドバイス
LibreOffice導入へのアドバイスLibreOffice導入へのアドバイス
LibreOffice導入へのアドバイス
 
LibreOffice導入のポイント10
LibreOffice導入のポイント10LibreOffice導入のポイント10
LibreOffice導入のポイント10
 
LibreOffice導入で遭遇する事項と運用中に思うこと
LibreOffice導入で遭遇する事項と運用中に思うことLibreOffice導入で遭遇する事項と運用中に思うこと
LibreOffice導入で遭遇する事項と運用中に思うこと
 
実務で使えたLibreOffice
実務で使えたLibreOffice実務で使えたLibreOffice
実務で使えたLibreOffice
 

マクロでBASEを操作しよう BASE Let's operate with macros

  • 1. マクロで BASE を操る 記述あれこれ Dec 9 2018   8th 九州 Libreoffice 勉強会 LibreOffice BASE マクロで操作しよう Koutarou Watanabe CC-BY-SA4.0 Let's operate with macros Manipulate BASE with macros Description
  • 3. 講師紹介   ~ Lecturer Profiles ~ 渡 浩太郎(邊 Koutarou Watanabe ) 福岡市出身 某団体 2011 年 LibreOffice 導入時の メイン担当&マニュアル作成 + 苦情処理係 (現在はシステム担当ではありません) LibreOffice 日本語チーム( 2018/11 ~) 質問や悩み事等は直接本人まで! 今日もプライベート参加です このプレゼンは渡辺の個人的見解であり、所属団体の見解ではございません   
  • 4. Base User ≒ Access User Access コンバートやってみたけど、情報が少なくて 挫折した過去を持つユーザー向けです。 BASE のマクロで、これだけはできてほしいことの中 から、とりあえず動作したものを個人的判断で紹介す るものです。 大多数の人が「よくわからないと投げ出す」BASE マ クロ。でもマクロができれば、手間を減らせる事 10 倍 です。何ができるのか確認しましょう tried access converting, but it is for users who have past information that is less frustrated.
  • 5. 本セミナーの対象バージョン 本セミナーは LibreOffice : Ver 6 . 1 . 3 OS : Windows10 ー 64 ビット で動作確認できた内容について話します。 他のバージョンや OS では、セミナー内容とは違う場 合がありますのでご了承ください。 ちなみに Ver6.1.3 の BASE ではレポートフッターにページや日付を挿入 しようとすると LibreOffice 本体がダウンします! I will talk about contents that I can check the operation Target version of this seminar
  • 6. BASE ってどうなの? 1.どうなの?って? ・とにかく、情報が少なすぎる ・何ができて、なにができないのかわからない 2.BASE のユーザー数が少ない ・ Access-User ≧ BASE-User ・ユーザーが少ない = 情報も少ない 3.求められている情報は何か? ・ Access と同じことは如何にしてやれるのか How can I do the same with Access? What are the required information? Anyway, too little information We do not know what We can do and what We can not do Few users, so little information What about BASE? What about ?
  • 7. Access の構成と比べてみる System Image Access テーブル (TABLE) フ ォ ー ム Form ク エ リ ー Query レ ポ ー ト Report フ ォ ー ム Form BASE ク エ リ ー Query レ ポ ー ト Report Firebird (TABLE) DataSource Writer Firebird 埋込 Embedded→
  • 8. BASE のマクロでできたこと 1.フォームの自動オープン 2.フォーム・レポートのオープン 3.レコードの移動 4.新規レコード画面の表示 5.特定コントロールへのフォーカス移動 6.フォーム値の SQL ・クエリーへの反映 7.テーブルインポート・エクスポート 8.クエリーのエクスポート 9.SQL のエクスポート Automatic form open Opening a form and report Move Record Display of New Record screen Focus movement Parameter query Import / Export Export Query Export SQL Can do with macro
  • 9. MACRO の動作を見てみよう( Form ) 1.フォームの自動オープン 2.フォーム・レポートのオープン 3.レコードの移動 4.新規レコード画面の表示 5.特定コントロールへのフォーカス移動 6.フォーム値の SQL ・クエリーへの反映 FormAutomatic form open Opening a form and report Move record Display of new record screen Focus movement Parameter Query ※ フォームマクロはフォームにセットしたボタンに関連付けして利用 します、モジュールだけ流してもDrawpage の所でエラーになります。 Form macros are used in association with buttons set in the form
  • 10. MACRO の動作を見てみよう 1.テーブルインポート・エクスポート 2.クエリーのエクスポート 3.SQL のエクスポート BASE には Access のようなインポート・エクスポート命令が用意されて いません。 BASE does not have import / export instructions like Access. Import / Export Export Query Export SQL There is no example as it will be a very long description 記述が長いので例はありません。 ごめんなさい。
  • 11. フォームの自動オープン Automatic form open Sub Auto_FormOpen( ) Dim ObjectType As Variant Dim FormMei As String ObjectType = com.sun.star.sdb.application.DatabaseObject.FORM FormMei = " 売上メイン MTF" ' 見かけのフォーム名(呼び名) Form Name If ThisDatabaseDocument.FormDocuments.hasbyname(FormMei) Then ThisDataBaseDocument.CurrentController.Connect() ThisDatabaseDocument.CurrentController.loadComponent(ObjectType, FormMei, FALSE) Else MsgBox " 指定フォームが見つかりません。"& chr(13) & " フォーム名: " & FormMei & chr(13) &" フォームの存在を確認ください! " ,16, " エラーです " End if End Sub
  • 12. フォーム・オープンとクローズ '***** フォームを開くマクロ例   *****  (開く) ボタンの「実行時」イベントに割り当てます。 Sub FormOpen Dim oDoc As Object oDoc = ThisDatabaseDocument If oDoc.supportsService("com.sun.star.sdb.OfficeDatabaseDocument") = false Then Exit Sub End If oDoc.FormDocuments.getByName("FRM_parameter").open() End Sub '***** フォームを閉じるマクロ例  ***** (閉じる) Sub FormClose Dim oDoc As Object oDoc = ThisDatabaseDocument If oDoc.supportsService("com.sun.star.sdb.OfficeDatabaseDocument") = false Then Exit Sub End If oDoc.FormDocuments.getByName(" 売上メイン MTF").close() End Sub Opening a form and Close
  • 13. レポート・オープン '***** レポートを開くマクロ例 ****** Sub ReportOpen01 Dim oDoc As Object oDoc = ThisDatabaseDocument If oDoc.supportsService("com.sun.star.sdb.OfficeDatabaseDocument") = false Then Exit Sub End If oDoc.ReportDocuments.getByName(" レポート名 ").open() End Sub Opening a Report
  • 14. レコード移動 Sub Move_Record(FormName As String) ' レコードを移動する Dim oForm As Object 'oForm = ThisComponent.Drawpage.Forms.getByName("MainForm") oForm = ThisComponent.Drawpage.Forms.getByName(FormName) ' oForm.previous ' 前のレコードへ移動 oForm.Next ' 次のレコードへ移動 ' oForm.first ' 最初のレコードへ移動 ' oForm.Last ' 最後のレコードへ移動 End sub ‘Example Sub GotoRec call Move_Record("MainForm") end sub Move record
  • 15. 新規レコード画面の表示 Sub Move_New_Record(FormName As String) ' 新規入力レコードに移動する Dim oForm As Object 'oForm = ThisComponent.Drawpage.Forms.getByName("MainForm") oForm = ThisComponent.Drawpage.Forms.getByName(FormName) oForm.moveToInsertRow End sub ‘Example Sub GotoNewRec call Move_New_Record("MainForm") end sub Display of New Record screen
  • 16. 特定コントロールへのフォーカス移動 Sub Focuscontrol Dim oDoc As Object Dim oForm As Object Dim oTxtControl As Object oDoc = ThisComponent oForm = oDoc.getDrawPage().getForms().getByName("MainForm") oTxtControl = oDoc.getCurrentController().getControl(oForm.getByName("dat 売上計上日 ")) oTxtControl.setFocus() End sub Focus movement
  • 17. フォーム値の SQL ・クエリーへの反映 Sub LikeTxt 'Fuzzy search Dim pProp(1) As New com.sun.star.beans.PropertyValue Dim oFilter as string Dim oDoc As Object Dim oDraw As Object Dim oForm As Object Dim oAConnection As Object Dim oQueries As Object Dim oQuery As Object oDoc = ThisComponent.getParent() oAConnection = oDoc.CurrentController.ActiveConnection oDraw = ThisComponent.getDrawPage() oForm = oDraw.getForms().getByName("FRM0002") '*** 「フォームの属性」での名前*** FormName is Confirm a Form Navigator Dim kmoji as String '*** 検索文字列 *** Search string kmoji = oForm.getByName("txtlike01").text '*** テキストボックスの値を変数に代入 oFilter = "SELECT * FROM ""TABLE_A1"" WHERE "" 名称 "" LIKE '" & "%" & kmoji & "%" & "'" print oFilter 'Confirm a SQL oQueries = oAConnection.getQueries() If oQueries.hasByname("TxtLikeQuery") then '*** 変更するクエリー名 *** Query Name oQuery = oQueries.getByname("TxtLikeQuery") oQuery.command = oFilter Else msgbox " 変更するクエリーがありません。" & chr(10) & chr(10) & "TxtLikeQuery という名のクエリーを作成してください " Exit sub End if End sub Parameter Query
  • 18. 表示レコードの削除 Sub Delete_Record(FormName As String) ' 表示レコードを削除する Dim oForm As Object 'oForm = ThisComponent.Drawpage.Forms.getByName("MainForm") oForm = ThisComponent.Drawpage.Forms.getByName(FormName) oForm.DeleteRow 'oForm.reload End sub ‘Example Sub Delete_RecP ' 削除モジュールの呼び出し Dim Chkflg As String Chkflg = MsgBox( " 表示しているレコードを削除しますか。" , 256 + 32 + 4 ," 確認 ") If Chkflg = 6 Then call Delete_Record("MainForm") ' call Move_New_Record("MainForm") Else MsgBox " 操作を中止します。" Exit Sub End If End Sub Delete Record
  • 19. コンボボックスで選択に対応した値を返す Sub Cbox_setvalue ' コンボボックスに対応した項目を隣のテキストボックスに表示する  vlookup 的な動作です Dim sSql As String Dim oDraw As Object Dim oForm As Object Dim oResult As Object Dim sValue As String Dim oTextbox2 As Object oDraw=ThisComponent.getDrawPage() oForm=oDraw.getForms().getByName("MainForm") 'form を指定 ' 例では選択した数字に対応した人物名を隣のテキストに表示します sSql ="select "" 名称 "" from "" 幕末人物 MT"" where "" 名簿 ID"" = '" & oForm.getByName("combotext").text & "';" oResult = ThisDataBaseDocument.DataSource.getconnection("","").createstatement.executequery(sSql) While oResult.next() sValue = oResult.getString(1) Wend oTextbox2 = oForm.getByName( "name_txt01" ) oTextbox2.Text = sValue End Sub
  • 20. コンボボックスのデータソースを絞り込む Sub Cbox_selection ' コンボボックス 1 の内容で次のコンボボックス 2 のデータソースを絞り込む Dim pProp(1) As New com.sun.star.beans.PropertyValue Dim oFilter as string Dim oDoc As Object Dim oDraw As Object Dim oForm As Object Dim oAConnection As Object oDoc = ThisComponent.getParent() oAConnection = oDoc.CurrentController.ActiveConnection oDraw = ThisComponent.getDrawPage() oForm = oDraw.getForms().getByName("MainForm") '*** 「フォームの属性」での名前*** oFilter = "SELECT "" 出身地 CD"", "" 出身藩 "", "" エリア ID"" FROM "" 出身地MT "" where "" エリア ID""" oFilter = oFilter & " = '" & oForm.getByName("combotext1").text & "';" print oFilter oForm.getByName("combotext2").ListSource = oFilter oForm.getByName("combotext2").refresh End sub
  • 21. There is no time like the present! 今が最適時です! さあ!これで  あなたも BASE 使い! ~ Base Macro ?  使ってみたことあるよ と言おう~ Let's say I've used it!
  • 22. 今日の講演を聞いたから きっと大丈夫!! There is no time like the present! SlideShare にも色々上げてるから見てね! I heard today's lecture it must be no problem!