2017-04-19 15 views
0

クエリのデータシートビューを表示するサブフォームを含むフォームがあります。メインフォームには、クリックするとクエリのSQLが修正されるボタンがあります。ボタンをクリックすると、クエリが予想どおりに改訂されますが、メインフォームを閉じて再度開くまで、サブフォーム内の結果は更新されません。クエリ定義が更新されたときにフォームがリフレッシュされない

私はサブフォームとメインフォームを再クエリーしようとしました。私はサブフォームとメインフォームを更新しようとしました。私は2つのさまざまな組み合わせを試してみましたが、メインフォームを閉じたり開いたりすることを除いて、サブフォームに表示されるデータは更新されません。

洞察や提案はありますか?

これはメインフォームにあるコードで、ボタンをクリックすると実行されます。

Dim f as Form 
    Set f = Me.frm_Subform.Form 

    ' Update the query def 
    Dim sSQL As String 
    Dim sqlArray As Variant 
    sSQL = CurrentDb.QueryDefs("myQuery").SQL 
    sqlArray = Split(sSQL, "ORDER BY") 
    sSQL = Left(sqlArray(0), Len(sqlArray(0)) - 3) 
    sSQL = sSQL & " AND (STAFF.FULLNAME <> 'JOHN DOE') " 
    sSQL = sSQL & "ORDER BY" & sqlArray(1) 
    CurrentDb.QueryDefs("myQuery").SQL = sSQL 

    ' Refresh the subform 
    F.Requery 
    Me.Requery 
    F.Refresh 
    Me.Refresh 
    F.Repaint 
    Me.Repaint 
+0

クエリを変更してリフレッシュ/再クエリを行うと、サブフォームのデータが更新されない理由は誰にも分かります。 – shoegazer100

答えて

1

なぜクエリを変更しますか?ソート順を変更するだけですか?データシートビューのフォームセットを構築し、DoCmd.SetOrderByを使用してのOrderByプロパティに並べ替え条件を適用するか、

Me.OrderByOn = False  
Me.OrderBy = "your criteria" 
Me.OrderByOn = True 

そして、あなたは、動的[並べ替えと同様のフィルタ条件、利用コードを適用したい場合。

+0

返信いただきありがとうございますが、私はソート順を変更するだけではありません。 STAFF.FULLNAME <> 'JOHN DOE'は、実際の名前がユーザーが選択した内容に依存するクエリーに追加されるものです。ユーザー入力に基づいてクエリから除外する必要がある特定の名前があります。 – shoegazer100

+0

改訂版の回答を参照してください。 – June7

+0

私を正しい方向に向けてくれてありがとう。最終的に私はフィルターのプロパティを使用しました。なぜなら、実際には並べ替えは必要ないからです。 'F.Filter = "STAFF.FULLNAME <>' JOHN DOE 'F.FilterOn = True' – shoegazer100

関連する問題