ABA


"שינוי טבלה ע''י קוד VB באקסס"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #6276 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 6276
szargel

   23:35   11.06.03   
אל הפורום  
  שינוי טבלה ע''י קוד VB באקסס  
 
   יש לי טבלה באקסס, הטבלה מכילה מספר שדות, לצורך העניין היא נקראת Students, המפתח הראשי נקרא ID_Number.
אני מעוניין לבנות טופס בו יבחר אחד הסטודנטים. לאחר מכן המשתמש ילחץ על כפתור, התוכנה תבדוק האם שדה Left שווה לNo (שדה Left משוג Yes/No) ובמידה וכן, ישנה לYes ויכניס בשדה נפרד שנקרא Notes את הטקסט "עזב".
במידה והשדה Left כבד מוגדר כNo, התוכנית תציג למשתמש הודעת שגיאה.

איך עושים את זה? (הבעיה שלי היתה איך לגרום לאקסס להתייחס לרשומה הספציפית לה שייך מספר הזהות)


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  אתה צריך לפרט קצת יותר ilane 11.06.03 23:57 1
     תשובות szargel 12.06.03 00:02 2
         אם ככה, אז מדובר ב-VBA Dudenland 12.06.03 10:50 3
             תודה רבה. szargel 12.06.03 14:10 4
                 מאוד לא רצוי שיהיה שדה בטופס עם שם זהה לשדה ilane 12.06.03 19:20 5
                 תקרא טוב... Dudenland 12.06.03 20:59 6
                     עשיתי Copy + Paste szargel 12.06.03 21:01 7
                         מהמהמהמהמההההה ?!?!?!?! Dudenland 12.06.03 21:41 8
                             נו? szargel 12.06.03 22:20 9
                                 אהה... היית אומר... Dudenland 12.06.03 22:50 10
                                     חשבתי שזה ברור. szargel 12.06.03 23:25 13
                                 או יותר טוב ilane 12.06.03 22:54 11
                                     בהתחשב בזה שלא מדובר בעבודה לביצפר. szargel 12.06.03 23:23 12
                                         תוריד את הנקודה טקסט: faktoraa 13.06.03 00:30 14
                                             אם אני לא טועה, ע''פי ההגדרות של הפקד הזה Quant86 13.06.03 00:34 15
                                                 יש לאקסס קצת בעיות faktoraa 13.06.03 00:45 16
                                             זה פותר את הבעיה, תודה רבה. szargel 13.06.03 00:45 17
                                                 פשוט faktoraa 13.06.03 00:52 18
                                                     תודה רבה! szargel 13.06.03 01:04 19
                                                     יש גם אלטרנטיבה: Dudenland 13.06.03 11:53 20
                                                         אבל אז צריך לשנות את זה בכל מחשב בנפרד szargel 13.06.03 11:57 21
                                                             אםםם... אני לא כל-כך בטוח... Dudenland 13.06.03 12:48 22

       
ilane
חבר מתאריך 16.5.02
149 הודעות
   23:57   11.06.03   
אל הפורום  
  1. אתה צריך לפרט קצת יותר  
בתגובה להודעה מספר 0
 
דבר ראשון האם הטופס הוא בVBA או בVB

אני אצא מתוך הנחה שמדובר בVB ואז יש שאלות נוספות
איך אתה מתחבר לבסיס הנתונים adodb או adodc או משהו אחר

האם אתה עובד מקושר או לא

ובנוסף לכל זה אם notes הוא שדה בטבלת Students אין טעם לשמור
את הנתון גם בשדה left , בכל מקרה בזמן יצירת השאילתא ניתן לגרום
שיוצג טקסט בעיברית בהתאם לתוכן השדה left במקום Yes/No למשל בעזרת
IIF


ascii stupid question, Get a stupid ansi


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
szargel

   00:02   12.06.03   
אל הפורום  
  2. תשובות  
בתגובה להודעה מספר 1
 
   מדובר בVB המובנה בAccess, זה שאני לוחץ על מאפיינים של הכפתור, הולך לEvents, בOn Click לוחץ על ה3 נקודות ובוחר בCode Builder. אין לי מושג איך זה מתחבר לבסיס נתונים.
notes הוא שדה בטבלת Students, ויש משמעות לשמירה הכפולה גם בתיבת כן/לא וגם בשדה, לא אכפת לי איך לעשות את זה, העיקר שכאשר יקישו על הכפתור יקרו 2 הפעולות.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Dudenland

   10:50   12.06.03   
אל הפורום  
  3. אם ככה, אז מדובר ב-VBA  
בתגובה להודעה מספר 2
 
   מה שאתה צריך לעשות זה כזה דבר:

Private Sub cmb_Button_OnClick
Dim rs1

Set rs1 = CurrentDB.OpenRecordset("Students")
Do Until rs1.EOF
If rs1("ID_Number") = Text1.Text Then
If rs("Left") = "Yes" Then
DoCmd.OpenQuery("Updae_AZAV")
Else
MsgBox "שגיאה"
End If
End If
rs1.MoveNext
Loop
End Sub


כאשר:
cmb_Button הוא הכפתור שעליו הסטודנט לוחץ
Text1 היא תיבת טקסט שבה כתוב מספר הסטודנט
Update_AZAV היא שאילתת עדכון שמקבלת כפרמטרים את תיבת הטקסט כדי להתאים את הרשומה המיועדת לעדכון, לזו אשר מספר התלמיד בה זהה לתיבת הטקסט, ומעדכנת את השדה Notes ל-עזב

* אתה יכול גם לכתוב במקום השאילתה, משפט SQL כזה:


UPDATE Students
SET Students.Notes = "עזב"
WHERE Students.ID_Number = Forms!Your_Form_Name!Text1.Text

Dudenland


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
szargel

   14:10   12.06.03   
אל הפורום  
  4. תודה רבה.  
בתגובה להודעה מספר 3
 
   אבל הוא נותן לי שגיאה על השורה:

If rs1("ID_Number") = ID_Number.Text Then

השגיאה היא:

You can't refrence a property or method for a control unless the control has the focus

תודה מראש.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ilane
חבר מתאריך 16.5.02
149 הודעות
   19:20   12.06.03   
אל הפורום  
  5. מאוד לא רצוי שיהיה שדה בטופס עם שם זהה לשדה  
בתגובה להודעה מספר 4
 
בטבלה

תשנה את שם תיבת הטקסט


ascii stupid question, Get a stupid ansi


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Dudenland

   20:59   12.06.03   
אל הפורום  
  6. תקרא טוב...  
בתגובה להודעה מספר 4
 
   כנראה שלא העתקת טוב את מה שרשמתי...

Dudenland


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
szargel

   21:01   12.06.03   
אל הפורום  
  7. עשיתי Copy + Paste  
בתגובה להודעה מספר 6
 
   עבר עריכה לאחרונה בתאריך 12.06.03 בשעה 21:12
 
אבל אני אבדוק שוב.

עריכה:
בדקתי שוב, וזה בדיוק מה שאתה כתבת (עם השם הנכון של תיבת הטקסט כמובן)


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Dudenland

   21:41   12.06.03   
אל הפורום  
  8. מהמהמהמהמההההה ?!?!?!?!  
בתגובה להודעה מספר 7
 
   אבל כתבתי

If rs1("ID_Number") = Text1.Text Then

וגם הסברתי לך למטה למה כל שם-פקד מתייחס...

Dudenland


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
szargel

   22:20   12.06.03   
אל הפורום  
  9. נו?  
בתגובה להודעה מספר 8
 
   אצלך קראת לתיבה Text1, ואצלי קוראים לה ID_Number (ניסיתי גם שם אחר)
ובכל זאת אני מקבל הודעת שגיאה.
אתה יכול אולי להעלות מסד נתונים קטן עם טבלה + טופס?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Dudenland

   22:50   12.06.03   
אל הפורום  
  10. אהה... היית אומר...  
בתגובה להודעה מספר 9
 
   בכל מקרה... אתה יכול אולי להוסיף את השורה הבאה לפני תחילת הלולאה:

Dim str1 As String

str1 = ID_Number.Text


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

Dudenland


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
szargel

   23:25   12.06.03   
אל הפורום  
  13. חשבתי שזה ברור.  
בתגובה להודעה מספר 10
 
   בכל מקרה כשאני עושה את מה שאתה מציע, הוא נותן לי את אותה הודעת שגיאה על השורה השניה בקוד שלך.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ilane
חבר מתאריך 16.5.02
149 הודעות
   22:54   12.06.03   
אל הפורום  
  11. או יותר טוב  
בתגובה להודעה מספר 9
 
תעלה את הקובץ שלך ואז נוכל לראות בדיוק במה מדובר
ולא ננסה ליצור את הבעיה אצלנו

אתה יכול למחוק את כל הטבלאות הטפסים והשאילתות
שלא נעשה בהם שימוש בחלק הזה כדי לחסוך מקום


ascii stupid question, Get a stupid ansi


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
szargel

   23:23   12.06.03   
אל הפורום  
  12. בהתחשב בזה שלא מדובר בעבודה לביצפר.  
בתגובה להודעה מספר 11
 
   אלא בתוכנה שמכילה נתונים אמיתיים, של אנשים אמיתיים.
והתוכנה הזאת נכתבת עבור מישהו מסויים (בתשלום) אני מעדיף שלא להעלות את הקובץ....


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
faktoraa

   00:30   13.06.03   
אל הפורום  
  14. תוריד את הנקודה טקסט:  
בתגובה להודעה מספר 12
 
   אהלן.


'If rs1("ID_Number") = ID_Number.Text Then
If rs1("ID_Number") = ID_Number Then

תגיד לי אם עובד.

א.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Quant86

   00:34   13.06.03   
אל הפורום  
  15. אם אני לא טועה, ע''פי ההגדרות של הפקד הזה  
בתגובה להודעה מספר 14
 
   עבר עריכה לאחרונה בתאריך 13.06.03 בשעה 00:35
 
ה Property שאחראי על פניה ישירה לשם של האובייקט יחזיר לך כאילו שכתבת נקודה טקסט, אולם אם פוקוס זה מה שהוא רוצה אז פשוט תיתן לו פוקוס....
id_number.SetFocus
ואחרי זה תפנה אליו, הייתה לי בעיה שזה פשוט היה בלתי אפשרתי לעשות SETFOCUS

אז הוספתי מספר תוויות, עשיתי אותן במצב HIDDEN, ופשוט התוויות מקבלות את התוכן של התיבות טקסט ברגע שמשתנה התוכן של תיבות הטקסט, הפניה מתבצעת ככה
Label.Caption
ופה לא צריך שום פוקוס, כמובן שזו שיטה דבילית לחלוטין, אבל אין מה לעשות, זה אקסס, וזה VB, שלא לדבר על VBA...

ד"א אשמח לדעת אם יש עוד שיטות, כי כל מה שמצאתי זה לפי נסיון מר ולא לפי חוכמה גדולה :/


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
faktoraa

   00:45   13.06.03   
אל הפורום  
  16. יש לאקסס קצת בעיות  
בתגובה להודעה מספר 15
 
   בVBA של אקסס יש לו לפעמים בעיה עם הביטוי של textbox.text.
הדבר לא ברור למה, לא כמו בVB.
אני יודע שההורדה של הנקודה text פותרת את הבעיה באקסס.

א.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
szargel

   00:45   13.06.03   
אל הפורום  
  17. זה פותר את הבעיה, תודה רבה.  
בתגובה להודעה מספר 14
 
   עכשיו בעיה קטנה:
מכיוון שהעדכון נעשה בשאילתא(Update Query), המחשב מבקש את אישור המשתמש פעמיים, איך מבטלים את זה?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
faktoraa

   00:52   13.06.03   
אל הפורום  
  18. פשוט  
בתגובה להודעה מספר 17
 
   לפני הפעלת השאילתה:

DoCmd.Setwarnings false

ולאחר סיום השאילתה:


DoCmd.Setwarnings true

א.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
szargel

   01:04   13.06.03   
אל הפורום  
  19. תודה רבה!  
בתגובה להודעה מספר 18
 
   עזרת לי מאוד.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Dudenland

   11:53   13.06.03   
אל הפורום  
  20. יש גם אלטרנטיבה:  
בתגובה להודעה מספר 18
 
   אפשר לבטל זאת לחלוטין ע"י "כלים" -> "אפשרויות" וכו' וכו'...

Dudenland


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
szargel

   11:57   13.06.03   
אל הפורום  
  21. אבל אז צריך לשנות את זה בכל מחשב בנפרד  
בתגובה להודעה מספר 20
 
   לא?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Dudenland

   12:48   13.06.03   
אל הפורום  
  22. אםםם... אני לא כל-כך בטוח...  
בתגובה להודעה מספר 21
 
   לדעתי זה שומר את ההגדרות לכל מסד-נתונים בנפרד, בתוך קובץ מסד הנתונים...
אבל מה יקרה אם תנסה...

Dudenland


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net