検索ダイアログ

  呼び出し側



テキストボックスリストボックスボタンを用意します。テキストボックスとリストボックスは、編集ロックしておきます。検索結果でのみデータをセットする為です。検索機能的には、ボタンは一つでかまいませんが、編集ロックされているのでクリアボタンは必要でしょう

ボタンのクリックイベントで以下のコードを実行します

  
DoCmd.OpenForm "フォーム名", , , , , acDialog, Me.Name & ":txtコード"
Me.lst名称.Requery
  

フォーム名は、ダイアログとなるフォームです。acDialog によってモーダルダイアログとして呼び出されます。これによって、このフォームは呼び出し側が最大化されていても最大化されません。Me.Name & ":txtコード" はダイアログに渡す引数となります

Requery は、コードフィールドにダイアログ側でデータをセットする為、そのコードを元に名前を再検索させて表示します。この為、リストボックスが都合よい事になります(列数は1で、もちろん非連結です)。値集合ソースで以下のように記述されています

  
SELECT テーブル名.名称
FROM テーブル名
WHERE (((テーブル名.コード)=[Forms]![呼び出し側フォーム名]![txtコード]));
  

クエリを作成する事はできるだけ避けるよう心がけて下さい。後の管理が大変だからで、
可能な限り他の方法を考えたほうが結果的に応用の効く結果となります



  ダイアログ側



フォームヘッダのみ使います。コントロールは、検索文字列入力用のテキストボックスと検索実行用のボタンと、検索表示するリストボックスです。Access のリストボックスは、カラム分割できるので検索結果表示にはもってこいです。

例えば列数は 4 で、列幅は 1.806cm;6cm;2cm;6cm に対して、値集合ソースは以下のようになっています

  
SELECT テーブル名.コード, テーブル名.名称, テーブル名.郵便番号, テーブル名.住所1
FROM テーブル名
WHERE (((テーブル名.名称) Like "*" & [Forms]![ダイアログのフォーム名]![txt検索名称] & "*"));
  

ダイアログ表示と同時に、全てのデータが表示対象となります。初期になにも表示しない場合は値集合ソース(RowSource)
へのセットを検索ボタンクリックイベントで行います。その場合は、Requery が必要なくなります

検索ボタンのクリックイベントでは、リストボックスを Requery するたけです。

DblClick イベントで、以下のようにして呼び出し側のテキストボックスに値をセットします

  
    Dim nIdx, strArg

    nIdx = Me.lst検索情報.ItemsSelected.Item(0)
    
    If Me.OpenArgs <> "" Then
    
        strArg = Split(Me.OpenArgs, ":")
        
        If UBound(strArg) = 1 Then
            Forms(strArg(0)).Controls(strArg(1)).Value = Me.lst検索情報.Column(0, nIdx)
        End If
        
        DoCmd.Close , , acSaveNo

    End If
  










  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ