שאלה באקסס // שאילתא לפי שם כפתור
-
אני בונה תוכנת חיפוש ספרים לפי ספריה לדוגמא יש לי טופס שבו עשיתי כפתור לכל מדף
ועשיתי ששם כל כפתור לפי מס' המדף כעת אני רוצה שבלחיצת הכפתור השאילתה תזהה את שם הכפתור ותסנן על פיו.
יש מישהו שיכול לעזור לי איך עושים את זה.. -
@אוריי
תשתמש עם הערך caption של הלחצן.
ככה strQuName = cmdButton1.caption
המשתנה strQuName יקבל את הערך של שם הלחצן. -
@מלא
אני אשמח להסבר יותר מפורט
תודה -
@אוריי
איפה הבעיה שלך מתחילה,
אם לא היו לך כמה לחצנים, רק לחצן ותיבת טקסט עם מספר המדף המבוקש,
איך היית מסנן את השאילתה? -
@מלא
לדוגמא יש לי טופס כזה
כך שכל לחצן הוא מס' מדף ואני רוצה שבעת הלחיצה אני יקבל את כל הספרים הקיימים במדף הספציפי הזה
עד כה יכולתי לעשות שאילתא על כל לחצן אבל אני רוצה לקצר את זה ע''י שהאקסס יזהה את שם הכפתור (לא הכיתוב) ולפי''ז הוא יפעיל את השאילתא כך שאפ שם המדף הוא 5 יביא לי את כל הספרים שיש במדף 5.. -
@אוריי
כדי לקבל את שם הלחצן אתה יכול להשתמש עם activecontrol.name
אם זה עדיין לא עוזר לך,
עיין שוב בשאלה שלי למעלה. -
@מלא
הקישור לא עובד
2. סורי לא התעמקתי במה ששאלת
הייתי עושה טופס פשוט עם שאילתא כאשר השאילתא משתנה לפי מה שכתבתיבטופסבתיבת טקסט -
@אוריי אמר בשאלה באקסס // שאילתא לפי שם כפתור:
הייתי עושה טופס פשוט עם שאילתא כאשר השאילתא משתנה לפי מה שכתבתי בטופס בתיבת טקסט
מצויין.
מה שאני הבאתי לך ב2 התשובות, זה במקום התיבת טקסט,
תצטרך לשים אירוע בכל לצחן שיפעיל את הטופס,
ובמקום תיבת הטקסט תכניס את זה activecontrol.name [זה לא קישור, זה קוד].. -
@מלא
הרבה תודה עד כה
רק עוד פרט קטן כל פעם שאני לוחץ על פקד כאשר השאילתה פתוחה הוא לא מרענן את הדף
איזה פקודה אני צריך לכתוב כדי שירענן את השאילתה?
תודה מראש.. -
@אוריי תשתמש במתודה Requery
-
@OdedDvir
לא עובד לי
יכול להיות אולי שלא כתבתי טוב
אני כתבתי כךDoCmd.Requery "pp"
-
@אוריי אתה צריך לקרוא למתודה על האובייקט שאתה מעדכן
היכן מוצגת השאילתא? האם בטופס משנה או בטופס חדש? -
@אוריי
אם השאילתה מוצגת בטופס, אתה צריך לרענן את הטופס
(אם הוא בטופס משנה, מספיק לרענן רק את פקד הטופס משנה)כדי לרענן טופס מתוך טופס אחר,
אתה כותב לו כך forms!שם_טופס(!שם_טופס_משנה).Requeryאם הנתונים לא מוצגים בטופס משנה, תמחוק את הסוגריים.
-
-
@אוריי תפרט בבקשה מה הקוד VBA שמציג את השאילתה (בארוע לחיצה על הפקד)
-
Me!a = Me.ActiveControl.Name DoCmd.OpenQuery "qq", acViewNormal DoCmd.Requery "pp"
-
@אוריי תסגור את השאילתא הפתוחה ותפתח אותה מחדש
docmd.Close acQuery, "qq" 'תעדכן את השאילתא docmd.OpenQuery "qq"
תנסה אולי הקוד הבא יעבוד (בלי לסגור ולפתוח)
DoCmd.SelectObject acQuery, "qq" DoCmd.Requery
-
@OdedDvir
לא הבנתי מה אני אמור להחליף
אתה יכול לכתוב לי את כל הפקודות מסודר?
תודה -
-
@אוריי יפה. אבל נראה לי שאם השאילתה עדיין לא פתוחה תקבל שגיאה.. נכון?
-
@OdedDvir אמר בשאלה באקסס // שאילתא לפי שם כפתור:
@אוריי יפה. אבל נראה לי שאם השאילתה עדיין לא פתוחה תקבל שגיאה.. נכון?
לא!
זה עובד מצוין
כי הוא מנסה לסגור ואם הוא סגור הוא עובר לפקודה הבאה שצריך לפתוח אותהרק עוד שאלה קטנה אם אני צריך לעשות את אותם הפעולות בטופס מה אני משנה ולמה?
-
@אוריי אמר בשאלה באקסס // שאילתא לפי שם כפתור:
רק עוד שאלה קטנה אם אני צריך לעשות את אותם הפעולות בטופס מה אני משנה ולמה?
אם זה הטופס הפעיל פשוט תכתוב
Me.Requery
אם זה טופס משנה של הטופס הפעיל, ושם הפקד של טופס המשנה הוא foo
Me.foo.Form.Requery
אם זה טופס אחר (שלא פעיל) אפשר באופן דומה לשאילתא
DoCmd.SelectObject acForm, "MyFormName" DoCmd.Requery
או
Forms("MyFormName").Requery
-
@OdedDvir אני מרשה לעצמי להזכיר לך שפתיחה של שאילתה באופן של DoCmd.OpenQuery עלולה לאפשר למשתמש לשנות נתונים בטבלאות, ואם זו לא ההתנהגות שאתה מחפש, תציין זאת במפורש בפתיחה:
DoCmd.OpenQuery "qq", acViewNormal, acReadOnly
-
@OdedDvir
תודה
בכל אופן זה לשימוש האישי שלי -
-
ככה Me.YourTabPage.SetFocus
שנה את YourTabPage לשם הדף. -
@אוריי באקסס ניתן לכתוב ולקרוא למשתנה עם שם הפקד של הכרטיסיה, על מנת לקבל את מספר הכרטיסת הפתוחה או לעבור לכרטסת מסויימת. הכרטיסיות ממוספרות עם בסיס 0, ז"א הכרטסת הראשונה מספרה 0, השנייה 1 וכו'.
ניתן לעבור אל כרטסת על ידי כתיבה למשתנה עם שם הפקד.
למשל כדי לעבור לכרטסת השלישית, נכתוב את המספר 2:me.TabCtrName = 2
כדי לבדוק איזה כרטסת מוצגת כרגע, אפשר לקרוא את הערך בפקד
if me.TabCtrlName = 1 then ... 'אם הכרטסת השנייה פתוחה
-
-
@OdedDvir
מתנצל על ההפרעה אבל אשמח ליותר פירוט -
@אוריי מה שם פקד הכרטיסיה בטופס?