كيفية بناء سلسلة اتصال قاعدة البيانات بشكل حيوي

click fraud protection

بمجرد الانتهاء من دلفي حل قاعدة البيانات، الخطوة الأخيرة هي نشر الكمبيوتر الخاص بالمستخدم بنجاح.

ConnectionString على ذبابة

إذا كنت تستخدم مكونات dbGo (ADO) ،سلسلة الاتصال ممتلكات TADOConnection يحدد معلومات الاتصال لمخزن البيانات.

من الواضح ، عند إنشاء تطبيقات قواعد البيانات التي سيتم تشغيلها على أجهزة مختلفة ، لا ينبغي أن يكون الاتصال بمصدر البيانات مرمّزًا في الملف القابل للتنفيذ. بمعنى آخر ، قد توجد قاعدة البيانات في أي مكان على كمبيوتر المستخدم (أو على البعض الآخر كمبيوتر في شبكة) - يجب إنشاء سلسلة الاتصال المستخدمة في كائن TADOConnection في مدة العرض. أحد الأماكن المقترحة لتخزين معلمات سلسلة الاتصال هو سجل ويندوز (أو ، قد تقرر استخدام "عادي" ملفات INI).

بشكل عام ، لإنشاء سلسلة الاتصال في وقت التشغيل عليك
أ) وضع المسار الكامل لقاعدة البيانات في السجل ؛ و
ب) في كل مرة تبدأ فيها تشغيل التطبيق الخاص بك ، قراءة المعلومات من التسجيل ، "إنشاء" ConnectionString و "فتح" ADOConnection.

قاعدة البيانات... الاتصال!

لمساعدتك في فهم العملية ، أنشأنا نموذجًا لتطبيق "هيكل عظمي" يتكون من نموذج واحد (النموذج الرئيسي للتطبيق) ووحدة بيانات. توفر وحدات بيانات دلفي أداة تنظيمية مناسبة تُستخدم لعزل أجزاء التطبيق التي تتعامل مع قواعد البيانات وقواعد العمل.

instagram viewer

ال OnCreate حدث "وحدة البيانات" هو المكان الذي تضع فيه التعليمات البرمجية لإنشاء سلسلة الاتصال والاتصال بقاعدة البيانات ديناميكيًا.

إجراء TDM.DataModuleCreate (المرسل: TObject) ؛ ابدأإذا DBConnect ثم
ShowMessage ("متصل بقاعدة بيانات!")
آخر
ShowMessage ('غير متصل بقاعدة البيانات!') ؛ النهاية;

ملحوظة: اسم وحدة البيانات هو "DM". اسم المكون TADOConnection هو "AdoConn".

ال DBConnect تقوم الوظيفة بالعمل الفعلي للاتصال بقاعدة البيانات ، إليك الرمز:

فونكنشوئها TDM.DBConnect: منطقية. فار
conStr: سلسلة ؛ ServerName ، DBName: string؛ ابدأServerName: = ReadRegistry ('DataSource') ؛ DBName: = ReadRegistry ('DataCatalog')؛ conStr: = 'Provider = sqloledb؛' + 'مصدر البيانات =' + اسم الخادم + '؛' + 'الكتالوج الأولي =' + DBName + '؛' + معرف المستخدم = myUser ؛ كلمة المرور = myPasword '؛ النتيجة: = خطأ ؛ AdoConn. قريب؛ AdoConn. ConnectionString: = conStr؛ AdoConn. LoginPrompt: = False؛إذا (ليس AdoConn. متصل) ثممحاولة
AdoConn. افتح؛ النتيجة: = صحيح ؛ إلاعلى E: استثناء فعلابدأMessageDlg ('حدث خطأ أثناء الاتصال. قاعدة البيانات. خطأ: '+ # 13 # 10 + ه. Message، mtError، [mbOk]، 0)؛إذاليس TDatabasePromptForm. تنفيذ (اسم الخادم ، DBName)
ثم
النتيجة: = خطأ. آخرابدأ
WriteRegistry ('DataSource' ، اسم الخادم) ؛ WriteRegistry ('DataCatalog'، DBName)؛ / / تذكر هذه الوظيفة
النتيجة: = DBConnect ؛ النهاية; النهاية; النهاية; النهاية; //DBConnect

تتصل وظيفة DBConnect بقاعدة بيانات MS SQL Server - يتم إنشاء سلسلة الاتصال باستخدام Local connStr متغير.

يتم تخزين اسم خادم قاعدة البيانات في اسم الخادم متغير ، اسم قاعدة البيانات في DBName متغير. تبدأ الوظيفة من خلال قراءة هاتين القيمتين من السجل (باستخدام العرف ReadRegistry () إجراء). بمجرد أن يتم تجميع ConnectionString ، ندعو ببساطة ثم AdoConn. افتح طريقة. إذا أعادت هذه المكالمة "true" ، فقد اتصلنا بقاعدة البيانات بنجاح.

ملاحظة: نظرًا لأننا نقوم بتمرير معلومات تسجيل الدخول بشكل صريح عبر ConnectionString ، فإن وحدة البيانات هي منذ ذلك الحين تم إنشاؤها قبل النموذج الرئيسي ، يمكنك استدعاء الأساليب بأمان من وحدة البيانات في OnCreate في MainForm حدث.تسجيل الدخول تم تعيين الخاصية إلى false لمنع مربع حوار تسجيل دخول غير ضروري.

يبدأ "المرح" في حالة حدوث استثناء. بينما قد يكون هناك العديد من الأسباب لفشل الأسلوب Open ، فلنفترض أن اسم الخادم أو اسم قاعدة البيانات سيئ.
إذا كانت هذه هي الحالة ، فسنمنح المستخدم فرصة لتحديد المعلمات الصحيحة من خلال عرض نموذج حوار مخصص.
يحتوي نموذج التطبيق أيضًا على نموذج إضافي واحد (DatabasePromptForm) يمكّن المستخدم من تحديد الخادم واسم قاعدة البيانات لمكون الاتصال. يوفر هذا النموذج البسيط مربعي التحرير فقط ، إذا كنت ترغب في توفير واجهة سهلة الاستخدام ، فيمكنك ذلك إضافة اثنين من ComboBoxes وملء تلك عن طريق تعداد خوادم SQL المتاحة واسترداد قواعد البيانات على خادم SQL.

يوفر نموذج DatabasePrompt مخصصًا طريقة الصف اسمه تنفيذ يقبل معلمتين متغير (var): ServerName و DBName.

مع البيانات "الجديدة" التي يقدمها المستخدم (اسم الخادم وقاعدة البيانات) ، فإننا ببساطة ندعو وظيفة DBConnect () مرة أخرى (بشكل متكرر). بالطبع ، يتم تخزين المعلومات أولاً في السجل (باستخدام طريقة مخصصة أخرى: WriteRegistry).

تأكد من أن DataModule هو أول "نموذج" تم إنشاؤه!

إذا حاولت إنشاء هذا المشروع البسيط لوحدك ، فقد تواجه استثناءات "انتهاك الوصول" عند تشغيل التطبيق.
بشكل افتراضي ، يجب أن يكون النموذج الأول المضافة إلى التطبيق هو MainForm (أول نموذج تم إنشاؤه). عند إضافة وحدة بيانات إلى التطبيق ، تتم إضافة وحدة البيانات إلى قائمة "إنشاء النماذج تلقائيًا" كنموذج يتم إنشاؤه بعد النموذج الرئيسي.
الآن ، إذا حاولت استدعاء أي من خصائص أو أساليب Data Module في حدث OnCreate في MainForm ، فستحصل على استثناء "انتهاك الوصول" - حيث لم يتم إنشاء وحدة البيانات بعد.
لحل هذه المشكلة ، تحتاج إلى تغيير الترتيب الذي تم إنشاؤه لوحدة البيانات يدويًا - وتعيينه ليكون النموذج الأول الذي يتم إنشاؤه بواسطة التطبيق (إما باستخدام مربع الحوار "خصائص المشروع" أو عن طريق التحرير ال ملف مصدر المشاريع).

نظرًا لأن وحدة البيانات تم إنشاؤها قبل النموذج الرئيسي ، يمكنك الاتصال بأمان بالطرق من وحدة البيانات في حدث OnCreate الخاص بـ MainForm.

instagram story viewer