أعلان الهيدر

الرئيسية دورة بناء تطبيق قاعدة بيانات على الموبايل بواسطة دلفي

دورة بناء تطبيق قاعدة بيانات على الموبايل بواسطة دلفي

 السلام عليكم ورحمة الله وبركاته
دورة دلفي فايرمونكي لصناعة تطبيقات قواعد البيانات على الاندرويد و الأيفون


هذا الدرس يدور حول قائمة المهام todo-list. إنه مشابه لاستخدام TListView للعرض والبحث المحلي

للبيانات، ولكن في هذه الحالة، سنستخدم قاعدة بيانات SQL وسنعرض البيانات للمستخدمة التي يستخدمها

LiveBindings. علاوة على ذلك، سنرى كيفية إنشاء محولات الإخراج لـ LiveBindings.


بسم الله نبدأ القسم الأول من الدورة

💻💻عندما تحتاج إلى قاعدة بيانات متنقلة، لديك خياران في دلفي: SQLite (مصدر مفتوح

قاعدة لقواعد البيانات المضمنة) وInterBase ToGo.

منذ الإصدار XE6، قام RAD Studio بتضمين إصدارات InterBase ToGo وIBLite لتطوير تطبيقات قواعد البيانات المضمنة

. يمكنك نشر تطبيقات الهاتف المحمول الخاصة بك على أجهزة iOS أو Android

مع ترخيص InterBase ToGo (مقابل تكلفة) أو ترخيص IBLite (مجانًا).

إذا كان تطبيقك أكثر تعقيدًا بعض الشيء؛ يحتاج إلى تشفير أو إجراءات مخزنة أو عدد من البيانات

الأرقام الهامة، عليك بالتأكيد الذهاب إلى InterBase ToGo. بخلاف ذلك، يمكنك استخدام SQLite. يعتبر

أن IBLite هو نفس محرك InterBase ToGo، ولكنه محدود إلى حد ما. الحد الاكبر

هو عدم وجود التشفير. ومع ذلك، فإن التطبيق الذي يستخدم IBLite لا يتطلب تحديثات التعليمات البرمجية إذا كنت

تحتاج إلى التوسع في InterBase ToGo، قم بتغيير الترخيص وستكون بخير.

هذه الوصفة بسيطة جدًا من حيث متطلبات قاعدة البيانات، لذا سنستخدم SQLite. ومع ذلك،

تنطبق نفس المفاهيم على InterBase ToGo وIBLite.

افتح مشروع TODOlist.dproj. يحتوي النموذج الرئيسي على جميع المكونات المطلوبة

للوصول إلى قاعدة البيانات (في التطبيق الواقعي، فكر في استخدام وحدة بيانات لهذا الغرض، تمامًا مثل

تطبيقات سطح المكتب). تم إنشاء التطبيق باستخدام قالب الهاتف المحمول للرأس/التذييل.

يحتوي TabItem الأول على قوائم المهام، بينما يسمح لك TabItem الثاني بتحديث ملف

قائمة المهام الحالية أو إنشاء قائمة مهام جديدة.

عند بدء تشغيل التطبيق، تتصل مكونات TFDConnection بقاعدة البيانات. إذا

إذا كان ملف قاعدة البيانات غير موجود، فقد تم تكوين محرك SQLite لإنشاء ملف قاعدة بيانات جديد منه

من الصقر. هذه الميزة مفيدة جدًا ويمكن تهيئتها عن طريق تعيين خاصيةOpenMode

لإنشاءUTF8 . (يعد ترميز UTF8 دائمًا الخيار الأفضل للملفات الدولية

التطبيقات؛ في هذه الحالة، هذا هو الإعداد الافتراضي لمكونات TFDConnection.) هنا

الجزء ذو الصلة من خواصTFDConnection.

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

تطبيق الهاتف المحمول باستخدام هدف Windows 32 بت ومسار محلي على نظامك؛ لكن،

عند تشغيل التطبيق على الجهاز، عليك استخدام مسار آخر. كيف يمكننا حل هذا؟ في ال

معالج الأحداث BeforeConnect الخاص بالاتصال، خذ بعين الاعتبار الكود التالي:

procedure TMainForm.ConnectionBeforeConnect(Sender: TObject);

begin

{$IF DEFINED(IOS) or DEFINED(ANDROID)}

Connection.Params.Values['Database'] :=

TPath.GetDocumentsPath + PathDelim + 'todos.sdb';

{$ENDIF}

end;


باستخدام هذا الرمز، سيتم إنشاء قاعدة البيانات في مجلد المستندات المناسب لنظام التشغيل iOS أو Android.

المشكلة التالية تتعلق ببنية قاعدة البيانات. متى وكيف نقوم بإنشاء الجدول

هذا مانحتاج إليه؟ دعونا نتحقق من معالج الأحداث AfterConnect على الاتصال:


procedure TMainForm.ConnectionAfterConnect(Sender: TObject);

begin

Connection.ExecSQL('CREATE TABLE IF NOT EXISTS TODOS( ' +

' ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, ' +

' DESCRIPTION CHAR(50) NOT NULL, ' +

' DONE INTEGER NOT NULL ' +

')');

qryTODOs.Active := True;

end;


بعد إنشاء قاعدة البيانات مباشرة، وفي أي تشغيل لاحق، يحاول التطبيق إنشاء ملف

جدول قاعدة البيانات إذا لم يكن موجودًا بعد. ثم افتح مجموعة البيانات المتصلة بمصدر الربط

إظهار البيانات الموجودة. تم تكوين عرض القائمة بالكود التالي:


ItemAppearance.ItemAppearance = 'ListItemRightDetail'

ItemAppearance.ItemHeight = 100

SearchVisible = True


تحتوي علامة التبويب الثانية على عناصر مكون TMemo ومكون TSwitch ومكون TLabel

. مصدر بيانات TBindSourceDB المتصل بمجموعة بيانات qryTODO هو

متصل بالقائمة ومكون التفاصيل الموجود في TabItem الثاني أيضًا.

يظهر هذا في لقطة الشاشة التالية (مدمج مع بعض النصوص التوضيحية):


كل التعليمات البرمجية المستخدمة للتعامل مع مجموعة البيانات هي تعليمات برمجية عادية موجهة لمجموعة البيانات، تمامًا مثل التعليمات البرمجية
تستخدم لإدارة مجموعات البيانات على تطبيق سطح المكتب.
هذه الوصفة تظهر مشكلة خطيرة. لا يحتوي SQLite على نوع الحقل المنطقي، لذا تم تنفيذه
الحقل في جدول المهام هو من النوع عدد صحيح، حيث 1 يعني صحيح و0 يعني خطأ. لكن،
نريد توصيل الحقل DONE بخاصية TSwitch.IsChecked من النوع Boolean. في
في هذه الحالة، عند محاولة تغيير قيمة التبديل، سوف تحصل على خطأ مثل ما يلي:


كيف يمكننا حل هذا؟ يتمتع محرك LiveBinding بآلية قوية لتحويل البيانات
من نوع إلى آخر. عندما تكون نتيجة التعبير من النوع X والقيمة
ونحتاج أن تكون هذه القيمة المراد كتابتها من النوع Y، يبحث المحرك عن محول إخراج صالح
قادر على تحويل النوع X إلى النوع Y. يتم عرض محولات الإخراج المتاحة على
خاصية BindingList1.OutputConverters. كما ترى بنفسك، لا يوجد
OutputConverter من السلسلة إلى Boolean والذي يعمل حسب حاجتنا. لحل مشكلتنا،
يتعين علينا تسجيل كائن OutputConverter آخر قادر على تحويل قيمة منطقية
( swtCompleted.IsChecked ) إلى قيمة سلسلة
(لأن LiveBinding يستخدم TField.طريقة SetText لتعيين قيمة الحقل).
تم تسجيل محول الإخراج هذا في
وحدة BoolToStringConverterU.pas. الإجراء المستخدم لتسجيل المحول الجديد
ويجعله مرئيًا لمحرك LiveBinding يظهر في الكود التالي:

const
sBoolToString = 'BoolToString';
procedure RegisterOutputConversions;
begin
//unregister the default converter bool->string
TValueRefConverterFactory.UnRegisterConversion(
TypeInfo(Boolean), TypeInfo(String));
//register the new converter bool->string
//This converter is able to handle 1=true and 0=false
TValueRefConverterFactory.RegisterConversion(
TypeInfo(Boolean), TypeInfo(String),
TConverterDescription.Create(
procedure(const InValue: TValue; var OutValue: TValue)
begin
if InValue.AsBoolean then
OutValue := '1'
else
OutValue := '0';
end, sBoolToString, sBoolToString, '',
True, sBoolToString, nil));
end;

الآن التطبيق يعمل بشكل صحيح. ومع ذلك، كن حذرًا، الآن جميع التحويلات من Boolean
سيتم اعتبار to string صحيحًا عندما يكون 1 وخطأ عندما يكون 0 . هذه الآلية الداخلية
يجب فهم LiveBindings بشكل واضح، لأنه يمكن أن يسبب الكثير من الصداع
في الحالات الجادة و الاحترافية. الكود الكامل لهذا الخرج متاح في الوحدة
BoolToStringConverterU.pas
يمكن تحميله من الموضوع





dr sameh hamed -drcobra1990@hotmail.com.com. يتم التشغيل بواسطة Blogger.