2016-04-08 14 views
0

ユーザーが昇順または降順に並べ替えることができる単純なデータグリッドを表示するサブフォームがあります。それぞれ二つの異なるコンボボックスによって提供され、このコンテキストcombobox_1_valueとcombobox_2_valueで並べ替え時にパラメータ化されたクエリが再評価される

Dim query  As DAO.QueryDef 
Dim recordSet As DAO.Recordset 

Set query = CurrentDb.QueryDefs("DatagridQuery") 
query.Parameters("one").Value = combobox_1_value 
query.Parameters("two").Value = combobox_2_value 
Set recordSet = query.OpenRecordSet 
Set Me.subform.From.Recordset = recordSet 

:そのDataGridの

データは、データグリッドのレコードを設定するパラメータ化クエリを使用してリフレッシュ機能によって提供され親の形で

現在、問題は、sortまたはfilterプロパティが設定されるたびに、データグリッドが基本クエリを再評価して、コンボボックス値からパラメータ値を取得するのではなく、手動パラメータ入力を促すことです。

私のコンボボックスの値をクエリのパラメータにバインドしたり、並べ替えやフィルタリングの関数をオーバーライドして、レコードセットのソートを直接vbaに実装できる方法はありますか?

答えて

0

レコードセットを(再)設定すると、フォームは常に再クエリーされます。それはのOrderByプロパティの並べ替えのために

Me!subform.Form.Filter = "[SomeField] = somevalue" 
Me!subform.Form.FilterOn = True 

:あなたは何ができるか

は、フォームのフィルタープロパティを設定することです

Me!subform.Form.OrderBy = "[SomeField] Asc" 
Me!subform.Form.OrderByOn = True 
+0

私は間違っていない場合、それはDataGridからソートイベントをキャッチしません。 – narain

+0

UIでの並べ替えはクエリーしません。それがあなたが見るものなら、何か他のことが起こっています。 – Gustav

+0

それは私が持っている問題です。列を選択して昇順または降順に並べ替えると、基になるクエリが再評価されます。 – narain

0

私は明らかに解決策を見つけました実行時間が長くなります。

私は、クエリパラメータとしてグローバル関数を使用するには、サブフォームのクエリを書き換えています

Public Function GetComboboxValue() 
    GetComboboxValue = Forms!Form1!Combobox.Value 
End Function 

対応するクエリは、このようになります:私は設定しているほか

SELECT * FROM sampleTbl 
WHERE ForeignID = GetComboboxValue() 

コンボボックスのafterUpdateEventサブフォームをクエリーする:

Private Sub combobBox_AfterUpdate() 
    Me.subform.Requery 
End Sub 

thi私の望む通りに動作しますが、クエリのパラメータ化が正しく機能しないようです。明らかに、クエリはクエリされたテーブルからすべてのレコードを返し、レコードセットを後でフィルタリングします。

+0

サブフォームコントロールの 'MasterLinkFields'と' ChildLinkFields'プロパティーを子のmasterとForeignIDのためのcombox値で使う方がはるかに簡単です。 – Gustav

関連する問題