私はそれを一度も使ったことがないという点で、SQLの新機能です!私は現在Accessでクエリを書いていますが、クエリが複雑すぎると言ってエラーに遭遇し、SQLに直接書き込むことで解決できると考えていました。SQL検索フォーム
私は非常に単純なデータテーブルを持っており、複数の基準で検索フォームを作成しています。これには、名前と通りの検索、日付と数字の間の検索、ユーザーが入力したものよりも大きいものと低いものが含まれます(フォームのVBA、ドロップダウンメニュー、および検索の間に、ドロップダウンメニューから下限を選択します。VBAは、最初の「Between」テキストボックスにデータテーブルの日付または数字を置き、ユーザは2番目の日付または数字を入力します。
フォームのドロップダウンメニューの値を検索し、一致しない場合は、クエリのその部分を適用するwhere句になると思いますその部分をスキップします。
ここまでは以下のとおりですが、リモートで正しいかどうかはわかりません。
SELECT tblFOIData.Start_Date_of_Liability
FROM tblFOIData
WHERE ((([Forms]![frmSearch]![cmbStartDate_CriteriaSlection]<>"";
(tblFOIData.Start_Date_of_Liability) Between [Forms]![frmSearch]![Between_Start_Date_1] And [Between_Start_Date_2])));
これはそれを行うための最善の方法ではありませんので、もし私が時間のためにこれに取り組んできていると、誰かが同じで20の検索条件を入力する機能で検索フォームを作成する簡単な方法をお勧めすることができます時間。 (うち6件はワイルドカード検索、14件は検索の間にある必要があります)、あなたの提案を聞くことに非常に感謝します。
UPDATE:
より見た後、私は、このSQLクエリが出ている:
SELECT *
FROM tblFOIData
WHERE (((tblFOIData.Area_Ref) Is Null Or (tblFOIData.Area_Ref) Like "*" & [Forms]![frmSearch]![cmbBilling_Authority] & "*")
AND ((Nz([tblFOIData]![Ratepayer],"")) Is Null Or (Nz([tblFOIData]![Ratepayer],"")) Like "*" & [Forms]![frmSearch]![Rate_Payer] & "*")
AND ((tblFOIData.Scheme_Reference) Is Null Or (tblFOIData.Scheme_Reference) Like "*" & [Forms]![frmSearch]![Scheme_Ref] & "*")
AND ((tblFOIData.Account_Mailing_Address) Is Null Or (tblFOIData.Account_Mailing_Address) Like "*" & [Forms]![frmSearch]![Account_Mailing] & "*")
AND ((tblFOIData.Empty_Prop) Is Null Or (tblFOIData.Empty_Prop) Like "*" & [Forms]![frmSearch]![Empt_Prop] & "*")
AND ((tblFOIData.Charity) Is Null Or (tblFOIData.Charity) Like "*" & [Forms]![frmSearch]![Charity] & "*")
AND ((tblFOIData.SBRR) Is Null Or (tblFOIData.SBRR) Like "*" & [Forms]![frmSearch]![SBRR] & "*")
AND ((tblFOIData.Address) Is Null Or (tblFOIData.Address) Like "*" & [Forms]![frmSearch]![Address] & "*")
AND ((tblFOIData.Postcode) Is Null Or (tblFOIData.Postcode) Like "*" & [Forms]![frmSearch]![Postcode] & "*")
AND ((tblFOIData.Description) Is Null Or (tblFOIData.Description) Like "*" & [Forms]![frmSearch]![Description] & "*")
AND ((tblFOIData.Start_Date_of_Liability) Is Null Or (tblFOIData.Start_Date_of_Liability) Between [Forms]![frmSearch]![Between_Start_Date_1] And [Forms]![frmSearch]![Between_Start_Date_2])
AND ((tblFOIData.[2017_RV]) Is Null Or (tblFOIData.[2017_RV]) Between [Forms]![frmSearch]![Between_2017_RV_1] And [Forms]![frmSearch]![Between_2017_RV_2])
AND ((tblFOIData.[2017_Effective_From]) Is Null Or (tblFOIData.[2017_Effective_From]) Between [Forms]![frmSearch]![Between_2017_Effective_1] And [Forms]![frmSearch]![Between_2017_Effective_2])
AND ((tblFOIData.[2017_Alteration_Date]) Is Null Or (tblFOIData.[2017_Alteration_Date]) Between [Forms]![frmSearch]![Between_2017_Alteration_1] And [Forms]![frmSearch]![Between_2017_Alteration_2])
AND ((tblFOIData.Compiled_2017_RV) Is Null Or (tblFOIData.Compiled_2017_RV) Between [Forms]![frmSearch]![Between_Compiled_RV_1] And [Forms]![frmSearch]![Between_Compiled_RV_2])
AND ((tblFOIData.Percentage_Increase) Is Null Or (tblFOIData.Percentage_Increase) Between [Forms]![frmSearch]![Between_Percentage_Increase_1] And [Forms]![frmSearch]![Between_Percentage_Increase_2])
AND ((tblFOIData.[2010_Rateable_Value]) Is Null Or (tblFOIData.[2010_Rateable_Value]) Between [Forms]![frmSearch]![Between_2010_RV_1] And [Forms]![frmSearch]![Between_2010_RV_2])
AND ((tblFOIData.[2017_UAR_Current]) Is Null Or (tblFOIData.[2017_UAR_Current]) Between [Forms]![frmSearch]![Between_UAR_Current_1] And [Forms]![frmSearch]![Between_UAR_Current_2])
AND ((tblFOIData.[2017_UAR_Historic]) Is Null Or (tblFOIData.[2017_UAR_Historic]) Between [Forms]![frmSearch]![Between_UAR_Historic_1] And [Forms]![frmSearch]![Between_UAR_Historic_2]));
最初の部分は完璧に動作しますが、私は「の間を追加するとき、私は「複雑すぎる」というエラーが表示されます'検索します。
私はこの検索を実行する最も効果的な方法ではないかもしれないが、この作業を行う方法があることは知っていますか?私はフォームのそれぞれの 'Between'検索に割り当てられたドロップダウンオプションを持っています。ドロップダウンからオプションを選択しなかった場合、条件をバイパスする方法はありますか?
Dim strSQL As String
strSQL = "SELECT tblFOIData.Start_Date_of_Liability FROM tblFOIData WHERE"
If (((([Forms]![frmSearch]![cmbStartDate_CriteriaSlection]<>"") Then
strSQL = strSQL + "Start_Date = tblFOIData.Start_Date_of_Liability "
End If
If (otherCriterium = True) Then strSQL = strSQL + "AND myCol = " + [myForm.value] + " "
' etc
strSQL = strSQL + ";"
' now execute the query
:
あなたの 'のWHERE'句では、'; 'を ';' ';' 'から削除し、' AND'で置き換えます。セミコロンは、SQLの文ターミネータです。 –
20の基準が多いです - 返されたレコードセットを「チャンク」で減らすことでこれを段階的に実行できませんか?私はここでサンプルを読んだりダウンロードしたりします。 http://allenbrowne.com/ser-62.html – Minty
Paulさん、ありがとうございました。でも、cmbStart_Date_CriteriaSelectionに何も置かれていないときに私が得た結果は得られません。何も配置されていない場合、私はこのステップを迂回するクエリをしたい、多分私はIf文を入れる必要がありますか? – jufg