お世話になります。
現在会社でAccess2016を使用してシステムを構築しています。
環境は以下のとおりです。
・Windows 10上でAccess2016を動かし開発
・データはSQL Server2019
・両者をADOのパススルーで接続
フォームや一覧などにはSQL Serverのデータをレコードセット経由で直接表示できるのですが、レポートには同じ方法で表示ができませんでした。
ですので、Accessのテーブルを経由して一時的にAccessテーブル上にデータを展開し、それをレポートで表示させています。
レポートでパススルーのデータを使用するのはこの方法しかないのでしょうか。
この場合ADO接続は変更しないものとお考えいただけると助かります。
よろしくお願いいたします。
フォームではどのように直接表示させているのですか。
そのコードを提示してもらえますか。
レポートの場合は、フォームとは違いますので、フォームの方法をそのままではできないので、レポート用に改変する必要があります。もとのフォームのコードの提示があればそれをもとにアドバイスできると思います。
ご回答ありがとうございます。
なるほど、可能ではあるのですね。それが分かっただけでも嬉しいです。
フォームで表示させる場合はおおよそ以下のような感じです。
ADODBパススルーを行い、レコードセットを取得、「Me.Recordset」でフォームのレコードセットに受け渡し、これを表示させます。
これと同じ内容をレポートで行った場合、空欄になって表示できませんでした。
おそらくレポートでは「Me.Recordset」ではだめなのかと考えたのですが、結局実現できませんでした。
'接続用のクラスです
Dim db As DataBaseAccess
Dim mySQL As String
Dim rs As ADODB.Recordset
'データベースの接続処理
Set db = DatabaseFactory.creater
db.connect
'実行するクエリの文字列をセット。
mySQL = "SELECT " & _
"[取引先マスタ_ID] , [取引先コード], [取引先名]" & _
" FROM [dbo].[取引先マスタ]"
'実行してレコードセットに格納します。
Set rs = db.execute(mySQL)
'ここでデータソースに取得したDBの結果をセット
Set Me.Recordset = rs
'オブジェクト変数を終了、破棄します。
rs.Close
db.disconnect
Set rs = Nothing
Set db = Nothing
Recordsetプロパティを使う方法ですか。その方法は残念ながら、レポートでは使えません。
Report.Recordset プロパティ (Access) | Microsoft Docsに下記の記述があります。
DAOなら可能なようです。ADOしかだめということなら、一時テーブルにインポートしてそれと連結するようにとのことです。
一時テーブルを使わずにという方法もありますが、かなり面倒な方法になりますので、一時テーブルを使う方法でいいのではと思います。
ご回答誠にありがとうございます。
やり方的に正しいことが分かってスッキリしました。