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