1

ユーザーが入力する 3 つの項目を含むフォームがあります。

  1. というテキストボックスProjectName

  2. 2 つの ActiveX コントロール オブジェクト (Microsoft Time and Date picker Control 6.0) がそれぞれ呼び出されProjStartDateProjEndDate

ユーザーが上記のいずれかを入力した後、フィルター処理された結果を表示するフォームのリスト ボックス オブジェクトで requery を呼び出すボタンをクリックできます。

リストボックスの行ソースの種類を「テーブル/クエリ」に設定し、その行ソースを以下の SQL クエリに設定しました。

SELECT p.Title
FROM Project AS p
WHERE
  p.Title = [Forms]![Search by project]![ProjectName] 
  OR (p.StartDate <= [Forms]![Search by project]![ProjStartDate]
      AND p.EndDate >= [Forms]![Search by project]![ProjEndDate])
ORDER BY
  p.ProjectId DESC; 

Forms!Search by project!ProjectNameただし、フォームに入力するたびに、 、Forms!Search by project!ProjStartDateおよびというパラメータを求めるポップアップ ボックスが表示されますForms!Search by project!ProjEndDate。パラメータを入力すると、たとえばプロジェクト名を正しく入力すると、リスト ボックスに正しいフィルタ結果が表示されます。

さらに、ProjectNameテキスト ボックスに正しいキーワードを入力して再クエリしても、パラメータのポップアップ ボックスが表示されます。この問題を解決する方法を知っている人はいますか?よろしくお願いします!

4

1 に答える 1

2

私は最初に、すべてのコントロールが単一のフォームに含まれているという仮定に基づいてこの回答を書きました。ただし、リストボックスが子フォームにある場合、子フォームを最初に開いたとき、親フォームのコントロール(など[Forms]![Search by project]![ProjectName])はまだ使用できません。その場合は、リストボックスの行のソースプロパティを空のままにして、親フォームのフォームの読み込みイベントが発生するまで待って、SELECTステートメントをリストボックスの行のソースに割り当てることができます。または、ユーザーがコマンドボタンをクリックするまで、リストボックスの行ソースを空のままにします。

この答えの残りは、命名の問題を診断することについてでした。コメントで、特定の時間に実行するとクエリが機能することを示したので、名前付けは結局は関係ないと思いますが、他の人に役立つ可能性がある場合に備えて残しておきます。

イミディエイトウィンドウ(Ctrl+ g)を開き、dbエンジンがこれらのパラメーターを見つけられない理由を調べます。

「プロジェクトで検索」フォームをフォームビューで開いた状態で、その.Nameプロパティをチェックして、Accessが期待する名前を認識していることを確認します。あなたとAccessの両方がフォームの名前に同意した場合、これを取得します...

? Forms![Search by project].Name
Search by project

OTOH、Accessがフォームの名前が異なると判断した場合、その試行はエラーをトリガーします。その場合は、Accessが認識しているフォーム名を確認してください。これにより、開いているすべてのフォームの名前がわかります。

for each f in Forms : ? f.Name : next

最後に、これらのフォームコントロールの値を調べます。「プロジェクトで検索」が確かに正しいフォーム名であると仮定すると...

? Forms![Search by project]!ProjectName
? Forms![Search by project]!ProjStartDate
? Forms![Search by project]!ProjEndDate
于 2013-01-04T18:18:58.463 に答える