0

私は、オフィス用の (かなり単純な) データベース (および対応するフォーム) をまとめようとして、何時間も頭を壁にぶつけてきました。

CLIENT DETAILS-とSALES(を介した 1 対多の関係) の2 つのメイン テーブルがありCLIENT NUMBERます。
ユーザーがフォーム内から一致するデータを検索できるようにするフォームを作成しました。

Field: BUSINESS NAME
Table: CLIENT DETAILS
Criteria: Like "*" & [Forms]![FINDClient]![BUSINESS_NAME] & "*" Or Is Null

これはほとんどのフォームで問題なく機能しますが、日付範囲を組み込もうとすると、大きなドラマに出くわしました。例えば

Field: CONTACT DATE
Table: SALES
Criteria: >=[Forms]![FINDClient]![CONTACT_DATE_1] And <=[Forms]![FINDClient]!

[CONTACT_DATE_2] Or Is Null

Field: PAID DATE<br>
Table: SALES<br>
Criteria: >=[Forms]![FINDClient]![PAID_DATE_1] And <=[Forms]![FINDClient]![PAID_DATE_2] Or Is Null

Field: CANCELLED DATE<br>
Table: SALES<br>
Criteria: >=[Forms]![FINDClient]![CANCELLED_DATE_1] And <=[Forms]![FINDClient]![CANCELLED_DATE_2] Or Is Null

基本的に、私が達成しようとしているのは、検索用語に一致するレコードを返すクエリです。つまり、ビジネス名 = Mybiz (または Myb*) AND 電話 = 555 55555 など AND CONTACT_DATE、PAID_DATE、または CANCELED DATE のいずれかです。
ユーザーは、常に 1 つの日付セットのみを入力します。

(必要に応じて、必要に応じてチェックボックスを使用して個々の日付範囲を有効/無効にすることもできます。これは私が設定したものですが、おそらく無意味です)

編集:現在のSQLは次のとおりです->

SELECT [CLIENT DETAILS].*, SALES.*
FROM [CLIENT DETAILS] INNER JOIN SALES ON [CLIENT DETAILS].[CLIENT NUMBER] = SALES.[CLIENT NUMBER]
WHERE ((([CLIENT DETAILS].[BUSINESS NAME]) Like "*" & [Forms]![FINDClient]![BUSINESS_NAME] & "*" Or ([CLIENT DETAILS].[BUSINESS NAME]) Is Null)
AND (([CLIENT DETAILS].ADDRESS) Like "*" & [Forms]![FINDClient]![ADDRESS] & "*" Or ([CLIENT DETAILS].ADDRESS) Is Null)
AND (([CLIENT DETAILS].CITY) Like "*" & [Forms]![FINDClient]![CITY] & "*" Or ([CLIENT DETAILS].CITY) Is Null)
AND (([CLIENT DETAILS].STATE) Like "*" & [Forms]![FINDClient]![STATE] & "*" Or ([CLIENT DETAILS].STATE) Is Null)
AND (([CLIENT DETAILS].POSTCODE) Like "*" & [Forms]![FINDClient]![POSTCODE] & "*" Or ([CLIENT DETAILS].POSTCODE) Is Null)
AND (([CLIENT DETAILS].PHONE) Like "*" & [Forms]![FINDClient]![PHONE] & "*" Or ([CLIENT DETAILS].PHONE) Is Null)
AND (([CLIENT DETAILS].[FAX NUMBER]) Like "*" & [Forms]![FINDClient]![FAX] & "*" Or ([CLIENT DETAILS].[FAX NUMBER]) Is Null)
AND (([CLIENT DETAILS].EMAIL) Like "*" & [Forms]![FINDClient]![EMAIL] & "*" Or ([CLIENT DETAILS].EMAIL) Is Null)
AND (([CLIENT DETAILS].WEBSITE) Like "*" & [Forms]![FINDClient]![WEBSITE] & "*" Or ([CLIENT DETAILS].WEBSITE) Is Null)
AND (([CLIENT DETAILS].COMMENTS) Like "*" & [Forms]![FINDClient]![COMMENTS] & "*" Or ([CLIENT DETAILS].COMMENTS) Is Null)
AND (([CLIENT DETAILS].[PHONE 2]) Like "*" & [Forms]![FINDClient]![PHONE] & "*" Or ([CLIENT DETAILS].[PHONE 2]) Is Null)
AND (([CLIENT DETAILS].[ADDRESS 2]) Like "*" & [Forms]![FINDClient]![Address] & "*" Or ([CLIENT DETAILS].[ADDRESS 2]) Is Null)
AND (([CLIENT DETAILS].[CITY 2]) Like "*" & [Forms]![FINDClient]![City] & "*" Or ([CLIENT DETAILS].[CITY 2]) Is Null)
AND (([CLIENT DETAILS].[STATE 2]) Like "*" & [Forms]![FINDClient]![State] & "*" Or ([CLIENT DETAILS].[STATE 2]) Is Null)
AND (([CLIENT DETAILS].[POSTCODE 2]) Like "*" & [Forms]![FINDClient]![POSTCODE] & "*" Or ([CLIENT DETAILS].[POSTCODE 2]) Is Null)
AND (([CLIENT DETAILS].[EMAIL 2]) Like "*" & [Forms]![FINDClient]![EMAIL] & "*" Or ([CLIENT DETAILS].[EMAIL 2]) Is Null)
AND ((SALES.[SALE NUMBER]) Like "*" & [Forms]![FINDClient]![SALE_NUMBER] & "*" Or (SALES.[SALE NUMBER]) Is Null)
AND ((SALES.BOOK) Like "*" & [Forms]![FINDClient]![BOOK] & "*" Or (SALES.BOOK) Is Null)
AND ((SALES.SALESPERSON) Like "*" & [Forms]![FINDClient]![SALESPERSON] & "*" Or (SALES.SALESPERSON) Is Null)
AND ((SALES.[CONTACT PERSON]) Like "*" & [Forms]![FINDClient]![CONTACT] & "*" Or (SALES.[CONTACT PERSON]) Is Null)
AND ((SALES.[PAID DATE])>=[Forms]![FINDClient]![PAID_DATE_1] And (SALES.[PAID DATE])<=[Forms]![FINDClient]![PAID_DATE_2])
AND ((SALES.[CANCELLED DATE])>=[Forms]![FINDClient]![CANCELLED_DATE_1] And (SALES.[CANCELLED DATE])<=[Forms]![FINDClient]![CANCELLED_DATE_2]));

最後の 2 つのエントリは、IF ステートメントに依存するエントリである必要があります。

4

1 に答える 1