C1Report デザイナの最も強力な機能の1つは、Microsoft Access を使って作成されたレポートをインポートできることです。*.mdb ファイルのほかにも、Access 2007 の *.accdb ファイルにも対応しています。この機能を使用するには、Microsoft Access がコンピュータにインストールされている必要があります。ただし、レポートをデザイナにインポートしてしまえば、Microsoft Access は必要なくなります。
Access ファイルからレポートをインポートするには、[インポート]ボタンをクリックするか、[ファイル|インポート]メニューを選択します。ダイアログボックスが表示され、インポートするファイルの名前の入力を求められます。デザイナは自動的にファイルをスキャンし、インポートするファイルを選択できるダイアログを表示します。
ダイアログでは、インポート処理を行う前に既存のすべてのレポート定義をクリアするかどうか指定できます。
インポート処理が正しく動作すると、ソースレポートのほとんどの要素が処理されます。ただし、次に挙げるいくつかの例外があります。
Access は、VBA、マクロ、およびフォームを使ってレポートを動的に書式設定できます。C1Reports でも同様の処理が可能ですが、C1Reports では VBScript だけが使用されるため、レポートのコードはすべて手作業で変換する必要があります。
フォーム指向のフィールドタイプ
Access レポートには、デザイナのインポートプロシージャによって処理されないフィールドが含まれていることがあります。サポートしないフィールドタイプは、Chart、CommandButton、ToggleButton、OptionButton、OptionGroup、ComboBox、ListBox、TabCtl、および CustomControl です。
VBScript の予約語を使用するレポート
Access は VBScript を使用しないため、レポートオブジェクトやデータセットフィールド名の識別子として VBScript の予約語を使用するレポートが設計されている可能性があります。その場合は、VBScript エンジンが式を評価するときに問題が発生し、レポートが正しく出力されない原因になります。
識別子として使用できない予約語には、Date、Day、Hour、Length、Minute、Month、Second、Time、TimeValue、Value、Weekday、Year などがあります。完全なリストについては、VBScript のリファレンスを参照してください。
日付を四半期順(または、曜日、月など)でソートするレポート
C1Reports は、ADO.NET データセットのSort プロパティを使ってグループをソートします。このプロパティは、フィールドの値に基づいてデータセットをソートし、式は使用しません(任意の式に基づいてグループ化はできますが、ソートはできません)。グループを四半期順にソートする Access レポートをインポートすると、ソートは日付順に行われるようになります。これを解決する方法は2つあります。1つは、ソートの基準にする式の値を含むフィールドを作成する方法、もう1つは、データセットを作成する SQL 文を変更し、四半期順にソートを実行する方法です。
デザイナが実際に行う処理の一例として、製品に付属の NWind.mdb ファイルをインポートしてみます。このファイルには、次に示す13のレポートが含まれています。そこで、これらのレポートに対する処理について説明します。C1Reports に付属する NWind.XML ファイルには、以下で説明する変更がすべて行われています。
Alphabetical List of Products(製品のアルファベット順リスト)
処理は不要です。
Catalog(カタログ)
処理は不要です。
Customer Labels(顧客ラベル)
処理は不要です。
Employee Sales by Country(地域別従業員売上高)
このレポートには、手作業で変換する必要があるコードが含まれます。次のコードを Group 1 のヘッダセクションのOnPrint プロパティに割り当てます。
コードのコピー
|
|
---|---|
If SalespersonTotal > 5000 Then ExceededGoalLabel.Visible = True SalespersonLine.Visible = True Else ExceededGoalLabel.Visible = False SalespersonLine.Visible = False End If |
Invoice(請求書)
処理は不要です。
Products by Category(カテゴリ別製品)
処理は不要です。
Sales by Category(カテゴリ別売上高)
このレポートには、インポートされないグラフコントロールが含まれます。グラフをレポートに追加するには、アンバウンドピクチャフィールドを使用します。イベントハンドラを記述してグラフを作成し、それを画像としてアンバウンドピクチャフィールドに割り当てます。
Sales by Category Subreport(カテゴリ別売上高サブレポート)
処理は不要です。
Sales by Year(年度別売上高)
このレポートには、手作業で変換する必要があるコードおよび Form オブジェクトへの参照が含まれます。Form オブジェクトを置き換えるには、RecordSource プロパティを編集して [Show Details] パラメータを追加します。
コードのコピー
|
|
---|---|
PARAMETERS [Beginning Date] DateTime 1/1/1994, [Ending Date] DateTime 1/1/2001, [Show Details] Boolean False; ... |
最後に、2行のコードを書き換える必要があります。
Sales by Year Subreport(年度別売上高サブレポート)
処理は不要です。
Sales Totals by Amount(金額別総売上高)
このレポートには、手作業で変換する必要があるコードが含まれます。次のコードをページヘッダセクションのOnPrint プロパティに割り当てます。
コードのコピー
|
|
---|---|
PageTotal = 0 |
コードのコピー
|
|
---|---|
PageTotal = PageTotal + SaleAmount HiddenPageBreak.Visible = (Counter = 10) |
Summary of Sales by Quarter(四半期別売上高のサマリー)
このレポートには、四半期順にソートされるグループがあります(前述の4番目の例外を参照)。これを解決するには、RecordSource プロパティを次のように変更することによって、ShippedDate 四半期の値を含むフィールドをソースデータセットに追加します。
コードのコピー
|
|
---|---|
SELECT DISTINCTROW Orders.ShippedDate,
Orders.OrderID,
[Order Subtotals].Subtotal,
DatePart("q",Orders.ShippedDate) As ShippedQuarter
FROM Orders INNER JOIN [Order Subtotals]
ON Orders.OrderID = [Order Subtotals].OrderID
WHERE (((Orders.ShippedDate) Is Not Null));
|
Summary of Sales by Year(年度別売上高のサマリー)
処理は不要です。
以上をまとめると、NorthWind データベースからインポートされる 13 のレポートのうち、編集の必要がないレポートが8つ、コードを変換する必要があるレポートが3つ、SQL 文を変更する必要があるレポートが1つ、置き換えられないグラフコントロールがあるレポートが1つあるということになりますが、それでも編集に必要な手間はわずかです。インポート機能を使用すれば既存レポートの移行がいかに簡単かお分かりいただけたことと思います。