* Baseマクロ(OOo Basic)のSQLについて [#nb80f226]
 |RIGHT:|LEFT:|c
 |~ページ|[[OpenOffice.org FAQの登録ページ]]|
 |~投稿者|new_OOo3|
 |~分類|#listbox3(Q&A,faq03,class)|
 |~優先順位|#listbox3(普通,faq03,priority)|
 |~状態|#listbox3(完了,faq03,state)|
 |~カテゴリー|#listbox3(Base データベース,faq03,category)|
 |~投稿日|2010-03-11 22:57:41 (木)|
 |~OS|WindowsXP|
 |~依存するページ||
 |~バージョン|#listbox3(3.2.0,faq03,version)|
 
 //////////バグ対策(以降マッチさせない)
 
 ** メッセージ [#ie5bdc58]
 |LEFT:|c
 |回答ページでは行末に「~」を付加する必要はありません|
 お世話になります。~
 現在、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等)は使えないのでしょうか?~
 使えるとすれば、記述方法をご教示頂けます様お願いします。
 
 ----
 ***パラメータクエリでしょうか [#pf1566a4]
 >M.Kamataki (2010-03-12 00:16:06 (金))~
 ~
 たぶんパラメータクエリを利用されたいのだと思います。あってます?~
 ~
 で、残念ながらパラメータクエリはマクロでは利用できません。Baseはほぼデータベースエンジンの機能を利用していますが、唯一と言ってもよいBaseの機能がパラメータクエリです。~
  publish=:check
 ではなく、実データで試していただけますか。~
 
 //
 ***申し訳ございません。fileをご見聞頂けます様お願いします。 [#v569e126]
 >new_OOo3 (2010-03-13 16:25:08 (土))~
 ~
 お世話になっております。~
 本当に申し訳ございませんが「パラメータクエリ」について当方の知識不足と検索スキル不足の為に良く理解出来ておりません。~
 私としましては特別な「クエリ」を使っているという認識は無く、ご回答頂きました「実データ」という言葉の意味も理解出来ていない始末です。~
 そこで、本当に申し訳ございませんが問題のfileを添付致しますのでご確認の上、ご意見を頂けます様お願いします。~
 
 //
 ***WHERE句を含む指定 [#n396d90a]
 >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のクエリーデザインの上でしか使えないものなのです。~
 
 //
 ***パラメータクエリについて [#j77059a7]
 >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」などとは指定できません。~
 
 //
 ***解決しました。ありがとうございました。 [#m20f8d22]
 >new_OOo3 (2010-03-16 20:21:21 (火))~
 ~
 M.Kamataki 様~
 ~
 丁寧なご回答を頂きましてありがとうございました。~
 ご回答頂いた通りにCodeを修正しましたところ上手く動作しました。~
 
 //
 #article