אקסס SQL: תנאי כפול (לא בני גד)
-
איך עושים בצורה הכי פשוטה, תנאי, שיחול רק בתנאי.
ואסביר, אם אני משתמש בIIF או בswitch במשפט WHERE, זה נותן לי רק תנאי השוואה על תנאי. אם אני רוצה תנאים יותר מורכבים, כגון,
אם טקסטבוקס פלוני מלא, הצג רק את הרשומות השוות לאותו טקסט.
אם התאריך בתיבה הנ"ל הוא 11 בספטמבר 2001, הצג הכל.
ואם היא ריקה, הצג רשומות between תאריך פלוני לתאריך פלמוני. את זה IIF לא נותן, משום שהוא מחזיר ערך אחד, ואותו הWHERE משווה לערך בשדה.
מקווה שהדברים הובנו כהלכתם. -
@Shmuel754 אמר באקסס SQL: תנאי כפול (לא בני גד):
השאלה מאיפה אתה מפעיל את השאילתה.
זה ברור שאם אני עורך את ה-sourcerecord של הטופס/דוח בקוד, אני יכול לעשות ככל העולה על רוחי. אבל אני העדפתי כן שאילתה שמורה ופשוטה באקסס.
-
@בעזרתו אמר באקסס SQL: תנאי כפול (לא בני גד):
@Shmuel754 אמר באקסס SQL: תנאי כפול (לא בני גד):
השאלה מאיפה אתה מפעיל את השאילתה.
זה ברור שאם אני עורך את ה-sourcerecord של הטופס/דוח בקוד, אני יכול לעשות ככל העולה על רוחי. אבל אני העדפתי כן שאילתה שמורה ופשוטה באקסס.
תשמור את השאילתה ללא תנאי, ובקוד תשלוף את השאילתה ותצמיד את התנאי מהפונקציה ותפעיל.
-
אם טקסטבוקס פלוני מלא, הצג רק את הרשומות השוות לאותו טקסט.
אם התאריך בתיבה הנ"ל הוא 11 בספטמבר 2001, הצג הכל.
ואם היא ריקה, הצג רשומות between תאריך פלוני לתאריך פלמוני. את זה IIF לא נותן, משום שהוא מחזיר ערך אחד, ואותו הWHERE משווה לערך בשדה.@בעזרתו תעשה את זה עםשילוב של AND וOR
WHERE (textBox = "11 בספטמבר 2001") OR (textBox <> "" AND Field like textBox) OR (textBox = "" AND Field2 between dateA and dateB)
כמו"כ כמו ש@Shmuel754 כתב תוכל לעשות פונקציה שמקבלת את כלל השדות הנלקחים בחשבון ומחזירה כן או לא ואז הכל בWHERE ככה:
WHERE MyFunc(field1, field2, textBox)
לדעתי כל עוד אפשר להימנע מפונקציה זה עדיף כי זה פחות בר התייעלות במנוע הפנימי של אקסס.
-
@dovid אמר באקסס SQL: תנאי כפול (לא בני גד):
אם טקסטבוקס פלוני מלא, הצג רק את הרשומות השוות לאותו טקסט.
אם התאריך בתיבה הנ"ל הוא 11 בספטמבר 2001, הצג הכל.
ואם היא ריקה, הצג רשומות between תאריך פלוני לתאריך פלמוני. את זה IIF לא נותן, משום שהוא מחזיר ערך אחד, ואותו הWHERE משווה לערך בשדה.@בעזרתו תעשה את זה עםשילוב של AND וOR
WHERE (textBox = "11 בספטמבר 2001") OR (textBox <> "" AND Field like textBox) OR (textBox = "" AND Field2 between dateA and dateB)
כמו"כ כמו ש@Shmuel754 כתב תוכל לעשות פונקציה שמקבלת את כלל השדות הנלקחים בחשבון ומחזירה כן או לא ואז הכל בWHERE ככה:
WHERE MyFunc(field1, field2, textBox)
לדעתי כל עוד אפשר להימנע מפונקציה זה עדיף כי זה פחות בר התייעלות במנוע הפנימי של אקסס.
דוד המלך.
לכזה דבר חיכיתי, כמה פשוט ככה פשוט.
תודה.