1

プロトタイプアプリケーションにAccess2007を使用しています。2つのデータベースtestUi.accdbがあります(これは

すべてのフォームが含まれています)およびtestDb.mdb(データベースが含まれています)。次に、サブフォームの1つでデータシートを使用したいと思います。誰かがこれらの質問で私を助けることができますか?

  1. テーブルなしで手動でデータシートを作成できますか?
  2. DAOまたはADObyVBAコードを使用して、このデータシートにデータをバインドするにはどうすればよいですか?
  3. VBAコードを使用してデータシートをループすることは可能ですか?各行の値を取得または設定しますか?
  4. 上記が不可能な場合、Accessでグリッドのようなデータシートを使用する別の方法は何ですか?
4

1 に答える 1

2

1)データセットフォームは、DAOレコードセットオブジェクトまたはADOレコードセットオブジェクトにのみバインドできます。RecordSourceを設定することにより、それらをDAOレコードセットオブジェクトに暗黙的にバインドするか、#2に示すようにコードで手動でバインドすることができます。コードを使用してのみADOレコードセットにバインドできます。そうすると、フィルタリングや並べ替えなど、データセットのデフォルトオプションの一部が機能しなくなります。

2)これは過度に単純化されていることはわかっていますが...フォームのロードイベントで:Set Me.Recordset = rs(rsはレコードセットオブジェクトです)

3)多くのグリッドコントロールのように、行オブジェクトとデータを挿入するデータシートをループすることはできません。

4)グリッドコントロールやリストビューコントロールなどのMicrosoftのActiveXコントロールを使用できます。

これを実現できる1つの方法は、「製造されたADOレコードセット」を使用してから、フォームをそのレコードセットにバインドすることです。これは、私が#1と#2でレイアウトしたオプションを使用することになります。

いずれの場合も、アクセスデータセットフォームは、多くのグリッドコントロールのように、データを表示するのに十分なセル/列を動的に追加および構成しません。つまり、事前にフォームに十分なテキストボックスを用意してから、コードを使用してそれらをDAOまたはADOレコードセットのフィールドにバインドする必要があります。不要な列は、コードを使用して非表示にする必要があります。ラベルのキャプションは、適切な列ヘッダーを作成するためにコードを使用して入力する必要があります。つまり、データシートビューは実際には非常に強力ですが、グリッドコントロールではありません。

.NETを使用したことがある場合は、探しているものを提供するアドインまたはdllを作成するのはおそらくかなり簡単です(簡単ではありませんが)。唯一の問題は、.NETのDataGridViewをDAOまたはADOレコードセットにバインドできないため、DAOまたはADOレコードセットを取得し、そのレコードセットをADO.NETDataTableに「変換」するコードを作成する必要があることです。または、データベースとクエリの情報を取得し、それを使用して目的のデータを取得することで、.NETフォームがデータアクセスを実行するように作成することもできます。

Edit1
以下のコメントに応えて、ここにいくつかのサンプルコードがあります。以下のコメントでは行っていない、明示的なレコードセットオブジェクトを作成する必要があると思います。

Option Compare Database
Option Explicit

Private Sub Form_Load()
    Dim db As DAO.Database
    Set db = OpenDatabase("E:\Access\Testdb.mdb")
    Dim rs As DAO.Recordset
    Set rs = db.OpenRecordset("Select * from tblMarket", dbOpenSnapshot)
    Set Me.Market1.Form.Recordset = rs
    Set rs = Nothing
End Sub
于 2012-10-18T15:15:38.887 に答える