اليوم ننظر إلى استخدام مربعات الحوار عند تحرير البيانات في LibreOffice Base (OpenOffice Base). كما وجدنا في المنشورات السابقة ، فإن نموذج LibreOffice Base (OpenOffice Base) هو في الواقع مثال على محرر نصوص LibreOffice (OpenOffice). لتنظيم واجهة النافذة داخل النموذج ، يتم استخدام مربعات الحوار - والتي يتم إنشاؤها بشكل ملائم في الواجهة المرئية المضمنة ، ولكن ليس لديها دعم للاتصال بجداول قاعدة البيانات. سنقوم بتنظيم هذا الاتصال مع وحدات الماكرو الأساسية OO.
لنبدأ بالترتيب. إنشاء جدولين في قاعدة البيانات:
المنتجات
- معرف (عدد صحيح ، مفتاح أساسي)
- اسم (سلسلة)
أوامر
- معرف (عدد صحيح ، مفتاح أساسي)
- productId (عدد صحيح)
- العد (عدد صحيح)
- التاريخ (نوع البيانات التاريخ)
إنشاء نموذج الطلبات ، إضافة عنصر النموذج إلى النموذج مع أوامر الاسم. وكذلك مراقبة الجدول مع أوامر مصدر البيانات. نوقشت كيفية القيام بذلك في
الجزء 2 من سلسلة من الرسائل.
عند تعيين خصائص عمود التاريخ ، يرجى الانتباه إلى الخصائص المميزة في الشكل مع الأسهم التي تتيح لك عرض البيانات بالتنسيق المطلوب واستخدام التقويم المنسدل لتحديد تاريخ محدد.
الآن ، مباشرة في الجدول ، يمكنك إضافة وتعديل البيانات. حتى نقطة معينة ، يكون هذا مناسبًا ، على غرار العمل المعتاد للعميل باستخدام معالج جدول. ولكن في مرحلة ما ، تبدأ المشاكل التي تتميز أيضًا بالعمل مع معالجات الجداول. يمكن تغيير البيانات بشكل عشوائي دون حتى ملاحظة ذلك. وبعد ملاحظة أنه من المستحيل إعادة كل شيء كما كان. هناك مساحة صغيرة للمتحدثين الجدد ، وقد يتشكل التمرير الأفقي غير السار. تحتوي عناوين الأعمدة أيضًا على حد أقصى للحجم (وإلا لن يتم ملاءمتها أفقياً) ، وهذا لا يسمح بوصف تفصيلي للبيانات.
كتدبير نصف ، يمكنك وضع حقول منتظمة لإدخال البيانات بجوار الجدول (التحكم في النص ، التحكم الرقمي ، إلخ). عيّن الحقول المقابلة لجدول الطلبات كمصدر للبيانات وسيعمل كل شيء. عند التنقل في مجموعة بيانات ، ستتغير البيانات في حقول الإدخال. عند تغيير البيانات في حقول الإدخال ، ستتغير البيانات الموجودة في جدول قاعدة البيانات. ولكن هذا الحل لن تبدو جميلة جدا.
لذلك ، نحن نطبق هذه الوظيفة باستخدام Dialogs. مربعات الحوار لها قيود كبيرة. لا ترتبط حقول إدخال مربع الحوار بجدول قاعدة البيانات. لذلك ، ستحتاج إلى ملء حقول إدخال الحوار من جدول قاعدة البيانات ، وحفظ حقول الإدخال في جدول قاعدة البيانات مع الماكرو OO الأساسي. ومع ذلك ، هذا جيد ، لأنه يسمح لك بالنظر في إمكانيات برمجة OO Basic (قبل ذلك ، وصفت رسائلي العمل فقط مع البيئة ، ولكن كل هذا كان الإعداد لرسالة اليوم).
لإظهار محرر مربع الحوار ، تحتاج إلى تحديد من القائمة أدوات-> وحدات الماكرو-> تنظيم وحدات الماكرو-> LibreOffice Basic-> منظم-> مربع حوار-> جديد | تحرير | حذف. أرغب في الحصول على طريقة أسرع للوصول إلى هذا المحرر. بعد ذلك ، سيتم فتح محرر الحوار (للأسف ، ليس الأكثر ملاءمة) ، حيث سننشئ حقولًا بأسماء الحقول في جدول قاعدة البيانات. كما تتذكر ، لا ترتبط مربعات الحوار تلقائيًا بجداول قاعدة البيانات ، لذلك سنكتب ماكرو للقيام بذلك. وكصيغة اصطلاح تسمية ، دعونا نحدد أسماء حقول الحقول وحقول جدول قاعدة البيانات كما هي.
سيبدو المحرر ذو النموذج النهائي كما يلي:
بعد ذلك ، أضف زرين إلى مربع الحوار. سنقدم أسماء الأزرار بشكل تعسفي ، ولكن بدءًا من الشرطة السفلية ، لتمييزها عن حقول قاعدة البيانات. كل زر في لوحة الخصائص يمكن تخصيص تصرف. لنقم بضبط "موافق" على الزر - يغلق مربع الحوار بتأكيد الإجراء. والثاني - إلغاء - يتم إغلاق مربع الحوار دون تأكيد الإجراء.
أغلق محرر مربع الحوار ، ثم عد إلى محرر النماذج. دعنا ننشئ زرًا يستدعي مربع الحوار ويعين إجراء معالج Order_Edit له ، حيث سنقوم بملء مربع الحوار من جدول قاعدة البيانات FromBaseToDialog (oForm ، oDialog) ، وحفظ البيانات من جدول قاعدة بيانات Dialog FromDialogToBase (oDialog ، oForm).
Sub Order_Edit(Event) Dim oDialog As Object Dim orders As Object orders = Thiscomponent.DrawPage.Forms.GetByName("orders") DialogLibraries.LoadLibrary("Standard") oDialog = CreateUnoDialog(DialogLibraries.Standard.dialogOrder) FromBaseToDialog(orders, oDialog) If oDialog.Execute() = 1 Then FromDialogToBase(oDialog, orders) orders.UpdateRow() End If End Sub Sub FromBaseToDialog(oForm, oDialog) Dim I Dim sName As String For I = 0 To Ubound(oDialog.Model.ElementNames) sName = oDialog.Model.ElementNames(I) If Mid(sName, 1, 1) <> "_" And Mid(sName, 1, 5) <> "Label" Then ODialog.GetControl(sName).SetText(oForm.Columns.GetByName(sName).String) End If Next I End Sub Sub FromDialogToBase(oDialog, oForm) Dim I Dim sName As String For I = 0 To Ubound(oDialog.Model.ElementNames) sName = oDialog.Model.ElementNames(I) If Mid(sName, 1, 1) <> "_" And Mid(sName, 1, 5) <> "Label" Then oForm.Columns.GetByName(sName).UpdateString(Trim(oDialog.GetControl(sName).GetText())) End If Next I End Sub
من المفترض أن تم حفظ مربع الحوار في المكتبة القياسية كـ dialogOrder. بطبيعة الحال ، يمكنك اختيار أسماء أخرى. يتم تخطي أسماء عناصر التحكم التي تبدأ بالشرطات السفلية ولم تتم معالجتها. أيضًا ، لا تتم معالجة الأسماء التي تبدأ بـ Label ، والتي تُستخدم لرؤوس حقول النص.
استدعاء oDialog.Execute () = 1 يعرض مربع الحوار داخل نافذة النماذج ويوقف الماكرو مؤقتًا حتى يتم النقر فوق الزر "موافق" أو "إلغاء". عند النقر فوق "موافق" ، فإن قيمة الإرجاع تساوي واحدة.