12/09/2021 (الإصدار 1.2)
13/04/2021 (الإصدار 1.1)
27/03/2021 (الإصدار 1.0)
عندما تعمل على مشروعك البرمجي، تحتاج دائمًا إلى تخزين بعض البيانات في ملف INI أو ملف نصي، كملف تكوين أو معلومات أخرى.
لذلك، الخيارات المتاحة لك هي ملف INI، أو نص عادي. ودائمًا ما تحتاج إلى جدول يحتوي على بعض الحقول.
في النص العادي، يمكنك استخدام سجل واحد في كل سطر، وفصل الحقول باستخدام حرف الجدولة، أو حرف الأنبوب، أو حرف آخر. لكن لديك بعض المشاكل مع هذه الطريقة: عليك الاهتمام بالحرف الفاصل، وعدم استخدامه في قيمة الحقول؛ ولديك مشكلة أكبر: في الإصدار المستقبلي، إذا كنت بحاجة إلى إضافة عمود، فستفقد التوافق في هذا الملف عندما تكون هناك بيانات مخزنة بالفعل.
إذا كنت تعمل مع ملف INI، يمكنك تحديد أسماء الحقول، ولكن حتى ذلك، لديك مشاكل في تخزين سجل واحد لكل قسم، ومن الصعب إعادة ترتيب السجلات وحذف السجلات وتسمية السجل.
ولكن لا تقلق، هنا هو الحل.
يعد DzXMLTable مكونًا غير مرئي حيث يمكنك تخزين السجلات التي تحتوي على الحقول والقيم، ويمكنك تسمية الحقل، لذلك لا داعي للقلق بشأن الإصدارات المستقبلية. يمكنك إضافة حقول جديدة في أي وقت، فقط قم بقراءتها وكتابتها.
هذا مفهوم جديد لمكون DzMiniTable السابق.
يدعم دلفي XE3..دلفي 11
type
TContact = class
ID: Integer;
Name : string;
Phone: string;
Active: Boolean; // new field in some new program version
end ;
procedure LoadContactsExample (List: TObjectList<TContact>);
var
XML: TDzXMLTable;
Rec: TDzRecord;
Contact: TContact;
begin
XML := TDzXMLTable.Create( nil );
try
XML.FileName := ' C:Data.xml ' ;
XML.Load;
for Rec in XML do
begin
Contact := TContact.Create;
Contact.ID := Rec[ ' ID ' ];
Contact. Name := Rec[ ' Name ' ];
Contact.Phone := Rec[ ' Phone ' ];
Contact.Active := Rec.ReadDef( ' Active ' , True); // saved xml in old version could not have this field, so, read with default value.
List.Add(Contact);
end ;
finally
XML.Free;
end ;
end ;
يكون اسم الحقل دائمًا غير حساس لحالة الأحرف في جميع معلمات الأساليب والخصائص.
FileName: string
= يحدد اسم ملف XML الكامل لفتح الجدول وحفظه
RequiredFile: Boolean
= عند تعطيل هذه الخاصية (افتراضي)، إذا لم يكن الملف موجودًا في طريقة Open، فسيتم تحميل الجدول فارغًا دون رفع أي استثناء.
RequiredField: Boolean
= عند تعطيل هذه الخاصية (افتراضي)، يمكنك قراءة حقل غير موجود دون رفع واستثناء، وإرجاع قيمة متغير Unassigned
.
Rec[Index: Integer]: TDzRecord
(خاصية المكون الافتراضية) = إرجاع كائن السجل حسب الفهرس.
RecCount: Integer
= إرجاع عدد السجلات.
procedure Load ;
قم بتحميل الجدول من الملف المحدد في خاصية FileName
procedure Save ;
احفظ الجدول في الملف المحدد في خاصية FileName
procedure Clear ;
مسح كافة البيانات في الجدول
function New (Index: Integer = - 1 ): TDzRecord;
قم بإنشاء سجل جديد في الجدول وإرجاع كائن السجل. يمكنك تحديد موضع السجل الجديد في الجدول باستخدام معلمة Index
. إذا تركت Index = -1
، فسيتم إضافة السجل في نهاية الجدول.
procedure Delete (Index: Integer);
حذف سجل حسب الفهرس.
function FindIdxByField ( const Name : string; const Value : Variant): Integer;
إرجاع فهرس السجل الأول الذي يطابق نفس الاسم والقيمة. إذا لم يتم العثور على أي سجل، فسوف ترجع الدالة nil
.
function FindRecByField ( const Name : string; const Value : Variant): TDzRecord;
إرجاع كائن السجل الأول الذي يطابق نفس الاسم والقيمة. إذا لم يتم العثور على أي سجل، فسوف ترجع الدالة nil
.
function FindIdxBySameText ( const Name : string; const Value : Variant): Integer;
تقوم بإرجاع فهرس السجل الأول الذي يطابق نفس الاسم والقيمة، حيث تتم مقارنة القيمة كسلسلة باستخدام حساس لحالة الأحرف . إذا لم يتم العثور على أي سجل، فسوف ترجع الدالة nil
.
function FindRecBySameText ( const Name : string; const Value : Variant): TDzRecord;
تقوم بإرجاع كائن السجل الأول الذي يطابق نفس الاسم والقيمة، حيث تتم مقارنة القيمة كسلسلة باستخدام حساس لحالة الأحرف . إذا لم يتم العثور على أي سجل، فسوف ترجع الدالة nil
.
procedure Move (CurIndex, NewIndex: Integer);
ينقل سجلاً من CurIndex
إلى موضع NewIndex
في الجدول.
Field[const Name: string]: Variant
= يُرجع أو يحدد قيمة الحقل كمتغير حسب اسم الحقل. عند الحصول على قيمة الحقل، إذا كان الحقل غير موجود، سيتم طرح استثناء، ما لم تكن خاصية RequiredField
خاطئة (في هذه الحالة، سيتم إرجاع قيمة Unassigned
. عند تعيين قيمة الحقل، إذا كان الحقل غير موجود، فسيتم ذلك سيتم إنشاؤها تلقائيًا بالاسم والقيمة المحددين.
FieldIdx[Index: Integer]: TDzField
= إرجاع كائن الحقل حسب فهرس الحقل.
تحذير: يمكن أن يحتوي أحد السجلات على حقول مختلفة عن سجل آخر. لذا، يجب ألا تستخدم أبدًا فهرسًا ثابتًا لحقل معين (مثل عمود) عبر السجلات.
FieldCount: Integer
= يُرجع عدد الحقول في هذا السجل.
function ReadDef ( const Name : string; DefValue: Variant): Variant;
إرجاع قيمة الحقل حسب اسم الحقل. إذا كان الحقل غير موجود في السجل، قم بإرجاع DefValue
.
function FindField ( const Name : string): TDzField;
إرجاع كائن الحقل حسب اسم الحقل. إذا كان الحقل غير موجود، فسيتم إرجاع nil
.
function FieldExists ( const Name : string): Boolean;
يُرجع صحيحًا إذا كان الحقل موجودًا حسب اسم الحقل المحدد.
procedure ClearFields ;
امسح كافة بيانات الحقول الموجودة في السجل (لا يؤدي ذلك إلى إزالة القيمة من الحقول فحسب، بل يؤدي إلى إزالة الحقول تمامًا).