כיצד לבנות את מחרוזת חיבור מסד הנתונים באופן דינמי

click fraud protection

לאחר שתסיים את פיתרון מסד נתונים של דלפי, השלב האחרון הוא לפרוס אותו במחשב של המשתמש בהצלחה.

ConnectionString On-the-Fly

אם השתמשת ברכיבי dbGo (ADO), ה-מחרוזת חיבור רכוש של חיבור TADOC מציין את פרטי החיבור לחנות הנתונים.

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

באופן כללי, כדי ליצור את מחרוזת החיבור בזמן ריצה שעליך לעשות
א) להציב את הנתיב המלא למסד הנתונים ברישום; ו
ב) בכל פעם שאתה מתחיל את בקשתך, קרא את המידע מהרישום, "צור" את ConnectionString ו"פתח "את ADOConnection.

מאגר מידע... התחברו!

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

instagram viewer

ה OnCreate האירוע של מודול הנתונים הוא המקום בו אתה מציב את הקוד כדי לבנות באופן דינמי את ConnectionString ולהתחבר למסד הנתונים.

תהליך TDM.DataModuleCreate (שולח: TObject); התחלאם DBConnect לאחר מכן
ShowMessage ('מחובר למסד נתונים!')
אחר
ShowMessage ('לא מחובר למסד נתונים!'); סוף;

הערה: שמו של מודול הנתונים הוא "DM". שמו של רכיב ה- TADOConnection הוא "AdoConn".

ה DBConnect הפונקציה עושה את העבודה בפועל של חיבור למסד הנתונים, הנה הקוד:

funcTDM.DBConnect: בוליאני; var
conStr: מחרוזת; שם שרת, DBName: מחרוזת; התחלשם שרת: = ReadRegistry ('DataSource'); DBName: = ReadRegistry ('קטלוג נתונים'); conStr: = 'ספק = sqloledb;' + 'מקור נתונים =' + שרת שם + ';' + 'קטלוג ראשוני =' + DBName + ';' + 'מזהה משתמש = myUser; סיסמא = myPasword '; תוצאה: = שקר; AdoConn. סגור; AdoConn. ConnectionString: = conStr; AdoConn. LoginPrompt: = שווא;אם (לא AdoConn. מחובר) לאחר מכןנסה
AdoConn. פתוח; תוצאה: = נכון; מלבדב ה: חריג לעשותהתחלMessageDlg ('אירעה שגיאה בהתחברות אל. בסיס הנתונים. שגיאה: '+ # 13 # 10 + ה. הודעה, mtError, [mbOk], 0);אםלא TDatabasePromptForm. ביצוע (שם שרת, DBName)
לאחר מכן
תוצאה: = שקר. אחרהתחל
WritRegistry ('DataSource', Server Server); WritRegistry ('קטלוג נתונים', DBName); // זכור פונקציה זו
תוצאה: = DBConnect; סוף; סוף; סוף; סוף; //DBConnect

פונקציית DBConnect מתחברת למסד הנתונים של MS SQL Server - ConnectionString נבנה באמצעות המקומי connStr משתנה.

שם שרת מסד הנתונים נשמר ב שם שרת משתנה, שם בסיס הנתונים מוחזק ב- DBName משתנה. הפונקציה מתחילה בקריאת שני הערכים האלה מהרישום (תוך שימוש במנהג ReadRegistry () תהליך). לאחר הרכבת ConnectionString, אנו פשוט מתקשרים אליו AdoConn. פתוח שיטה. אם קריאה זו מחזירה "אמת", התחברנו בהצלחה למסד הנתונים.

הערה: מכיוון שאנו מעבירים במפורש פרטי כניסה דרך ConnectionString, מכיוון שמודול הנתונים הוא שנוצר לפני הטופס הראשי, אתה יכול בבטחה לקרוא לשיטות ממודול הנתונים ב- OnCreate של MainForm אירוע.כניסה למערכת המאפיין מוגדר כ- false למניעת שיח כניסה מיותר.

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

טופס DatabasePrompt מספק התאמה אישית שיטת כיתה בשם Exute שמקבל שני פרמטרים משתנים (var): ServerName ו- DBName.

עם הנתונים "החדשים" המסופקים על ידי משתמש (שם שרת ומסד נתונים) אנו פשוט קוראים שוב לפונקציית DBConnect () (רקורסיבית). כמובן שהמידע מאוחסן לראשונה ברישום (בשיטה מותאמת אישית אחרת: WritRegistry).

ודא ש- DataModule הוא "הטופס" הראשון שנוצר!

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

מכיוון שמודול הנתונים נוצר לפני הטופס הראשי, תוכלו לקרוא בבטחה לשיטות ממודול הנתונים באירוע OnCreate של MainForm.

instagram story viewer