Reports for WinForms
パラメータクエリー
C1Report の使い方 > 便利な機能の活用 > パラメータクエリー

パラメータクエリーは、独自のダイアログボックスを表示して、レコードを取得するための条件やレポートフィールドの値といった情報の入力をユーザーに求めることができるクエリーです。ユーザーに複数の情報の入力を求めるクエリーも設計できます。たとえば、2つの日付を取得するクエリーを設計して、その間の日付に該当するすべてのレコードを取得することができます。

たとえば、パラメータクエリーに基づいて、月次収益のレポートを作成するとします。レポートを出力すると、C1Report はレポートに含める月の入力を求めるダイアログボックスを表示します。ユーザーが月を入力すると、C1Report は該当するレポートを出力します。

パラメータクエリーを作成するには、RecordSource プロパティの SQL 文を編集して、PARAMETERS 句を追加します。パラメータクエリーの作成に使用する構文は、Microsoft Access で使用される構文と同じです。

  1. パラメータクエリーを作成する最も簡単な方法は、WHERE 句に1つ以上のアイテムがある簡単な SQL 文を元に、WHERE 句にある固定値を手作業でパラメータに置き換えることです。たとえば、次のような一般的な SQL 文を元にします。

     
    strSQL = "SELECT DISTINCTROW * FROM Employees " & _
    "INNER JOIN (Orders INNER JOIN [Order Subtotals] " & _
    "ON Orders.OrderID = [Order Subtotals].OrderID) " & _
    "ON Employees.EmployeeID = Orders.EmployeeID " & _
    "WHERE (((Orders.ShippedDate) " & _
    "Between #1/1/1994# And #1/1/2001#));"
    
    

  2. 次に、この SQL 文のうち、パラメータに変える部分を確認します。この例では、WHERE 句にある日付(太字の部分)をパラメータにします。これらのパラメータの名前を Beginning Date(開始日)および Ending Date(終了日)にします。これらの名前にはスペースが含まれているため、[ ]で囲む必要があります。

     
    strSQL = "SELECT DISTINCTROW * FROM Employees " & _
    "INNER JOIN (Orders INNER JOIN [Order Subtotals] " & _
    "ON Orders.OrderID = [Order Subtotals].OrderID) " & _
    "ON Employees.EmployeeID = Orders.EmployeeID " & _
    "WHERE (((Orders.ShippedDate) " & _
    "Between [Beginning Date] And [Ending Date]));"
    
    
    

  3. 最後に、パラメータ名、型、およびデフォルト値を含む PARAMETERS 句を使用して、SQL 文の先頭でパラメータを指定します。

     
    strSQL = "PARAMETERS [Beginning Date] DateTime 1/1/1994, " & _
    "[Ending Date] DateTime 1/1/2001;" & _
    "SELECT DISTINCTROW * FROM Employees " & _
    "INNER JOIN (Orders INNER JOIN [Order Subtotals] " & _
    "ON Orders.OrderID = [Order Subtotals].OrderID) " & _
    "ON Employees.EmployeeID = Orders.EmployeeID " & _
    "WHERE (((Orders.ShippedDate) " & _
    "Between [Beginning Date] And [Ending Date]));"
    
    

この文が実行されると、コントロールはユーザーにダイアログボックスを表示して、Beginning DateEnding Date の値の入力を求めます。ユーザーが入力した値は SQL 文に組み込まれ、ユーザーが選択した期間を対象にしてレポートが生成されます。

ダイアログボックスは、C1Report によって臨機応変に作成されます。ダイアログボックスにはクエリー内のすべてのパラメータが含まれ、パラメータの型に適したコントロールが使用されます。たとえば、Boolean 型のパラメータにはチェックボックスが使用され、Date 型のパラメータには日時の選択コントロールが使用されます。上の SQL 文を実行して表示されるダイアログボックスを次に示します。

PARAMETERS 句は、各アイテムをカンマで区切ったリストで構成され、最後にセミコロン(;)を付けます。各アイテムは1つのパラメータを表し、次の情報を指定します。

パラメータクエリーは、次の手順で簡単に作成できます。最初に、正しく動作する簡単なクエリーを作成します。次に、PARAMETERS 句を追加します。PARAMETERS 句の最後にセミコロン(;)を付けることを忘れないでください。最後に、WHERE 句を編集して、適切な位置にパラメータ名を追加します。

GetRecordSource メソッドを使用すると、パラメータクエリーから(PARAMETERS 句がない)適切な SQL 文を取得できます。これは、レポートに含まれるデータを使って独自のレコードセットを作成する場合に便利です。

メモ:パラメータクエリーを使用する代わりに、ダイアログボックスを作成してユーザーから情報を取得し、必要に応じて SQL 文を修正したり、DataSource オブジェクトのFilter プロパティを設定するコードを、Visual Basic .NET または C# で記述することもできます。パラメータクエリーを使用する利点は、パラメータのロジックをレポート自身に置くことができること、またパラメータクエリーがビューアアプリケーションから独立していることです。コードを記述する手間も省くことができます。