310 likes | 467 Views
ActiveX Data Objects. מכיל את כל הרשומות המהוות תוצאה של שאילתה מאפשר שליטה על החיבור למסד הנתונים מבצע פקודות ושאילתות על מסד הנתונים מאחזר שגיאות של ADO מייצג מידע ממערך הרשומות פועל בשילוב עם אובייקט command כדי להגדיר פרמטר שאילתה או פרוצדורה מאפשר גישה למאפייני אובייקט ADO.
E N D
ActiveX Data Objects • מכיל את כל הרשומות המהוות תוצאה של שאילתה • מאפשר שליטה על החיבור למסד הנתונים • מבצע פקודות ושאילתות על מסד הנתונים • מאחזר שגיאות של ADO • מייצג מידע ממערך הרשומות • פועל בשילוב עם אובייקט command כדי להגדיר פרמטר שאילתה או פרוצדורה • מאפשר גישה למאפייני אובייקט ADO RecordSet Connection Command Error Field Parameter Property
אובייקטConnection • Dim cn As New ADODB.Connection • cn.ConnectionString =“DSN=BIBLIO” • התחברות למסד נתונים ללא שימוש ב- DSN • "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Program Files\Microsoft Visual Studio\VB98\Biblio.mdb“ • “Driver=Microsoft Access Driver (*.mdb); DBQ=C:\Program Files\Microsoft Visual Studio\VB98\Biblio.mdb“ • “Provider=SQLOLEDB.1;USERID=judith;password=123: InitialCatalog=DB;DataSource=Server1” • cn.Open • cn.Close • Set cn = Nothing
אובייקטConnection – השיטה Execute • cn.Execute("select * from authors where [year born]>1943") • cn.Execute("select * from authors where [author] like ‘k*’") • cn.Execute(“Delete from authors where Author=‘Peter, Shvartz’”) • cn.Execute(“Insert into authors ([author],[year born]) select ‘Peter, Shvartz’,1978")
אובייקטRecordSet • Dim rs As ADODB.Recordset • Set rs = cn.Execute("select * from authors where [year born]>1943") • Do While Not rs.EOF • List1.AddItem "Year Born: " & rs.Fields("year born") & vbTab & "Name: " & rs.Fields("author") • rs.MoveNext • Loop • rs.Close • Set rs = Nothing
אובייקטRecordSet • Dim rs As ADODB.Recordset • Set rs = cn.Execute("select * from authors where [year born]>1943") • Do While Not rs.EOF • List1.AddItem "Year Born: " & rs.Fields("year born") & vbTab & "Name: " & rs.Fields("author") • rs.MoveNext • Loop • rs.Close • Set rs = Nothing
מערכי רשומות • Set rs = New ADODB.Recordset • rs.ActiveConnection = cn • sSql = "select * from publishers where[Name]between 'v' and 'w' order by name" • rs.Source = sSql • rs.Open
מערכי רשומות • rs.MoveFirst • Do While Not rs.EOF • List1.AddItem rs.Fields("name") • List2.AddItem "city: " & rs.Fields("city") • rs.MoveNext • Loop
הוספת רשומה • Set rs = New ADODB.Recordset • rs.ActiveConnection = cn • rs.CursorType = adOpenKeyset • rs.LockType = adLockOptimistic • rs.Source = "publishers" • rs.Open • rs.AddNew • rs.Fields("name") = "Judith, Kabeli" • rs.Update
אובייקטCommand • ב- Access נגדיר שאילתה בשם “LookUP” • ב- VB נקרא לשאילתה זו כך: • Dim cmd As New ADODB.Command • Dim parm As New ADODB.Parameter • Set cmd.ActiveConnection = cn • cmd.CommandText = "Lockup" • cmd.CommandType = adCmdStoredProc • Set parm = cmd.CreateParameter("Letter", adChar, adParamInput, 1) • cmd.Parameters.Append parm • cmd("Letter") = "y" • Set rs = cmd.Execute
מחלקות - Classes • יצירת מחלקה - Project | add Class Module • הגדרת מאפיינים - ציבוריים או פרטיים • הגדרת שיטות - בדומה להגדרת פרוצדורות/פונקציות • הגדרת אירועים
הגדרת מאפיינים למחלקה • משתנים ציבוריים -public name As Integer • משתנים פרטיים – Private/Dim name As Integer • עמ"נ שיהיה אפשר לשלוף פרטים של מאפיינים פרטיים יש צורך להגדיר שגרות מאפיינים ציבוריותPublic Property Get/ Let /Set name
הגדרת שיטות • מגדירים פונקציות ופרוצדורות באזור • ה- Class Module. והן נחשבות שיטות המחלקה.
הגדרת אירוע • הצהרת האירוע במודול המחלקה: • Public Event name (parameter/s) • 2. הפעלת האירוע כאשר תנאי מסוים התרחש. (לרוב בתוך שיטה) RaiseEvent EventName (parameter/s) - • 3. כדי לגשת לאירוע מקוד הקורא, יש להצהיר על אובייקט • Dim WithEvents ObjectName as ClassName • ולהגדיר שגרת אירוע • Private Sub ObjectName_EventName (parameter/s) • End Sub
יצירת אובייקט מחלקה • Dim ObjName as New ClsName • Dim ObjName as ClsName • Set ObjName = New ClsName • Dim ObjName as Object קישור מאוחר • Set ObjName = CreateObject(“MyProj.ClsName”) • חסרון – object browser לא זמין • 4. Dim ObjName as Object • Set ObjName = New MyProj.ClsName
השמדת אובייקט Set ObjName = Nothing
יצירת ActiveX DLL • מרכיבי EXE/ActiveX DLL שימושיים ביותר מכיוון שהם משמשים כקופסאות שחורות לבניית אובייקטים לפרויקטים אחרים במיוחד לשרתי WEB, שכן פעולתם נוחה מהירה ובטוחה. • יוצרים פרוייקט ActiveX DLL • מגדירים את המחלקה: מאפיינים, שיטות ואירועים. • שומרים את הפרוייקט ויוצרים DLL ע"י בחירת • File| Make DLL • יוצרים פרוייקט EXE ובוחרים את ה- DLL שיצרנו ע"י הוספתו מ- Project|References • יוצרים אובייקט של המחלקה ע"י objname As New NameDLL.ClassNameDim
אוסף - Collection אוסף הוא סוג אובייקט הכולל קבוצת פריטים (אובייקטים). ב- VB יש מספר אובייקטי-אוספים, כמו Forms ו- Controls יתרון – ניתן לבצע פעולות על כל האובייקטים הכלולים באוסף Private Sub MinAll() Dim frmelm as Form For each frmelm in Forms frmelm.WindowState = vbMinimized Next frmelm End Sub
אוסף - Collection הגדרת אוסף: Dim ColName as New Collection אוסף המוגדר ע"י המשתמש חולק קבוצה זהה של מאפיינים ושיטות. המאפיין Count – מחזיר את מספר האובייקטים באוסף המאפיין Item - מספק גישה לאובייקט יחיד מהאוסף השיטה Add - מוסיפה אובייקט לאוסף השיטה Remove – מוחקת אובייקט מהאוסף
אוסף - Collection Dim ColTxt as New Collection Private Sub Form_Initialize() Dim CtrlItm as Control For each CtrlItm in Me.Controls If TypeOf(CtrlItm ) = “TextBox” then ColTxt.Add CtrlItm End If Next CtrlItm End Sub
פקדי ActiveX • ב V.B ישנם שלוש דרכים לבנות פקדי ActiveX: • ע"י בנית פקד חדש . • ע"י הסתמכות על פקד אחד (כגון Text ). • ע"י הכנסת מספר פקדים לתוכו (אוסף פקדים קיימים).
יצירת פקדי ActiveX התחלה:התחל פרוייקט חדש אך הפעם בחר פרוייקט ActiveX Control ולא פרויקט Exe . עיצוב:ניתן לעצב את הפקד בדיוק כמו כל Form שעיצבנו עד היום כגון הוספת פקדים ותכונות. הגדרת מאפיינים:ע"י פרוצדורות property בלבד ולא ע"י מאפיינים ציבוריים (אחרת הפקד לא יעבוד כראוי) Public Property Get/Set propertyName (…) As ???
הגדרת מאפייני פקד ActiveX Property procedures are required because you must notify Visual Basic whenever a property value changes. You do this by invoking thePropertyChangedmethod of the UserControl object at the end of everysuccessfulProperty LetorProperty Set, as shown in the following code fragment.
הגדרת מאפייני פקד ActiveX Private mblnMasked As Boolean Public Property Get Masked() As Boolean Masked = mblnMasked End Property Public Property Let Masked(ByVal NewValue As Boolean) mblnMasked = NewValue PropertyChanged "Masked“ End Property
הגדרת אירוע Public Event MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Private Sub UserControl_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) bMouseDown = True UserControl_Paint RaiseEvent MouseDown(Button, Shift, X, Y) End Sub Public Event Click() Private Sub UserControl_Click() MsgBox "You clicked the control" RaiseEvent Click End Sub
שימוש באובייקט PropertyBag • הקוד השייך לפקד ActiveX מתחיל לפעול ברגע שמשרטטים אותו על גבי הטופס. ניתן לקבוע ערך של מאפיין בזמן עיצוב, ניתן לשנות אותו בזמן התחלת התוכנית ובזמן סיום התוכנית, ערכי הפקד חוזרים למצב שבו הם היו בסביבת העבודה • ולכן יש צורך לטפל בשני המצבים שהמאפיין יכול להיות בהם • כשמשנים ערך מאפיין בזמן עיצוב, יש לדאוג שהפקד ידע להחזיר לעצמו את הערך בזמן פעולת התוכנית וכן שידע גם לחזור בחזרה לערך זה (אם השתנה) כאשר חוזרים לזמן עיצוב
שימוש באובייקט PropertyBag • אובייקט PropertyBag מאפשר לפקד ActiveX לשמור על ערכי המאפיינים שלו על ידי השגרות ReadProperties ו- WriteProperties • Private Sub UserControl_WriteProperties(PropBag As PropertyBag) • Call PropBag.WriteProperty("BackColor", m_BackColor, m_def_BackColor) • Call PropBag.WriteProperty("Caption", m_caption, m_def_Caption) • End Sub • Private Sub UserControl_ReadProperties(PropBag As PropertyBag) • m_BackColor = PropBag.ReadProperty("BackColor", m_def_BackColor) • m_caption = PropBag.ReadProperty("Caption", m_def_Caption) • End Sub
אובייקט Ambient ו- Extender • אובייקטים המספקים מידע על הפקד ביחס למכולה שלו • אובייקט Extender זמין רק כאשר הפקד ממוקם על המכולה לכן ניתן לגשת לאובייקט זה באירועים InitProperties ו- ReadProperties • UserControl.Extender.ToolTipText = "Test the extender object" • אובייקט Ambient • Private Sub UserControl_ReadProperties(PropBag As PropertyBag) • UserControl.BackColor = Ambient.BackColor • End Sub • Private Sub UserControl_AmbientChanged(PropertyName As String) • UserControl.BackColor = Ambient.BackColor • End Sub
בדיקת הפקד • ניתן לנסות את הפקד באמצעות ה- Explorer בחר באפשרות Run|Start • ניתן לנסות את הפקד גם ע"י הוספת פרויקט רגיל והוספת הפקד אליו. הוסף פרויקט exe רגיל, סגור את חלון הפקד (כלומר את חלון העיצוב שבו עיצבת את הפקד ), פעולה זו גורמת לפקד להיות זמין בפרויקט השני(ראה פקד חדש בארגז הכלים), הוסף את הפקד לפרויקט ה-exe והשתמש בו.
מסמך ActiveX • יישום הפועל בתוך יישום (container) , כגון Internet Explorer, במקום לפעול כתוכנית עצמאית. • יתרונות • יצירת יישומים בעלי יכולת עבודה ב- Web • אין צורך ללמוד שפה נוספת ליצירת מסמכים אלה, ניתן לעצב את המסמכים וכן לנפות שגיאות • אובייקט Hyperlink מאפשר לנווט בדפי Web. הדפים יכולים להיות מסמכי ActiveX או כל סוג אחר של דפי Web • ניתן לאחסן עותקים של קבצי ההפצה על ה- Web, באופן שיאפשר למשתמשים להורידם מיד בכניסתם לאתר. (יורה לשרת להוריד קבצי cabinet - *.CAB- קובץ דחוס) - זוהי שיטת הפצה המבוססת ע"י שימוש ב- Web, מקלה על תחזוקת הקוד ומוודאת אחידות בין הגרסאות שהופצו
מסמך ActiveX • חסרונות • המשתמש יצטרך להתקין כל גרסה של מסמך ActiveX • רק Explorer תומך ב- ActiveX
יצירת מסמך ActiveX • התחל פרוייקט מסוג ActiveX Doc • צור את ממשק המשתמש של היישום • כתוב את הקוד שיבצע את הפעולות הנדרשות • נסה את היישום ונפה שגיאות • העזר ב- Package & Deployment כדי ליצור גרסת התקנה שתופץ ב- Web • תיאור האובייקט UserDocument והפקדים המאוחסנים בו – קובץ DOB • אם הממשק מכיל אלמנטים גרפיים כלשהם – קובץ DOX • לאחר הידור המסמך, ניצור קובץ EXE או DLL שילווה בקובץ VBD • קובץ VBD הוא קובץ שאליו נכנס Internet Explorer