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

Q&A集[?]

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

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

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

質問コーナー

サイト内検索

分類メニュー

関連サイト


本日:2
昨日:0
総数:2196
現在:3


マクロを利用したBaseのフォームの検索方法について

ページOpenOffice.org FAQの登録ページ
投稿者GAKU
分類
edit/refer
優先順位
edit/refer
状態
edit/refer
カテゴリー
edit/refer
投稿日2010-04-29 06:39:15 (木)
OSWindows XP
依存するページfaq/4/976
バージョン
edit/refer

メッセージ

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

いつもお世話になっております。
Baseを使ってイベントの参加者データを管理しています。
faq/4/976を参考に、フォームから氏名を入力し、テーブルを検索する処理を作っています。
sample3.odbを添付しています。

参加者マスターテーブルの氏名フィールドには「中村 洋子」のように、姓と名の間に空白が入っています。
登録フォームで、「中村 洋子」と入力し、検索ボタンをクリックすると、空白の前にある姓だけで検索されているようで、参加者マスターテーブルにある「中村 三郎」「中村 花子」「中村 洋子」の3件がヒットし、参加者マスターテーブルの先頭に近い「中村 三郎」がまず表示されてしまいます。
次のレコードボタンをクリックすると、「中村 花子」「中村 洋子」が順番に表示されます。
姓と名の間に空白があっても、姓名で検索し、「中村 洋子」だけを表示することはできますでしょうか?

また、前回検索した時の情報が次に登録フォームを開いた時に自動的に表示されてしまうことがあります。
一度表示されるようになると、毎回同じ情報が表示されます。
何も表示されないように改善できますでしょうか?

よろしくお願いいたします。


無題

ike@九州 (2010-04-29 12:15:38 (木))

sSearchStr = oForm.getByName( "検索氏名" ).string
を、以下に変更してください
sSearchStr = oForm.getByName( "検索氏名" ).text

フィルターの解除をマクロの記録で取得(実際やってみましょう)

sub Main
dim document   as object
dim dispatcher as object
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:RemoveFilterSort", "", 0,  Array())
end sub


フォームの編集から
ツール>カスタマイズ>イベントタブ
保存先がフォームになっているのを確認して "文書を開いたとき" に上記マクロを割り当てるとフィルターリセットが出来ます

勘違いと思われる点

M.Kamataki (2010-04-29 13:57:24 (木))

わたしも「String」->「Text」かな、と思ってたところで ike@九州さんの回答がありました。ありがとうございます。

上記のようにコーディングミスですので、今回の問題の原因が名前に空白が含まれているとのお考えは勘違いだったことになります。GAKUさんの確認が取れたら、わかりやすいようにタイトルを変更したいと思います。

なお、フォームを編集モードで開くとわかりますが、テキストボックスに「中村」と入力済みでした。特に文字列は何でも構わないのですが、この2文字の入力も原因でした。たとえば「佐々木」などと入力するとフィルタに渡される文字列が「佐々」になっていたのです。「中村」ではなく「あいうえお」と入れ替えてみたら、「中村 洋子」で検索できましたよ。 :)

あと、これは意図したことか確認したいのですが、MainFormの「フォーム属性」を見るとフィルタ欄の設定が「"氏名" LIKE '*中村 伸一郎*'」となっていました。この設定は意図したものでしょうか。

もし、フォームを開いた際に個人情報欄に何も表示させないよう、上記のフィルタ欄の設定を行っているのでしたら、これから入力される可能性のあるデータをお使いになるのではなく、単純に「"氏名" LIKE ''」で良いのでは、と思いました。

>また、前回検索した時の情報が次に登録フォームを開いた時に自動的に表示されてしまうことがあります。
>一度表示されるようになると、毎回同じ情報が表示されます。
>何も表示されないように改善できますでしょうか?

これですが、フォームを編集されている際、「デザインモード オン/オフ」ボタンで一時的に編集状態をオフにし、テストなどを行った後、そのまま保存すると、上記で説明した「フォーム属性」のフィルタ欄の設定として保存されてしまいす。たぶんこのような操作を行ったのではないかと思います。「"氏名" LIKE '*中村 伸一郎*'」というフィルタ設定は、意図した結果ではなさそうな気がしますので。

ありがとうございます。

GAKU (2010-04-29 16:51:31 (木))

ike@九州さま、M.Kamatakiさま

回答ありがとうございます。
コーディングミスだったんですね。理解不足でした。
フィルタ設定も「デザインモード オン/オフ」ボタンで一時的に編集状態をオフにし、テストしたためで、意図的に氏名をフィルター設定するものではありません。
ご指摘通り、「"氏名" LIKE ''」と変更し、フィルター解除のマクロを割り当てることで、意図する結果が得られました。

質問のタイトルをどのように変更すれば適切かわかりかねますので、適切なタイトルをつけていただき、完了としていただくようお願いいたします。

タイトルを変え完了しました

M.Kamataki (2010-04-29 18:06:44 (木))

コメントありがとうございます。

お名前:
題名:


添付ファイル: filesample3.odb 639件 [詳細]