0

テキスト ボックスのフォームで式を使用してテーブルから値を返す場合、式に複数のテーブルを含めて値を返すことはできますか?

テーブルはリンクされており、クエリで値を返すことができるので、Access でもこの方法でそれを行うことができると思いました????

=DSum("[tblMain]![Revenue]","tblMain","[tblMain]![Quarter]=3 AND [tblMain]![Region]='NorthEast'" AND [tblOffice]![Location]='NewYork'")

これは、テキスト ボックスに入力した式です。2 番目のテーブルへの参照がなくても問題なく動作しますが、一度取得すると、テキスト ボックスに点滅するエラー メッセージが表示されます (レポートと同じように)。 ..

この方法はおそらくフォームよりもレポートで使用されることが多いと思いますが、私は初心者であり、部門ごとに多くの事実をすばやく返すダッシュボード ソリューションを考え出そうとしています。VB ではなく、プロパティ ウィンドウのデータ タブの「コントロール ソース」フィールドでこれを使用しています。主な理由は、VB で動作させる方法がわからないためです。

いつも助けてくれてありがとう!

4

2 に答える 2

1

これらのテーブルはどのように関連していますか? 関係と主キー/外部キーについて説明できますか?

また、この関数の最初のパラメーターでテーブル名を参照する必要はありません (2 番目のパラメーターで既に処理されているため)。

たとえば、コードは次のようになります。

=DSum("Revenue","tblMain","Quarter=3 AND Region='NorthEast'" AND [tblOffice]![Location]='NewYork'")

キーストロークを節約し、読みやすさを向上させようとしているだけです。:)

于 2009-07-28T23:32:13.897 に答える
1

私の知る限り、ドメイン集計関数で複数のテーブルまたはクエリを参照することはできません。grazird が言うように、これらのテーブルはどのように関連していますか? tblMain ID にあるとしましょう。たとえば、qryMainOffice という名前のクエリを作成できます。SQL (SQL ビュー、クエリ デザイン ウィンドウ) は次のようになります。

SELECT [tblMain].[Revenue],[tblMain]![Quarter],[tblMain]![Region],
       [tblOffice]![Location]
FROM tblMain 
INNER JOIN tblOffice 
ON tblMain.ID = tblOffice.MainID

DSum は次のようになります (改行を削除します)。

=NZ(DSum("[Revenue]","qryMainOffice",
 "[Quarter]=3 AND [Region]='NorthEast' AND [Location]='NewYork'"),"Not found")

VBA でレコードセットまたはクエリを使用して値を返すこともできます。

コメントを編集

上記を VBA で使用するには、パラメーターを追加するか、文字列を使用する必要があります。

''Reference: Microsoft DAO 3.x Object Library
Dim rs As DAO.Recordset
Dim db As Database
Dim strSQL as String

Set db= CurrentDB

strSQL = "SELECT Sum(t.[Revenue]) As TotalNY" _
       & "FROM tblMain t " _
       & "INNER JOIN tblOffice o " _
       & "ON t.ID = o.MainID " _
       & "WHERE t.[Quarter]=3 AND t.[Region]='NorthEast' " _
       & "AND o.[Location]='NewYork' " _

 '' I have use aliases for simplicity, t-tblMain, o-tblOffice
 '' If you wish to reference a control, use the value, like so: 
 '' & " AND [Location]='" & Me.txtCity & "'"
 '' Dates should be formated to year, month, day
 '' For joins, see http://www.devshed.com/c/a/MySQL/Understanding-SQL-Joins/

 Set rs = db.OpenRecordset strSQL

 If Not rs.EOF Then
    Me.txtAnswer = rs!TotNY
 Else
    Me.txtAnswer = "N/A"
 End If

さまざまなクエリを使用して、リスト ボックスまたはサブフォームで表示できる複数の結果を返すこともできます。

strSQL = "SELECT TOP 5 o.[Location]," _
       & "Sum(t.[Revenue]) AS TotRevenue" _
       & "FROM tblMain t " _
       & "INNER JOIN tblOffice o " _
       & "ON t.ID = o.MainID " _
       & "WHERE t.[Quarter]=3 AND t.[Region]='NorthEast' " _
       & "GROUP BY o.[Location]"

上記は、北東地域のすべての場所の第 3 四半期の収益を返します。各グループの上位の値が必要な場合は、より複雑なクエリを見ていることになりますが、ここでは省略します。

于 2009-07-29T08:01:41.817 に答える