そのため、正確に 2 つのパラメーターを持つ比較的単純なクエリがあります。そのうちの 1 つはフォームから long を取得し、1 つのフィールドにその値がある単一のテーブルからレコードのみを選択します。(これはデザイン プロジェクトのテーブルであり、ユーザーはプロジェクトを一覧表示するデザイナーを選択しています。)
フォームを開いて手動でクエリを開くと、完全に機能します。2 番目のフォーム (リストボックスにクエリ結果を入力するフォーム) を使用して、クエリ結果と同じレコードセットを設定しようとすると、「実行時エラー '3061'. パラメーターが少なすぎます。1 が必要です.」というエラーが表示されて失敗します。
パラメータを 3 などの静的な整数に設定すると、問題なく動作します (ただし、明らかに役に立ちません)。Access 自体は明らかにできるのに、VBA コードがフォームのテキスト フィールドからテキストを読み取ることができないのはなぜですか?
これが私のクエリです:
SELECT [Project Request Log TABLE].Designer1, [Project Request Log TABLE].Priority, [Project Request Log TABLE].ProjectName, [Project Request Log TABLE].Manager, [Project Request Log TABLE].SME1, [Project Request Log TABLE].Priority, [Project Request Log TABLE].ProjectID
FROM Designers INNER JOIN [Project Request Log TABLE] ON Designers.ID = [Project Request Log TABLE].Designer1
WHERE ((([Project Request Log TABLE].Designer1)=[Forms]![frm_selectDesigner]![txtDesignerId]) AND (([Project Request Log TABLE].PercentComplete)<>1))
ORDER BY [Project Request Log TABLE].Designer1, [Project Request Log TABLE].Priority;
エラーが発生する VBA の行は次のとおりです。
Set rst_projects = dbs.OpenRecordset("qryDesignerProjectPrioritySet", dbOpenDynaset)
ありがとう。
編集: デザイナーを選択したフォームは、上記のコードがレコードセットを開こうとする 2 番目のフォームを開きます。元の frm_selectDesigner は閉じていません。[OK] をクリックすると非表示になりますが、開いたままです。
編集2:行を含める場合
DoCmd.OpenQuery "qryDesignerProjectPrioritySet"
クエリが開き、正しい結果が得られます。次の行でそのクエリの結果を上記のようにレコードセットとして割り当てようとすると、3601 エラーが発生しますか? OpenRecordset コマンドの書き方に何らかのエラーがあるはずですよね?