Baseマクロ(OOo Basic)のSQLについて †
ページ | OpenOffice.org FAQの登録ページ |
---|---|
投稿者 | new_OOo3 |
分類 | |
優先順位 | |
状態 | |
カテゴリー | |
投稿日 | 2010-03-11 22:57:41 (木) |
OS | WindowsXP |
依存するページ | |
バージョン |
メッセージ †
回答ページでは行末に「~」を付加する必要はありません |
お世話になります。
現在、Baseのtableからデータ抽出を行うマクロをOOo Basicにて作成しております。
しかしながら、SQL文(SELECT文)にWHERE等のOptionを追加すると「Queryエラー」との内容のエラーメッセージが表示されます。
以下にコードの一部を記します。
******** マクロコード抜粋 ************
option Base 1 Sub oBase_Query2 Dim db As Object Dim oBase as String oBase ="Macro_JavaScript_Base1" db = connect_to_database(oBase) simple_query(db) disconnect_from_database(db) End Sub Sub disconnect_from_database ( db as Object) db.close db.dispose() End Sub Sub simple_query(db as Object) Dim oSql As String Dim i As Integer Dim oRowSet As Object Dim oResult As String oSql = "SELECT " & " " & "*" & " " & "FROM" & " " & "JavaScript_table1" & " " & "WHERE" & " " & "publish=:check" oRowSet = createUnoService("com.sun.star.sdb.RowSet") With oRowSet .activeConnection = db .Command = oSql .execute '←本行にてError Stopします。 End With While oRowSet.Next oResult = oResult & oRowset.getString(1) & " " _ & oRowset.getString(2) & " " _ & oRowset.getString(3) & " " _ & oRowset.getString(4) & " " _ &chr(13) wend msgbox oResult,,"Macro_Query" End Sub
***********************************************
oSql = "SELECT " & " " & "*" & " " & "FROM" & " " & "JavaScript_table1" & " " & "WHERE" & " " & "publish=:check"
を
oSql = "SELECT " & " " & "*" & " " & "FROM" & " " & "JavaScript_table1"
に変更しますと問題無く実行します。
つきましては、マクロにてQueryを実行する際には「SELECT * FROM *」以外のコマンド(WHERE、CASE等)は使えないのでしょうか?
使えるとすれば、記述方法をご教示頂けます様お願いします。
パラメータクエリでしょうか †
M.Kamataki (2010-03-12 00:16:06 (金))
たぶんパラメータクエリを利用されたいのだと思います。あってます?
で、残念ながらパラメータクエリはマクロでは利用できません。Baseはほぼデータベースエンジンの機能を利用していますが、唯一と言ってもよいBaseの機能がパラメータクエリです。publish=:checkではなく、実データで試していただけますか。
申し訳ございません。fileをご見聞頂けます様お願いします。 †
new_OOo3 (2010-03-13 16:25:08 (土))
お世話になっております。
本当に申し訳ございませんが「パラメータクエリ」について当方の知識不足と検索スキル不足の為に良く理解出来ておりません。
私としましては特別な「クエリ」を使っているという認識は無く、ご回答頂きました「実データ」という言葉の意味も理解出来ていない始末です。
そこで、本当に申し訳ございませんが問題のfileを添付致しますのでご確認の上、ご意見を頂けます様お願いします。
WHERE句を含む指定 †
M.Kamataki (2010-03-13 22:48:43 (土))
「実データ」というのは、テーブルに格納されている実際に含まれるデータのことでした。ちょっと言葉足らずだったかもしれません。WHERE句を使ってpublishフィールドに「oPublish2」が含まれているレコードを抽出するなら以下のようにSQL文を指定すれば動作します。oSql = "SELECT * FROM table1 WHERE publish = 'oPublish2' ;"なお、最近は日本語のテーブル、フィールド名でも「"(ダブルクォーテーション)」で囲まなくても良いようです。(3.2.0で確認、いつからだろ)
マクロで利用できるSQLは、HSQLDBが備えているものしか利用できません。「publish = :c」のようなクエリーの条件指定は、HSQLDBのSQLドキュメントには含まれていません。これは、Baseの機能として用意されたものなので、Baseのクエリーデザインの上でしか使えないものなのです。
パラメータクエリについて †
M.Kamataki (2010-03-14 23:55:09 (日))
クエリーデザインでのパラメータクエリですが、条件欄に例えば、「= :チェック」などと設定すると、クエリー実行時に「チェック」というパラメータの値の入力を促すダイアログが表示されます。オンラインヘルプのクエリーの項目に詳細な説明があります。
このパラメータクエリは、Baseのクエリーの機能なので、SQLとしては受け付けてくれず、結果マクロでは利用できません。OpenOffice.orgのコミュニティフォーラムでは、以下のように「input」文での対応方法が紹介されています。
[Solved] Parameter query in macro?
http://user.services.openoffice.org/en/forum/viewtopic.php?f=61&t=15923
なお、パラメータとして利用できる英数字には、SQLのコマンドは利用できないという制約があります(この件、調べてました)。したがって、「publish」フィールドの条件欄には、「= :check」とか「= :select」などとは指定できません。
解決しました。ありがとうございました。 †
new_OOo3 (2010-03-16 20:21:21 (火))
M.Kamataki 様
丁寧なご回答を頂きましてありがとうございました。
ご回答頂いた通りにCodeを修正しましたところ上手く動作しました。