2017-11-30 10 views
1

私は現在Access 2007を実行しています。ユーザーがパラメータを設定できるようにするレポートマネージャがあります。日付をカスタマイズし、変更する必要のある日付フィールドを選択することができます(時間の変更、時間の変更、txndate)。レポートの側面は完全に機能します。フィルタプロパティをレポートに渡してそのフィルタに基準を追加する方法(アクセス)

レポート内では、レポートの本文をダブルクリックすると、「大きな画像」サマリーから詳細レポート(totalshipped詳細)に移動します。 基本的には、正常に動作するためには、totalalshippedの日付と本文の顧客名(ダブルクリック時)が表示されます。ここで私が試したものの一例である:

Private Sub ftrReport_DblClick(Cancel As Integer) 

DoCmd.OpenReport "TotalShippedDetailed", acViewReport, "", me.filter 

End Sub 

レポートが正常に開き、totalshipped詳細レポートにフィルタ特性(日付)を渡し、問題は、私は[customerref_fullname]を参照する必要があるということです(私はこのラインを使用してやっていただけでなく、顧客が):

[reports]![TotalShipped]![customerref_fullname] = [customerref_fullname] 

これは、顧客への参照として機能しますが、私はcustomerref_fullnameを参照してme.filterプロパティを結合する必要があり、エラーが発生したときにI試してください:

Private Sub ftrReport_DblClick(Cancel As Integer) 

    DoCmd.OpenReport "TotalShippedDetailed", acViewReport, "", me.filter & _ 
    [reports]![TotalShipped]![customerref_fullname] = [customerref_fullname] 

End Sub 

もう一つの方法は、私は何でもによってフィルタリングするレポートを動作しますが、詳細なバージョンを許可していません、それを試してみました[txndate]:

DoCmd.OpenReport "TotalShippedDetailed", acViewReport, "", _ 
"[reports]![TotalShipped]![customerref_fullname] = [customerref_fullname] and [txndate] >= [forms]![frmrptdatemanager]![txtstartdate] And [txndate] <= [forms]![frmrptdatemanager]![txtenddate] " 

をそして最後に、私は上記のコードを取り、参照しようとしましたエラーを与える形式の日付フィールド自体:

DoCmd.OpenReport "TotalShippedDetailed", acViewReport, "", _ 
"[reports]![TotalShipped]![customerref_fullname] = [customerref_fullname] and [forms]![frmrptdatemanager]![cboDateField] >= [forms]![frmrptdatemanager]![txtstartdate] And [forms]![frmrptdatemanager]![cboDateField] <= [forms]![frmrptdatemanager]![txtenddate] " 

私が試したが、それらのどれもが私の目標を達成することはできませんより多くの例があります:ユーザーが参照するには、レポートの本文をダブルクリックすることができますメインレポートと同じ日付範囲の顧客による詳細レポート。

Please help !!!!

+0

一つのこと[レポート]を[TotalShipped] [customerref_fullname] = [customerref_fullname]されている必要があります私はあなたと私の友人との関係を理解し​​ています。正当なフィルタのように見える必要があります。それがあなたの問題を解決すれば、他の行き止まりを無視することができます。 – Wellspring

+0

と上記の提案は、me.Filterが空の文字列でない場合にのみ機能します。最初に良いフィルタ文字列を作成してから、その長い文字列の代わりにそのフィルタ文字列を使用して呼び出しを行うことをお勧めします。読みやすく、デバッグが簡単です。 – Wellspring

+0

レポートを開く唯一の方法は、文字列をそれに渡すことなので、me.filterは決して空の文字列ではありません。私はそれをいかに単純化するかについてはあまりよく分かっていませんが、私はそれに上記のことを打ち明けます。 @Triwaters問題は、文字列が静的ではないことです。それはユーザーによって常に変更されます。 –

答えて

1

filterパラメータは、WHERE句のようにWHERE句の前にWHERE句がないことに注意してください。

あなたがここでやっている:

DoCmd.OpenReport "TotalShippedDetailed", acViewReport, "", me.filter & _ 
    [reports]![TotalShipped]![customerref_fullname] = [customerref_fullname] 

既存のフィルタ条件を取って、それに追加することができますが、現在のフィルタ条件と次の条件をリンクすると、キーワードが含まれていなかったです。あなたは名前ではなく、変数またはコントロールの値を拾うために、フィルタ文字列に変数またはコントロール名を連結する必要があること、また、そこ

DoCmd.OpenReport "TotalShippedDetailed", acViewReport, "", me.filter & _ 
    " AND [reports]![TotalShipped]![customerref_fullname] = '" & [customerref_fullname] & "'" 

お知らせ:

あなたは何をする必要があります変数またはコントロールの値。値は、文字列または日付の場合は正しい句読点でオフセットする必要があります。文字列値の場合はシングルクォート、日付の場合はハッシュタグ/ポンド記号を使用します。

このようなことを開発してデバッグするには、文字列変数を使用してフィルタ条件全体を構築することをお勧めします。文字列変数の内容を検査するか、直接ウィンドウに値をダンプします(デバッグ。OpenReportメソッドのフィルターパラメーターとして使用する前に、フィルター条件の不足しているAND、スペースの欠落、および句読点の欠落を検出するのに役立ちます。

あなたのDBLCLICK方法は次のようになります!確か... me.filter&_ ため

Private Sub ftrReport_DblClick(Cancel As Integer) 
    Dim FilterCondition as String 

    FilterCondition = me.filter 
    FilterCondition = FilterCondition & " AND [txndate] >= #" & [forms]![frmrptdatemanager]![txtstartdate] & "# AND [txndate] <= #" & [forms]![frmrptdatemanager]![txtenddate] & "#" 

    Debug.Print FilterCondition 

    DoCmd.OpenReport "TotalShippedDetailed", acViewReport, "", FilterCondition 

End Sub 
+0

これは私が必要とするものにとても近いです。私は[customerref_fullname]を次のように追加します:FilterCondition = FilterCondition& "AND [customerref_fullname] ="&[Reports]![TotalShipped]![CustomerRef_FullName]これで文法エラーが発生しました –

+0

連結エラーを調べる。どうもありがとうございます!スルーの説明もありがとう。 –

関連する問題