טופס חיפוש

ty123

New member
טופס חיפוש

יש לי טופס שמבצע חיפוש על מסד נתונים, הטופס מורכב מתיבות משולבות בהן נבחרים ערכים כקריטריונים לחיפוש. יותר קריטריונים => פחות תוצאות. כרגע כל הערכים שהמשתמש בוחר נכנסים למשפט SQL, כך שבעצם כדי שהחיפוש יתבצע עליו לבחור ערך בכל תיבה משולבת. אני רוצה שיתאפשר למשתמש לבחור אילו תיבות למלא, כאשר תיבה שהוא לא בוחר בה ערך לא תהווה בעיה במשפט הSQL שמודיע על בעיה( invalid use of null) כשהתיבה ריקה. בנוסף הטופס שומר את הערכים מהפעם הקודמת שחיפשו, כיצד אני גורמת לכך שכל פעם מחדש הכל יהיה ריק עד שיבחר ערך על ידי המשתמש? מקווה שהשאלות שלי הובנו. תודה מראש לעונים.
 

א ו ר ח ת

New member
איך בנויה השאילתה?

יש כמה דרכים להתייחס לזה, 1. אם את בונה שאילתה פשוטה שמצביעה לתיבות האלה, תוסיפי לכל קריטריון את הפונקציה nz() וברגע שזה NULL תרשמי קרטריון שיתאים תמיד. 2. אני הייתי ממליצה ליצור את השאילתה הזו בקוד, באירוע בעת לחיצה של הכפתור צרי את השאילתה לפי התיבות שנבחרו (בדקי לפני זה איזה תיבות נבחרו) יש לזה דוגמא בשאלות הנפוצות, בניית שאילתה דינמית. 3. לנקות את הטופס: צרי רענון לטופס לאחר קריאת תוצאות החיפוש, או שימי ערכים חדשים מקוד לתיבות הנבחרות. בהצלחה!
 

ty123

New member
סליחה על האורך

השאילתה שאני מעוניינת בה היא לפי סעיף 2 שכתבת - שאילתה דינמית הכתובה בקוד. הסתכלתי בשאלות הנפוצות בשאלה : "כיצד שואבים נתונים מתיבות רשימה (ListBox ו- ComboBox)" (אם לזה התכוונת שיעזור לי...) אבל אצלי אין תיבת רשימה שבה יש בחירה מרובה אלא מספר תיבות משולבות שכל אחת מהן יכולה לצמצם את הבחירה,המטרה שאם היא לא נבחרת אז בסעיף שלה לא יצומצם כלום לדוגמא: אני מעוניינת לבחור קורס כללי באוניברסיטה, מוצג לי טופס חיפוש שבו יש מספר תיבות משולבות: יש תיבה משולבת שבה נבחרת: הפקולטה יש תיבה משולבת שבה נבחר : היום יש תיבה משולבת שבה נבחרת : השעה יש תיבה משולבת שבה מצוין סוג המטלה : ( מבחן אמריקאי או מבחן פתוח או עבודה ) וכו' הבעיה היא שהערכים בכל תיבה משולבת מתבססים על שדה רלוונטי בטבלת הקורסים,כיצד אני אתייחס במשפט ה-SQL למקרה של תיבה שלא נבחר בה כלום,כלומר נשארה ריקה.לדוגמא: לא נבחר כלום בפקולטה וביום ונבחר בתיבת השעה 12 ובסוג המטלה עבודה.התוצאה הרצוייה היא שיציג קורסים כלליים מכל הפקולטות בכל הימים אך רק עם מטלה של עבודה ובשעה 12 בצהריים. כך נראה המשפט: STR = "SELECT * FROM [courses] WHERE [Faculty] = '" & FacultyName & "' AND יש המשך למשפט המתייחס לכל תיבה משולבת אני לא יודעת איך להוסיף את הקוד שיענה לי נכון על הבעיה???
 

גרי רשף

New member
נסה כך

בהתחלה צור את התנאי בהמשכים, ורק בסוף הוסף את תחילת ה-SQL (הקטע עם ה-Select). יש לבדוק אם הוזן ערך לקומבו ורק אז להוסיף את התנאי
Str=iif(IsNull(Faculty]),"","[Faculty]='" & FacultyName & "'")​
מהתנאי השני ואילך יש לבדוק אם יש משהו כבר בתנאי כדי לדעת אם להוסיף And לפניו
Str=iif(str="",""," And ") & iif(IsNull([Taarih],"","[Taarih]='" & Taarih & "'")​
יש להמשיך ככה עם שאר התנאים, ורק אז להוסיף את מה שבהתחלה. יש לבדוק אם יש איזשהו תנאי כדי לדעת אם יש צורך ב-Where:
Str="Select ... From ...." & iif(Str="",""," Where " & Str)​
קשה קצת להצליח בכתיבת הקוד במכה אחת, וכדאי בפעם הראשונה להתקדם צעד צעד בקוד ולראות מה הערך של Str בכל שלב, ואם משהו משתבש- להבין למה ולתקן. בהצלחה.
 

גרי רשף

New member
גם אני אינני חסין בפני שגיאות

בשורה השלישית בהודעה שלי בדיקת ה-IsNull צריכה להיות על הקומבו FacultyName ולא על השדה בטבלה; וכך גם בהמשך.
 

א ו ר ח ת

New member
>>>>

קודם כל יש לזכור דבר חשוב שמתייחסים לתיבות משולבות - מי המפתח של התיבה? טקסט או מספר? כי אם זו תיבה שנשלפת מטבלה שיש לה קוד מוסתר ואחרי זה הטקסט, אז לא לשכוח להתייחס לזה בהתאם . אני חייבת לציין שהשיטה של גרי טובה, ולא חשבתי עליה עד היום, אני יישמתי את זה עד היום, בדרך פשוטה של IF עם דגל, אבל תמיד לומדים דברים חדשים, ורעיונות חדשים.
 

ty123

New member
שאלה

תודה רבה על העזרה, ניסיתיכבר זמן רב להבין את המשפט שכתבת אך ללא הצלחה רבה. רציתי לבדוק האם השמות שאני מתייחסת אליהם הם כמו שאתה התייחסת בתשובתך. אצלי במשפט שכתבתי ב-select : Faculty זה שם שדה בטבלה FacultyName זה שם המשתנה שקבל קודם לכן את הערך של הקומבו על ידי: FacultyName = txtFacultyName אם תוכל להסביר לי בבקשה את חלקי המשפט זה יעזור לי מאד... (& "'" Str=iif(IsNull( )),"","[Faculty]='" & FacultyName לסוגריים של הפונקציה isnull מכניסים את שם הקומבו: txtFacultyName ומה בחלק השני? שוב תודה רבה על העזרה!!!
 

א ו ר ח ת

New member
>>>>

אין צורך להעביר את הערך מהתיבה למשתנה את יכולה להשתמש ישר מהתיבה. בדוגמא מופיע בסוגריים המרובעים השם של השדה בטבלה עצמה שיעשה עליה החיפוש, ואילו לאחר השווה מופיע הערך אותו משווים אליו (המשתנה או התיבה המשולבת שלך) בתוך ה isnull רשמי את המשתנה או התיבה במשולבת בכדי לדעת אם נעשתה בחירה . בהצלחה!
 

ty123

New member
תודה רבה לכלכם, אתם מקסימים!!!

תודה רבה לכל מי שמגיב, אני מנסה כל הזמן את מה שכותבים לי כאן וזה ממש עוזר ובעיקר מלמד !!! בתקווה שאחרי שאסיים את המערכת אותה אני בונה, אדע מספיק טוב ואוכל לעזור גם לאחרים... ו-24sharon קובץ הטקסט נפתח אצלי ב-"גיבריש", אשמח מאד אם תוכלי לשלוח שוב.
 

24sharon

New member
לא פותח

אתה עומד על הקובץ לוחץ לחצן ימיני על הקובץ ומהרשימה הנגללת אתה בוחר שמירת יעד כ: או באנגלית save target as ובמסך הנפתח אתה משנה את הסיומת לMDB, בהצלחה!
 

ty123

New member
הודעה מוזרה

כשאני פותחת את הקובץ לאחר שאני שומרת כקובץ mdb על המחשב שלי אני מקבלת הודעה כזו: microsoft access canot open this file this file is located outside your intranet or on an untrusted site. Microsoft access will not open the file due to the potential security problems. To open this file copy it to your machine or an accessible network location אבל זה כבר על המחשב שלי?!?!
 

ty123

New member
סליחה שאני משגעת אותך...

לא קשור דווקא למה ששלחת, בבעיה הזו אני נתקלתי בעבר כאשר אני עובדת על מחשב מסויים ושולחת את קובץ ה-mdb דרך המייל כדי לעבוד עליו על מחשב אחר. הקובץ לא נפתח לי כמו שהוא ואני יכולה לפתוח אותו רק כאשר אני שומרת אותו באופן שאת שלחת לי את הקובץ (קובץ שנראה כמו ערימה של ספרים) אבל אז נפתחת לי הודעה והוא לא נותן לי לעבוד כמו שצריך על הקובץ. ההודעה: The expression on load you entered as the event property setting produced the following error: A problem occurred while Microsoft access was communicating with the ULE server or activeX control איך לפתור בעיה זו,אני חייבת לעבוד על מחשבים שונים ולהעביר את קובץ ה-mdb במייל???
 

notmail

New member
למה """"?

like " & """" & "*" & c_firstname & "*" & """" תוכלי בבקשה להסביר למה רשמת את """" בהתחלה ובסוף?
 
למעלה