|
تعريف الـ Alias اثناء عمل البرنامج.
بما ان كل مستخدم لديه خادم بتعريفات خاصة... فلا يمكن ان نثبت مثلاً اسم الخادم الى Server1.... بل علينا تعريف هذه القيم اثناء عمل البرنامج. فعادة نقوم عند بدء البرنامج بتحميل ملف يحتوي على بيانات الـ Alias و من ثم نحاول فتح قاعدة البيانات، و اذا حصل خطء في التشغيل، فهذا يدل على وجود خطء بتعريفات الـ Alias و غالباً ما تكون اسم قاعدة البيانات، اسم الخادم، كلمة المرور او اسم المستخدم او قد يكون جهاز الخادم غير متوفر مثلاً ان يكون مقفل او يوجد عطل بالشبكة... فعندها نُظهر مربع حوار مخصص لتعريفات الـ Alias للمستخدم... كما يفضل إظهار رسالة للمستخدم بالمشاكل المتوقعة...
بالطبع عند التشغيل الاول للبرنامج لن يكون هناك ملف يحتوي على التعريفات... فهنا يكون علينا بناء البرنامج بحيث يفحص وجود الملف... و اذا لم يجده يقوم بفتح مربع حوار تعريف الـ Alias...
وفي كلى الحالتين السابقتين اذا ما اختار المستخدم زر الغاء من مربع حوار تعريف الـ Alias... علينا اقفال البرنامج... بحيث لا توجد فائدة من فتحه بدون التعريفات الصحيحة حيث لن نتمكن من الربط بقاعدة البيانات... هذا باستثناء ان البرنامج يستطيع العمل بدون استخدام قاعدة البيانات... مثلاً ان يكون يتعامل مع ملفات قواعد بيانات محلية كالبارادوكس او غيرها.
بعض التعريفات المهمة.
الكائن TTable
و يفضل عدم استخدامه بما ان الـ TQuery تقدم لنا ميزات افضل.
AutoRefresh=True
DatabaseName = Test
و باقي الخصائص حسب المعتاد
لن نتكلم عن استخدام هذا الكائن بما ان استخدامه مطابق تماماً للاستخدام العادي في حالات قواعد البيانات الاخرى.
الكائن TQuery
و يفضل عدم استخدامه بما ان الـ TQuery تقدم لنا ميزات افضل.
AutoRefresh=True
DatabaseName = Test
و باقي الخصائص حسب المعتاد...
عند استخدام الـ TQueryعلينا فهم الـ Updatable Query و الـ ReadOnly Query... فلا توجد خاصية لتحديد الطريقة... بل ذلك يعتمد على جملة الـ SQL Statement.... فأي جملة تحتوي حقول حسابية او تحتوي على حقول من اكثر من جدول فتعتبر ReadOnlyQuery...
فالـ UpdateableQuery تكون للجمل التي تحتوي حقول مباشر من جدول واحد فقط... هذا لا يعني اننا لا نستطيع استخدام جمل SQL تحتوي على حقول حسابية او حقول من عدة جداول... و لكنها تحتاج الى نوع خاص من التعامل سنتطرق اليه في هذه المقالة باذن الله.
فالـ UpdatableQuery هي التي تسمح لنا باضافة، تعديل او حذف اي سجل بالشكل المباشر و العادي مثل (Query1.Insert)... و هي غالباً نستخدمها في معظم النظام... و لكننا في بعض الاحيان نحتاج ان ننشئ جمل SQL مبنية على عدة جداول او حسابات و نحتاج خاصية التعديل، الحذف او الإضافة لها فهنا يأتي استخدام الكائن المسمى TUpdateSQL... حيث انه يربط بالـ TQuery و هو يقوم بعملية الحفظ و غيرها من العمليات عوضاً عن الـ TQuery...
كيفية استخدام الـ TQuery.
UpdatableQuery. يستخدم هذا الكائن في هذه الحالة كالمعتاد مثلاً في حالة إضافة سجل جديد
Query1.Insert
Query1Fld1.Value = Value;
Query1.Post
و في حال استخدامنا للـ DataAwareControls مثل الـ TDBEdit و هو ما يفضل استخدامه في شاشة الادخال و التعديل يكفي الامر Query1.Post
ReadOnlyQuery
في هذه الطريقة سنقوم باستخدام كائن إضافي و هو TUpdateSQL و هو الكائن الذي سيكون مسؤلاً عن عمليات الـ TQuery...
قم بإضافة كائن TUpdateSQL الى المشروع
من خصائص الـ TQuery عرف خاصية UpdateObject (اخر خاصية) الى اسم الكائن TUpdateSQL... في الاصل ستظهر لك قائمة منسدلة، فقط قم باختيار الـ TUpdateSQL...
بعد ذلك انقر مقرتان على الكائن TUpdateSQL... سيظهر لك مربع حوار لتعريف جمل الـ SQL المرغوب باستخدامها... (الرسم 2)
الرسم 2
انقر على زر Get Table Fields و من ثم على زر Select Primary Keys... في حال لم يتم تحديد حقل الـ Primary تلقائياً او في حال كنت ترغب باستخدام حقول اخرى لشرط الـ SQL فقط قم باختيارهم من قائمة الـ Key Fields... بعدها انقر على زر الـ Generate SQL... فسيقوم هذا الكائن بانشاء جمل الـ SQL لك تلقائياً (الرسم 3)
الرسم 3
اختيار حقول الـ Primary Key هي لاستخدام شرط جملة الـ SQL و تستخدم عند عمليتي الحذف و التعديل و ذلك لتطبيق العملية على الحقول/الحقل الذي يتوافق مع الشروط... عادةً لن تحتاج الى اكثر من الـ Primary Key.... فهو حقل فهرسي قيمته غير متكررة.
و بهذا نكون قد انجزنا معظم العملية و لكن بقي علينا امر مهم جداً لجعل هذه الطريقة تنجح... فاستخدام امر Query1.Post لن يعمل هنا بشكل منفرد...
حيث ان الـ TQuery تعرفة على جملة الـ SQL بانها ReadOnlyQuery فتظهر خطأ عند استخدامك لامر Query1.Post... فعلينا تجنب هذه المشكلة بجعل خاصية CachedUpdates الى True.... و لكن ان لم تكن تحتاج هذه الخاصية... فلا تعرفها من شاشة الخصائص... بل سنستخدم كود خاص لذلك... و لكن في حال كنت ترغب بالابقاء على هذه الخاصية الى True... فما عليك الى استخدام اوامر الـ TQuery كالمعتاد... و لا تنسى امر ApplyUpdates و CommitUpdates لتطبيق الامر على السجل في جدول قاعدة البيانات... فاوامر الـ TQuery بهذه الحالة تكون مؤقتة و محفوظة بالذاكرة... و افضل مكان لاستخدام امر ApplyUpdates و CommitUpdates هي في حدثي الـ AfterDelete و AfterPost... فهذين الحدثين لا يعملى الى بعد عملية الحفظ/الحذف الناجحة....
اما الاكواد الخاصة و اماكن كتابتها في حال كانت خاصية الـ CachedUpdates تساوي الى False هي كلاتالي:
لعملية الحذف:
Query1.CachedUpdates := True;
Query1.Delete;
Query1.ApplyUpdates;
Query1.CommitUpdates;
Query1.CachedUpdates := False;
و يكتب هذا الكود في حدث OnClick الخاص بزر الحذف
لعملية الحفظ (إضافة/تعديل)
عند حدث OnNewRecord و BeforeEdit اضف الكود التالي:
Query1.CachedUpdates := True;
عند حدث AfterPost اضف الكود التالي:
Query1.ApplyUpdates;
Query1.CommitUpdates;
Query1.CachedUpdates := False;
عند حدث OnPostError اضف الكود التالي:
Query1.CachedUpdates := False;
فبهذا الحدث اذا ما حصل خطأ اثناء عملية الحفظ سنقوم بارجاع قيمة الـ CachedUpdates الى الـ False....
اما ما تبقى من برمجة فالتعامل معه تماماً كاي برنامج قواعد بيانات عادي...
اخيراً ليس اخراً... لا تنسى تحديد خاصية Connected الخاصة بالـ TDatabase الى False قبل انهاء البرنامج....
وده اول خطوه وحا نتواصل باذن الله تعالى.
|