หลายระบบมีโครงสร้างตารางคล้ายกับตัวอย่างต่อไปนี้ (ตารางที่ 1):
IDชื่อ ParentID
-------------------------------------------------- -------------------------------------------------- -------
001 อิเล็กทรอนิกส์0
002 โลหะ 0
003 ตัวเก็บประจุอิเล็กทรอนิกส์001
004 ความต้านทานอิเล็กทรอนิกส์001
005 โลหะที่ไม่ใช่เหล็ก002
และทุกคนคุ้นเคยกับการใช้ tree (TreeView) ในการแสดงผล เพื่อให้สามารถแสดงการจัดหมวดหมู่ของตารางทั้งหมดได้ดี อย่างไรก็ตาม หากปริมาณข้อมูลมีขนาดใหญ่ การสร้างแผนผังจะช้าลง โดยเฉพาะเมื่อใช้การเรียกซ้ำเพื่อนำไปใช้ จำนวนการเข้าถึงฐานข้อมูลก็จะมาก (ขึ้นอยู่กับจำนวนเลเยอร์) และผลกระทบจะมากขึ้น ชัดเจนเมื่อใช้เป็นสามชั้น นี่เป็นวิธีที่ดีในการสร้างโครงสร้างแบบต้นไม้
อัลกอริทึมนี้เข้าถึงฐานข้อมูลเพียงครั้งเดียว การใช้งานเฉพาะมีดังนี้:
1. รับข้อมูลทั้งหมดจากฐานข้อมูลในคราวเดียวและจัดเรียงตามช่อง ParentID เพื่อให้แน่ใจว่าโหนดหลักของข้อมูลแต่ละชิ้นอยู่ข้างหน้า
2. นำข้อมูลชิ้นแรกออกมาแล้ววาดลงในแผนผัง เมื่อเพิ่มลงในแผนผัง ให้ค้นหาโหนดหลักของข้อมูลนี้ก่อน หากไม่มีโหนดหลัก ให้ใช้บันทึกนี้เป็นโหนดระดับแรกของข้อมูลโดยตรง ต้นไม้
3. หากยังมีข้อมูลอยู่ ให้นำออก และทำตามขั้นตอนที่ 2 จนกว่าจะไม่มีข้อมูล
การใช้งานโปรแกรม:
โปรแกรมนี้จะใช้ตัวแปร TStringList ของ stlID เพื่อจัดเก็บค่า ID ของแต่ละโหนดในแผนผังที่สอดคล้องกัน และใช้ฟังก์ชัน FindParent เพื่อค้นหาโหนดหลัก
ฟังก์ชัน FindParent(ID:String):TTreeNode;
var
ฉัน:จำนวนเต็ม;
เริ่ม
ผลลัพธ์:=ไม่มี;
สำหรับ i:=TreeView1.Items.Count-1 ลงไป 0 ทำ
ถ้า stlID.Strings[i]=ID แล้ว
เริ่ม
ผลลัพธ์:=TreeView1.Items[i];
หยุดพัก;
จบ;
จบ;
//ทอดต้นไม้
ขั้นตอน CreateTree;
var
tmpNode:TTreeNode;
เริ่ม
Query1.ปิด;
Query1.SQL.Text:='select * from table1 order by ParentID';
แบบสอบถาม1.เปิด;
แบบสอบถาม1.อันดับแรก;
ในขณะที่ไม่ใช่ Query1.Eof ทำ
เริ่ม
tmpNode:=TreeView1.Items.AddChild(FindParent(Query1.FieldByName('ParentID').AsString),Query1.FieldByName('ชื่อ').AsString);
stlID.Add(Query1.FieldByName('ID').AsString);//รหัสบันทึก
แบบสอบถาม1.ถัดไป;
จบ;
จบ;