ABA


"איך אני משלב ב VB קובץ של ACCESS הסבר בפנים"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #8846 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 8846
Board_Man

   17:02   14.01.03   
אל הפורום  
  איך אני משלב ב VB קובץ של ACCESS הסבר בפנים  
 
   אני רוצה לבנות תוכנה שברגע שאני רושם לה מספר כלשהו היא תתן לי פרטים מתוך מסד הנתונים !

איך עושים ת זה ?


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

  האשכול     מחבר     תאריך כתיבה     מספר  
  תשובה faktoraa 14.01.03 18:51 1
     האאא אחי אין לי מילים !!! תודה רבה ! Board_Man 14.01.03 22:37 2
         הוספת רשומה ועריכה faktoraa 15.01.03 00:42 3
     כל הכבוד על ההשקעה codmaster 15.01.03 13:33 4
         פצצצוווות אחי תודה רבה לך ... אין מילים :) Board_Man 15.01.03 14:05 5
             אחי זה לא טוב ... Board_Man 15.01.03 14:37 6
                 פתרון faktoraa 15.01.03 14:59 7
                     אחי זה שוב לא עולה !! + תמונה Board_Man 15.01.03 15:22 8
                         בעיה בשם של הטבלה faktoraa 15.01.03 16:04 10
  up Board_Man 15.01.03 16:00 9
     ישששש Board_Man 15.01.03 16:18 11
         כל הכבוד על התשובות המפורטות eev 21.01.03 16:55 12

       
faktoraa

   18:51   14.01.03   
אל הפורום  
  1. תשובה  
בתגובה להודעה מספר 0
 
   עבר עריכה לאחרונה בתאריך 14.01.03 בשעה 19:30
 
אהלן Board_man

לשאלה שלך יש כמה וכמה אפשרויות, זה תלוי איזה מסד נתונים, מה אתה רוצה לעשות וכו'. אבל האפשרות הטובה ביותר היום היא בעזרת שימוש במה שנקרא ADO. זוהי טכנולוגיה לגישה למסדי נתונים ActiveX Data Objects. הרעיון בכללי מאד היא שאתה פותח קישור (CONNECTION) למסד נתונים כלשהו, ואז מבצע קריאות/כתיבות מהמסד נתונים. אחד היתרונות של הטכנולוגיה היא שאם אתה מחליף סוג של מסד נתונים נגיד מאקסס לשרת SQL כל שעליך לעשות הוא לשנות שורת קוד אחת בתוכנית שלך.

ישנם המון המון אתרים והסברים על ADO באינרנט ולא אכנס לכל ההסברים האלה כאן. אבל שלא תגיד שסתם קישקשתי ולא עניתי לך על השאלה אז להל"ן דוגמא לעבודה בסיסית עם אקסס מתוך תוכנית של VB.

תיאור כללי:
יש לנו על טופס 2 שדות טקסט וכפתור אחד לחיפוש :
1) מספר תעודת זהות לחיפוש. (txtTZ)
2) שם של בעל תעודת הזהות שחיפשנו. (txtName)
3) כפתור חיפוש. (cmdFind)

כמובן שיש לנו טבלה במסד נתונים (db1.mdb) שנקראת Table1 ובטבלה 2 שדות:
1) TZ המייצג את תעודת הזהות.
2) personName המייצג את שם הבן אדם.

דבר ראשון שעלינו לעשות בפרוייקט של VB זה להוסיף הפניה לADO:
נכנסים לתפריט PROJECT ובוחרים REFERENCES ומדפדפים ומסמנים את:
Microsoft ActiveX Data Objects 2.5 Library
אם אין את 2.5 כל אחת מהגרסאות תעבוד עם הדוגמה הזאת.

עכשיו לקוד.
להל"ן קטע הקוד של אירוע הקליק של כפתור החיפוש ביחד עם הסברים.


Private Sub cmdFind_Click()
'הגדרת משתנים לקישור ולרשומה
Dim conn As New ADODB.Connection 'זהו אובייקט קישור למסד נתונים
Dim rs As New ADODB.Recordset 'זהו אובייקט רשומה לשליפת נתונים מתוך טבלה

'דבר ראשון נבדוק שהוזן טקסט בשדה חיפוש
If txtTZ.Text = "" Then
'לא הוזן טקסט ולכן נאפס את המשתנים,ניתן הודעה ונצא מהרוטינה
Set conn = Nothing
Set rs = Nothing

MsgBox "נא להזין ת.ז. לחיפוש"

Exit Sub
End If

'כעת נגדיר את הקישור למסד הנתונים
'כמובן שיש לשנות את שם מסד הנתונים והמיקום שלו למה שאתה צריך
conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\db1.mdb"

'עכשיו פתיחה של הקישור
conn.Open

'עכשיו ננסה לחפש בטבלה את הרשומה של בעל תעודת הזהות
'נפתח את הרשומה עם שאילתה פשוטה
rs.Open "SELECT * FROM Table1 WHERE TZ='" & txtTZ.Text & "'", conn

'כעת נבדוק האם נמצאה רשומה כזאת
If Not rs.EOF Then
'נימצאה הרשומה, נציג בתיבת השם את התוצאה
txtName.Text = rs!personName
Else
'אין בן אדם כזה, נציג שלא נימצא הבן אדם
txtName.Text = "לא נימצא אדם עם התעודת זהות שהקשת"
End If

'מה שנותר זה לסגור את המשתנים שלנו ולשחרר אותם מהזיכרון
rs.Close
conn.Close

Set rs = Nothing
Set conn = Nothing
End Sub

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

שמחתי.
א.




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

   22:37   14.01.03   
אל הפורום  
  2. האאא אחי אין לי מילים !!! תודה רבה !  
בתגובה להודעה מספר 1
 
   האאא אחי אין לי מילים !!! תודה רבה !

הבנתי הכל !

רק אני עוד רוצה לדעת איך להוסיף רשומה למסד נתונים ... כמובן ב access

לדוגמא שאני מזין את 5454545 ל txt_TZ שיכנס לעמודה חדשה במסד הנתונים
+ השם TEST שנמצא ב txt_Name

תודה רבה !


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

   00:42   15.01.03   
אל הפורום  
  3. הוספת רשומה ועריכה  
בתגובה להודעה מספר 2
 
   שוב שלום.

אני שמח שעזרתי לך בסעיף הקודם.
עכשיו לעניין עריכת רשומה או הוספת רשומה:

בוא נגיד שהתוכנית תעשה את אותו הדבר כמו בדוגמה הקודמת ואז, אחרי שהעלינו את פרטי בעל תעודת הזהות, נשנה את השם (באותו מקום בטופס) ואז נלחץ על כפתור "שמור" (cmdSave). כמו שתראה כאן, רוב הקוד הוא זהה לקודם, כמובן שניתן לאחד אותם ולא צריך כל פעם לפתוח קישור ואובייקט רשומה חדשים אלה אפשר להשתמש במשתנים כלליים ונגיד לפתוח קישור כאשר פותחים את הטופס ולסגור קישור כאשר יוצאים ממנו. התוכנית המצורפת משתמשת בשיטה היותר נכונה אם תרצה להתבונן בה. כאן (בגוף התגובה) השתמשתי בשיטה הפחות נכונה אבל עובדת. כמו כן, התוכנית בודקת אם קיימת תעודת זהות שהוזנה, במידה וכן היא שומרת את השם החדש ובמידה ולא, היא מוסיפה רשומה עם תעודת הזהות והשם שהוזנו.


Private Sub cmdSave_Click()
'הגדרת משתנים לקישור ולרשומה
Dim conn As New ADODB.Connection 'זהו אובייקט קישור למסד נתונים
Dim rs As New ADODB.Recordset 'זהו אובייקט רשומה לשליפת נתונים מתוך טבלה

'דבר ראשון נבדוק שהוזן טקסט בשדה חיפוש
If txtTZ.Text = "" Then
'לא הוזן טקסט ולכן נאפס את המשתנים,ניתן הודעה ונצא מהרוטינה
Set conn = Nothing
Set rs = Nothing

MsgBox "נא להזין ת.ז. לחיפוש"

Exit Sub
End If

'כמו כן גם נבדוק שהוזן שם בתיבה המתאימה
If txtName.Text = "" Then
'לא הוזן טקסט ולכן נאפס את המשתנים,ניתן הודעה ונצא מהרוטינה
Set conn = Nothing
Set rs = Nothing

MsgBox "נא להזין שם לעדכון"

Exit Sub
End If

'כעת נגדיר את הקישור למסד הנתונים
'כמובן שיש לשנות את שם מסד הנתונים והמיקום שלו למה שאתה צריך
conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\db1.mdb"

'עכשיו פתיחה של הקישור
conn.Open

'עכשיו ננסה לחפש בטבלה את הרשומה של בעל תעודת הזהות
'נפתח את הרשומה עם שאילתה פשוטה
'תשים לב לפרמטרים בסוף השורה, מאחר ואנחנו רוצים לכתוב למסד הנתונים
'צריך לתת פרמטרים של הרשאות כתיבה
'ישנם כמה שיטות לזה, זו אחת מהן
rs.Open "SELECT * FROM Table1 WHERE TZ='" & txtTZ.Text & "'", conn, adOpenDynamic, adLockOptimistic

'כעת נבדוק האם נמצאה רשומה כזאת
If Not rs.EOF Then
'נימצאה רשומה כזאת, נשמור את השם החדש
rs!personName = txtName.Text

'הפקודה הבאה בעצם עושה את פעולת השמירה למסד הנתונים
rs.Update

'ניתן הודעה על שינוי של שם
MsgBox "השם שונה בהצלחה"
Else
'אין בן אדם כזה, נוסיף חדש
'הפקודה הבאה מוסיפה רשומה לטבלה
rs.AddNew

'עכשיו נזין שם את הערכים החדשים
rs!TZ = txtTZ.Text
rs!personName = txtName.Text

'הפקודה הבאה בעצם עושה את פעולת השמירה למסד הנתונים
rs.Update

'ניתן הודעה על הוספת רשומה
MsgBox "הוספת רשומה עברה בהצלחה"
End If

'מה שנותר זה לסגור את המשתנים שלנו ולשחרר אותם מהזיכרון
rs.Close
conn.Close

Set rs = Nothing
Set conn = Nothing
End Sub

שוב שמחתי לעזור.

א.




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

   13:33   15.01.03   
אל הפורום  
  4. כל הכבוד על ההשקעה  
בתגובה להודעה מספר 1
 
   יישר כח


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

   14:05   15.01.03   
אל הפורום  
  5. פצצצוווות אחי תודה רבה לך ... אין מילים :)  
בתגובה להודעה מספר 4
 
   פצצצוווות אחי תודה רבה לך ... אין מילים



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

   14:37   15.01.03   
אל הפורום  
  6. אחי זה לא טוב ...  
בתגובה להודעה מספר 5
 
   תתן לי בבקשה את הקוד הנקי ... בלי כל החיפושים .....

קוד נקי ששומר 3 תיבות טקסט !!!

תודה


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

   14:59   15.01.03   
אל הפורום  
  7. פתרון  
בתגובה להודעה מספר 6
 
   אהלן.

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


Private Sub cmdSave1_Click()
'הגדרת משתנים לקישור ולרשומה
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset

'פתיחת קישור למסד הנתונים
conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\db1.mdb"

'עכשיו פתיחה של הקישור
conn.Open

'פתיחת רשומה עם מבנה הטבלה
rs.Open "SELECT * FROM Table1", conn, adOpenDynamic, adLockOptimistic

'הוספת רשומה
'הפקודה הבאה מוסיפה רשומה לטבלה
rs.AddNew

'עכשיו נזין שם את הערכים החדשים
'צריך כמובן להחליף בשמות השדות שאתה רוצה ושמות הטקסט בוקסים
rs!Field1 = Text1.Text
rs!Field2 = Text2.Text
rs!Field3 = Text3.Text

'הפקודה הבאה בעצם עושה את פעולת השמירה למסד הנתונים
rs.Update

'מה שנותר זה לסגור את המשתנים שלנו ולשחרר אותם מהזיכרון
rs.Close
Set rs = Nothing
conn.Close
Set conn = Nothing
End Sub

שוב מקובה שזה עוזר,

א.


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

   15:22   15.01.03   
אל הפורום  
  8. אחי זה שוב לא עולה !! + תמונה  
בתגובה להודעה מספר 7
 
   עבר עריכה לאחרונה בתאריך 15.01.03 בשעה 15:26
 
הנה תראה !

http://members.lycos.co.uk/swim9/1.JPG


ואז הוא רושם שיש בעיה עם השורה הזאת !

rs.Open "SELECT * FROM CD Catalog", conn, adOpenDynamic, adLockOptimistic


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

   16:04   15.01.03   
אל הפורום  
  10. בעיה בשם של הטבלה  
בתגובה להודעה מספר 8
 
   אם יש לך רווח בשם הטבלה אז תשים את השם של הטבלה בתוך סוגריים מרובעים בשורה של הOPEN.

זה יפתור לך את הבעיה.

אם לא אז תודיע לי.

א.


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

   16:00   15.01.03   
אל הפורום  
  9. up  
בתגובה להודעה מספר 0
 
   up


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

   16:18   15.01.03   
אל הפורום  
  11. ישששש  
בתגובה להודעה מספר 9
 
   אחי סוף סוף זה עובד !@!!


תודה על ההשקעה !!!


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

   16:55   21.01.03   
אל הפורום  
  12. כל הכבוד על התשובות המפורטות  
בתגובה להודעה מספר 11
 
   בעבר שאלו את השאלה הזו כמה וכמה פעמים

הנה תשובה שלי בעניין (התשובה שלי פחות מפורטת ממה שניתן כאן)
http://rotter.net/cgi-bin/nor/dcboard.cgi?az=show_thread&om=7241&forum=prog&archive=

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

מנהלים לתשומת לבכם.

ואם כבר אתם פותחים מדור כזה אני ממליץ בחום להכניס את האשכול הנוכחי לשם :-)


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

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

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



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