システムwiki

Office:クエリを実行するにはフォームを閉じる必要がありますか?

KendraW 解決済 最終更新日:2020-09-01 15:46

私はAccessを初めて使用し、従業員の懲戒のための新しい懲戒データベースを作成しようとしています.情報を入力するためのサブフォームと、従業員が累積したポイントの合計数を表示するためのサブフォームを含むフォームをなんとか作成しました.
は、コンボボックスでの選択に基づいて表示されます.私が遭遇している問題は、Accessで最初にフォームを閉じないとポイント合計クエリを実行できないことです.フォームを閉じてクエリを実行するマクロを作成してみました.
その後、フォームを再度開きますが、うまく機能させることができませんでした.問題はポイント合計サブフォームが合計ポイントクエリに依存しているという事実に起因していると思います.フォーム全体を閉じずにクエリを実行する方法はありますか?

以下のデータベースのスクリーンショット:

返信リスト(回答:9)

1 #
KenSher
バインドされていない合計ポイントテキストボックスコントロールのControlSourceプロパティとして使用される式でDLookup関数を呼び出すだけでよいはずです.たとえば、
= DLookup( "[TotalPoints]"、 "[Total Points Query]"、 "EmployeeNumber="&[cboEmployeeNumber])
もちろん、実際のオブジェクト名に置き換える必要があります.
応答1# ->にスキップ
2 #
KendraW

ken、

応答をありがとうが、これを機能させることはできません.Dlookup関数を使用して、クエリがPointstableから情報を抽出するように、方法を実行する方法をもう少し試してみました.
生成していますが、何も機能していません.私は必要以上に必要以上にプロパティを台無しにしません、Dlookup関数が機能するように有効または無効にする必要がある、または無効にする必要がある、または無効にする必要があるプロパティにはありますか?

明らかにデータベース自体にアクセスできないので、私が間違っていることを正確に何をしているのか教えてもらえません.それでも、機能からDlookupsを維持する一般的な間違いや問題を知っている場合は、データベースで調べる必要があるものについての考えを教えてください.

応答2# ->にスキップ
3 #
KenSher
関数呼び出しが機能していない理由を判別する方法は、機能がどのように機能するかを理解することです.dlookup関数は、値を 'ドメイン'に返す値を返すドメイン関数のセットの1つです.このコンテキストでは、単語ドメインがかなり緩やかに使用されます.
tableを参照してください.これは、ベースtableまたはクエリの仮想結果tableである可能性があります.関数は3つの引数を受け入れ、最初は列(フィールド)の名前、または1つ以上の列のデータからの値を1つ以上の列の値を返す式です.
表、2番目は、基本tableまたはクエリの名前です.3番目の引数は、値が返される集計値の場合の行、または行を決定するためにtrueまたはfalseに評価する式です.クエリが生成されていること.これは、クエリがアクセス条件である可能性があることを私に示唆しています. 'アクションクエリ'、特に'make table query'、すなわち仮想結果tableを返さないが、新しい基本tableを作成する.この場合は?その場合、Dlookup関数を呼び出してこのタイプのクエリとしてエラーが発生します.
データベースリレーショナルモデルの言語で厳密に話すことは、SQLステートメントはすべて照会ではなく、仮想結果表を返しません.
これがケースかどうかを確かめるかどうかを確認します.ここで返信でクエリのSQLステートメントを投稿できます.これを行うには、デザインビューでクエリを開き、SQLビューに切り替えます.次にSQLステートメントをコピーしてここで返信に貼り付けます.
原因が発生します.私が与えた式は、employeedumberがテキストデータ型ではなく数値データ型であると仮定しています.後者の場合、式を構築するときに文字通りの引用符で囲む必要がある場合.
マイ例のコンボボックスCBBOEMPLOYENUMBERは、EmployeeIDなどの隠されたサロゲートキーではなく、rowsourceのupermaneumber列をそのバウンドカラムとして参照します.コンボボックスのrowsourceをコピーして投稿する
財産はここでこれを確認するのに役立ちます.RowSourceプロパティがSQLステートメントではなくクエリの名前である場合は、クエリのSQLステートメントを投稿してください.
応答3# ->にスキップ
6 #
KendraW

ケン、

PointのクエリのSQLステートメントは次のとおりです:

SELECT [エラー情報].[時計番号]、Sum([エラー情報].Points)AS SumOfPoints INTO [ポイント合計]

FROM [エラー情報]

WHERE((([エラー情報].[懲戒処分日])#9/1/2019#と#2/29/2020#の間))

GROUP BY [エラー情報].[時計#];

コンボボックスがプルしているClock#フィールドはテキストデータタイプですが、クエリからプルしていると思います.コンボボックスウィザードを使用してコンボボックスを作成したので、100%確実ではありません.以下は、時計の行ソースクエリからのSQLステートメントです.
#コンボボックス:

[従業員情報].[時計番号]を選択してください

FROM [従業員情報];

私が言ったように、これは不必要に複雑であると確信しています.私はまだアクセスするのが初めてです.

応答6# ->にスキップ
7 #
KenSher 1
私が疑ったように、クエリは「tableを作成する」クエリです.このようなクエリに対してドメイン関数を呼び出すことはできません.ポイント合計tableを作成する必要はありません.これを行うと、データベースを開いて、
異常を更新します.次のクエリは同じデータを返します.
SELECT [Clock#]、Sum(Points)AS SumOfPoints
FROM [Error Information]
WHERE [Reprimand Date] BEjpEEN#9/1/2019#AND# 2/29/2020#
GROUP BY [Clock#];
これがqryPointsと言うように保存されている場合、フォーム内の現在のClock#の合計ポイントは、ControlSourceを使用して非バインドテキストボックスに表示できます.プロパティ
= DLookup( "SumOfPoints"、 "qryPoints"、 "[Clock#]="""&[cboClockNumber]& "" "")
ただし、qryPointsクエリを作成する必要はありません総計は、DLookup関数ではなくDSum関数を呼び出すことで式で実行できるため、
= DSum( "Points"、 "[Error Information]"、 "[Clock#]="""& [cboClockNumber]& "" "AND [Reprimand Date] BEjpEEN#9/1/2019#AND#2/29/2020#")
これに関する唯一の問題は、日付範囲が式.そのため、フォームの現在のレコードの日付範囲を決定する必要があります.これにより、ハードコードするのではなく、範囲を計算できます.唯一の日付
フォームにある値は懲戒日です.そのため、日付範囲は、金融取引の日付に基づいて会計年度を決定することに似ている場合があります.それは十分に簡単ですが、日付範囲がどのように決定されるかを正確に計算します
あなたの場合の懲戒日から、あなたからより多くの情報が必要になります.
4 #
S.A.Mar

こんにちはKendra、あなたは全部のポイントクエリと全ポイントtableをまったく必要ないかもしれません.

サブフォームは(RecordSource)ポイントフィールドを持つrisprimandstableに基づいていますか?

もしそうなら、あなたは各スタッフのメンバー(または時計#)のメインフォーム上の合計ポイントにDSUMを使うことができます

= DSUM(「ポイント」、「懲戒」、「stampid=」&[txtstaffid])

メインフォーム上のポイント合計テキストボックスの制御ソースに追加して、

points=あなたのポイントフィールド

reprimand=あなたのtable名

Staffid=あなたのスタッフ(時計#?)

txtstaffid=時計#またはスタッフID

フィールド名とtableを使用せずに少し難しい

DSUMの検索はあなたにたくさんの例を与えます.基本的にそれはあなたに蓄積された総点の合計を与えるでしょう

応答4# ->にスキップ
5 #
KendraW

私はこれのアイデアが気に入っており、会社のポイントルールが異なっていればうまくいくと思います.ポイントクエリとポイントtableがあるのは、従業員が6か月間に累積したポイント数を知る必要があるためです.もしあるなら
クエリとtableなしで6か月の期間内にポイントを計算するより簡単な方法なら、私はそれですべてです.

応答5# ->にスキップ
8 #
S.A.Mar 1

各スタッフメンバーの過去6か月間の合計ポイントが必要な場合は、次のようなものを使用できます.

= DSum( "points"、 "reprimands"、 "staffid ="&[txtstaffid]& "および[Repdate] BEjpEEN date()AND DateAdd( 'm'、-6、date())")

または

= DSum( "points"、 "reprimands"、 "staffid ="&[txtstaffid]& "and [Repdate]>DateAdd( 'm'、-6、date())")

名前を自分の名前に変更する場合は、時計#の前後に角かっこと、スペースを含む他の名前、つまり[時計#]が必要です

9 #
S.A.Mar
こんにちはケンドラ、これは解決されましたか?