4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

LibreOffice BASE は使えるか? (2) マクロで、SQL実行

Posted at

SQLデータベースを実際に扱うと、いろんなSQL文をつくる必要があります。
そのSQL文の中にはなんども使うものもあれば、たまにしかつかわないものもあります。SQLデータベースには、操作画面を提供するアプリケーションがいくつもありますが、カスタマイズをするのは結構面倒です。
そこで、Base をつかって、用途限定されていてつかいやすい。データ操作用の画面を簡単に作れないかを模索しています。

まずは、簡単に、SQL実行できるマクロをつくりました。


環境

  • OSなんでも
  • LibreOffice 4.4.7でつくりましたが、他のバージョンでも大丈夫でしょう。

sql 実行だけ

組み込みDBのHSQLDB用のマクロです。
関数名は、動詞+目的語 で snake case でつくっています。
(この辺りは、好みがあるのでお好きに変更してください)
このマクロを使う場合には、他のマクロから呼び出してつかいます。
マクロエディタの中からでも、実行できます。
Thiscomponent.parent... という指定も見かけますが、この指定だと
フォームのボタンからしか、実行できません。

エラーや戻り値の処理はこれから考えます。

外部DBを指定しているときは、
getconnection("","") を変更する必要ありです。

' sql 実行
sub do_sql(sql as string)
'msgbox(sql)
oresult = ThisDataBaseDocument.DataSource.getconnection("","").createstatement.executequery(sql)
end sub

sqlの指定は、下記のように書きます。ダブルコーテーションで囲むので
その中で、ダブルコーテーション を使う場合には、"" と書きます。

sql ="update ""hoge"" set ""hoge_name""='xxxx' "

count だけ返す関数

データが何件あるかだけを返す関数です。実際に、データを扱っていると全文で何件あるかというのは重要な情報です。
select 文の from 以降を送り込むと実行して結果を返してきます。

' count
function get_sql_count( condition as string)
sql = "select count(*) from "& condition
oresult = ThisDataBaseDocument.DataSource.getconnection("","").createstatement.executequery(sql)
oresult.next
get_sql_count = oresult.getstring(1)
end function
4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?