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

Q&A集[?]

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

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

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

質問コーナー

サイト内検索

分類メニュー

関連サイト


本日:1
昨日:0
総数:2063
現在:3


リレーションをしているコンボボックスの絞込みについて

ページOpenOffice.org FAQの登録ページ
投稿者ホルヘ
分類
edit/refer
優先順位
edit/refer
状態
edit/refer
カテゴリー
edit/refer
投稿日2010-04-09 11:54:06 (金)
OSWindowsXP
依存するページ
バージョン
edit/refer

メッセージ

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

初めまして、よろしくお願い致します。
ファイルメーカーで作成をしておりました会社一覧(住所録)を、OpenOfficeにて作成を試みている所です。
(ファイルを添付させていただきます)

faq/4/976にて紹介のありました、コンボボックスを使った絞込みを作成しようとしたのですが、どうも上手く行きません。
メインテーブルとは別に「職種テーブル」を設けメインとリレーションし、リストボックスにて選択出来るようにしてあります。
なお、職種フィールドは5つあるのですが、絞込みは一つ目の職種だけで行いたいのです。
リレーションをしているためか、上手く動かず、どの様にマクロを編集したら良いか分かりません。。。
よろしくお願い致します。


こんな感じでしょうか

ike@九州 (2010-04-09 17:01:23 (金))

職種1 = 職種ID のFilterを求めないといけないので

Sub NewTitleSelected(oEvent)
 On Error Goto ErrorHandler  
 oForm = oEvent.Source.getModel().getParent()
 oListBox = oForm.getByName("リストボックス 1")
 sItem = oListBox.StringItemList(oListBox.SelectedItems(0))
 sSQL = "SELECT ""職種ID"" FROM ""職種テーブル"" WHERE ""職種項目"" = '" & sItem & "'"
 oDBConnection = oForm.ActiveConnection
 oStatement = oDBConnection.createStatement()
 oSet = oStatement.executeQuery(sSQL)
 oSet.next() 
 nID = oSet.getInt(1)
 oForm.Filter = """職種1"" = " & nID & ""
 oForm.ApplyFilter = True
 oForm.reload()
ErrorHandler:  
End Sub

他に方法ありましたら宜しくです

さすが

M.Kamataki (2010-04-09 17:35:05 (金))

「リストボックス 1」のイベントの「実行時」に割り当てて動作を確認しました。

一応、「リストボックス 1」は非連結コントロールにしておくべきだと思うので、下図のように「属性 リストボックス」ダイアログの「ダータ」タブの「データフィールド」欄は空欄にしておきましょう。

faq5_321_01.jpg

いろいろ整理 その1

M.Kamataki (2010-04-09 17:45:51 (金))

Baseについて、いろいろと誤解されている点があると思います。わたしからはこの点を。

ご質問で「リレーション」と書かれているのは、サンプルの 会社一覧.odb を拝見する限り、「リレーションシップ」のことを差していらっしゃるようです。

「リレーションシップ」では、テーブルの関係性を設定できます。会社一覧.odb では、「職種テーブル」と「メインテーブル」の「リレーションシップ」は「1対n」ですので、「職種テーブル」が上位で「メインテーブル」が下位に当たります。

この関係を利用してBaseではサブフォームを作成できます。フォームウィザードで、「1.フィールドの選択」で「職種テーブル」を選ぶと、下図のように「2.サブフォームの設定」で「既存のリレーションに基づいたサブフォーム」欄で「メインテーブル」を選べるようになります。

faq5_321_02.jpg

このように作成したものは、「職種テーブル」で「メインテーブル」の絞り込みができるサブフォームになりますが、たぶんホルヘさんがお望みのものではないでしょうね。

どんな時に利用するかというと、「リレーションシップ」では、上位テーブルの変更を下位テーブルに反映させるという設定を行えます(標準では無効)。例えば、上位テーブルの「職種テーブル」でレコードを削除すると、「メインテーブル」の内容もそれと矛盾しないようレコードが削除されます。

「リレーションシップ」については、Googleなどで調べてください。

いろいろ整理 その2

M.Kamataki (2010-04-09 17:52:32 (金))

連結コントロールと非連結コントロールの違いにも気を付けましょう。

会社一覧.odb では、すべてのリストボックスが連結コントロールとして、「メインテーブル」のフィールドが割り当てられています。この場合のリストボックスは、「メインテーブル」のフィールドへのデータ入力に使われます。

この割当を解除して、非連結コントロールにし、マクロを割り当てて絞り込みができるようにする、というのが、Base での流れです。

「非連結コントロール」をキーワードに、Googleで調べると、Accessの例などが見つかると思います。

Re: さすが

M.Kamataki (2010-04-09 18:00:53 (金))

サンプルのフォームの場合は、絞り込まれている値として表示されるので、「連結コントロール」のままでも良いかもしれませんね。

ただ、マクロを割り当てていない「連結コントロール」は、絞り込みには利用できません。操作すると意図しないデータが入力される恐れがありますので注意してください。

ありがとうございました!

ホルヘ (2010-04-12 08:59:45 (月))

ike@九州さん、M.kamatakiさん、早くにご返答を頂いたにも関らず
お礼が遅くなりまして申し訳ございません。


ike@九州さんに作成していただいたマクロにて、私の希望通りに動きました!ありがとうございました!!

M.kamatakiさん、まだまだ私の勉強不足ですね。
Base(データベース)を理解せぬまま進んできてしまったようです。。
再度ガイドブックを読み直し、またご指摘のありました箇所も調べてみます。
ありがとうございました。また何かありましたらその際はよろしくお願い致します。

お名前:
題名:


添付ファイル: filefaq5_321_02.jpg 443件 [詳細] filefaq5_321_01.jpg 432件 [詳細] file会社一覧.odb 532件 [詳細]