تحتوي العديد من الأنظمة على بنية جدول مشابهة لما يلي (الجدول 1):
معرف اسم الوالدين
-------------------------------------------------- -------
001 الالكترونيات0
002 معدن 0
003 إلكترونيات مكثف001
004 إلكترونيات المقاومة001
005 المعادن غير الحديدية002
وقد اعتاد الجميع على استخدام الشجرة (TreeView) للعرض، بحيث يمكن عرض تصنيف الجدول بأكمله بشكل جيد. ومع ذلك، إذا كانت كمية البيانات كبيرة، فسيكون إنشاء الشجرة أبطأ، خاصة عند استخدام التكرار لتنفيذها، وسيكون عدد الوصول إلى قاعدة البيانات كثيرًا (اعتمادًا على عدد الطبقات)، وسيكون التأثير أكبر واضح عند استخدامه في ثلاث طبقات. إليك طريقة جيدة لإنشاء هيكل شجرة.
تصل هذه الخوارزمية إلى قاعدة البيانات مرة واحدة فقط، ويكون التنفيذ المحدد كما يلي:
1. احصل على جميع البيانات من قاعدة البيانات في وقت واحد وقم بفرزها وفقًا لحقل ParentID، وذلك للتأكد من أن العقدة الأصلية لكل جزء من البيانات موجودة أمامها.
2. أخرج الجزء الأول من البيانات وارسمه في الشجرة، عند إضافتها إلى الشجرة، ابحث أولاً عن العقدة الأصلية لهذه البيانات، وإذا لم تكن هناك عقدة أصل، فاستخدم هذا السجل مباشرة كعقدة المستوى الأول الشجرة.
3. إذا كانت لا تزال هناك بيانات، فأخرجها وقم بتنفيذ الخطوة 2 حتى لا توجد بيانات.
تنفيذ البرنامج:
سيستخدم هذا البرنامج متغير TStringList لـ stlID لتخزين قيمة المعرف لكل عقدة في الشجرة المقابلة، واستخدام وظيفة FindParent للعثور على العقدة الأصلية.
وظيفة FindParent(ID:String):TTreeNode;
فار
ط: عدد صحيح؛
يبدأ
النتيجة: = لا شيء؛
لأني:=TreeView1.Items.Count-1 وصولاً إلى 0
إذا stlID.Strings[i]=ID إذن
يبدأ
result:=TreeView1.Items[i];
استراحة؛
نهاية؛
نهاية؛
// الشجرة الممتدة
إجراء إنشاء شجرة؛
فار
tmpNode:TTreeNode;
يبدأ
الاستعلام 1. إغلاق؛
Query1.SQL.Text:='اختر * من الجدول 1 بترتيب ParentID';
استعلام 1.فتح؛
Query1.First;
في حين لا Query1.Eof القيام به
يبدأ
tmpNode:=TreeView1.Items.AddChild(FindParent(Query1.FieldByName('ParentID').AsString),Query1.FieldByName('Name').AsString);
stlID.Add(Query1.FieldByName('ID').AsString);//معرف السجل
Query1.Next;
نهاية؛
نهاية؛