「Web出版サイト」ベータ公開

Q&A集[?]

当サイトでのご質問の受付は終了しました

すべてのコンテンツを読み込み専用としたため、回答欄からも投稿できません

Apache OpenOffice/LibreOfficeのご質問はそれぞれのフォーラムへご投稿ください

質問コーナー

サイト内検索

分類メニュー

関連サイト


本日:2
昨日:0
総数:2713
現在:4


Baseマクロ(OOo Basic)のSQLについて

ページOpenOffice.org FAQの登録ページ
投稿者new_OOo3
分類
edit/refer
優先順位
edit/refer
状態
edit/refer
カテゴリー
edit/refer
投稿日2010-03-11 22:57:41 (木)
OSWindowsXP
依存するページ
バージョン
edit/refer

メッセージ

回答ページでは行末に「~」を付加する必要はありません

お世話になります。
現在、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を修正しましたところ上手く動作しました。

お名前:
題名:


添付ファイル: fileoBase_test2.odb 551件 [詳細]