Delphi สะดวกและรวดเร็วในการพัฒนาแอปพลิเคชัน C/S เนื่องจากมีการเข้าถึงข้อมูลที่ใช้งานง่ายและการควบคุมข้อมูลที่ใช้ข้อมูลจำนวนมาก อย่างไรก็ตามทุกอย่างเป็นเรื่องยากที่จะสมบูรณ์แบบ เมื่อสร้างวิดเจ็ตขั้นตอนที่สำคัญที่สุดคือการเลือกคลาสพาเรนต์ที่ถูกต้องซึ่งสามารถลดการเขียนโค้ดได้ ไลบรารีส่วนประกอบของ Delphi มีส่วนประกอบ TDATETIMEPICKER ซึ่งสามารถป้อนและเปลี่ยนวันที่และเวลาได้อย่างง่ายดายโดยการดึงปฏิทินหรือใช้การเพิ่มขึ้นและการลดลงของสปินบัตตัน แต่ไม่มีความสามารถในการรับรู้ข้อมูล ดังนั้นเราสามารถใช้เป็นคลาสหลักและรับการควบคุมใหม่รวมถึงฟังก์ชั่นที่ตระหนักถึงข้อมูลที่สามารถสื่อสารกับชุดข้อมูล การควบคุมข้อมูลที่ตระหนักถึงการโต้ตอบกับแหล่งข้อมูลผ่านวัตถุ DataLink ดังนั้นการเพิ่มการรับรู้ข้อมูลลงในการควบคุมจำเป็นต้องสร้าง TDATALINK (หรือคลาสที่ได้รับ) เป็นสมาชิกของการควบคุมและการสร้างฟิลด์ข้อมูลสาธารณะและแหล่งข้อมูลสำหรับการควบคุม ไปยังกิจกรรม tdatalink ondatachange และ onupdatedata ด้านล่างนี้เป็นซอร์สโค้ดหลักของการควบคุมพร้อมความคิดเห็นที่สอดคล้องกัน: {กำหนดคลาส TDBDATETIME ที่ได้จาก TDATETIMEPICKER โปรดทราบว่าควรเพิ่ม db ในการใช้งานของอินเตอร์เฟสหน่วยการอ้างอิง dbctrls} ประเภท
tdbDatetime = คลาส (tdatetimepicker)
ส่วนตัว
fdatalink: tfielddatalink;
// tfieldDatalink เป็นคลาสที่ได้รับของ tdatalink ที่จัดการการโต้ตอบของฟิลด์เดียวกับแหล่งข้อมูล
proceduredatachange (ผู้ส่ง: tobject);
// เมื่อเหตุการณ์ ondatachange ถูกทริกเกอร์เมื่อบันทึกการเปลี่ยนแปลงชุดข้อมูล (เช่นประวัติการเรียกดู) ข้อมูลจะถูกใช้เป็นที่จับการจัดการเหตุการณ์สำหรับเหตุการณ์
ProcedureUpdatedata (ผู้ส่ง: tobject);
// เหตุการณ์ onupdatedata จะถูกทริกเกอร์ก่อนอัปเดตชุดข้อมูลอัพเดตจะถูกใช้เป็นที่จับการประมวลผลเหตุการณ์สำหรับเหตุการณ์
functiongetDataSource: tDatasource;
ProcedureSetDataSource (ค่า: TDATASOURCE);
functiongetDatafield: สตริง;
ProcedureSetDatafield (ค่า: สตริง);
ProcedureCMexit (varmessage: tcmexit); ข้อความ cm_exit; // flashes ข้อความ cm_exit เมื่อการควบคุมสูญเสียโฟกัส
ได้รับการคุ้มครอง
ProcedureChange; การแทนที่เหตุการณ์ // onchange จะถูกเรียกใช้เมื่อวันที่และเวลาในการเปลี่ยนแปลงการควบคุม
ProcedUrenotification (ACOMPONENT: TCOMPONENT;
การดำเนินการ: toperation); แทนที่;
// IDE ของ Delphi เรียกใช้วิธีนี้เพื่อแจ้งการควบคุมอื่น ๆ เมื่อตัวควบคุมถูกลบออกจากแบบฟอร์ม
สาธารณะ
ConstructorCreate (AOWNER: TCOMPONENT); Override;
Destructordestroy; แทนที่;
ที่ร่ำรวย
PropertyDataSource: tDataSourCereAdgetDataSource
writesetDataSource; // เพิ่มคุณสมบัติ DataSource ลงในตัวควบคุมเพื่อให้สามารถเชื่อมต่อกับส่วนประกอบ DataSource
PropertyDatafield: StringReadGetDaField
WritesetDatafield;
สิ้นสุด; // เพิ่มแอตทริบิวต์ DataField ลงในตัวควบคุม
ทำให้มันชี้ไปที่วัตถุ tfield ที่เป็นตัวแทนของฟิลด์
procedureregister; // ส่วนประกอบลงทะเบียน
การดำเนินการ
ProcedUreTDBDATETIME.CMEXIT;
เริ่ม
พยายาม
fdatalink.updaterecord;
// อัปเดตชุดข้อมูลเมื่อตัวควบคุมสูญเสียโฟกัสซึ่งจะกระตุ้นเหตุการณ์ onUpdatedata
ยกเว้น
setfocus;
ยก;
จบ;
Doexit;
จบ;
constructortDbDatetime.create (AOWNER: TCOMPONENT);
เริ่ม
สืบทอด Create (AOWNER);
// สร้างวัตถุ Datalink, Mount Ondatachange,
ที่จับการประมวลผลเหตุการณ์ onupdatedata
fdatalink: = tfielddatalink.create;
fdatalink.ondatachange: = Datachange;
fdatalink.onupdatedata: = updatedata;
จบ;
DestructortDbDatetime.Destroy;
เริ่ม
fdatalink.ondatachange: = nil;
fdatalink.onupdatedata: = nil;
fdatalink.free;
มรดก
จบ;
functiontdbdatetime.getDataSource: tdatasource;
เริ่ม
ผลลัพธ์: = fdatalink.datasource;
จบ;
ProcedUreTDBDATETIME.SetDataSource (ค่า: TDATASOURCE);
เริ่ม
fdatalink.datasource: = ค่า;
จบ;
functiontdbdatetime.getDatafield: String;
เริ่ม
ผลลัพธ์: = fdatalink.fieldName;
จบ;
ProcedUreTDBDATETIME.SETDATAFIELD (ค่า: สตริง);
เริ่ม
fdatalink.fieldName: = ค่า;
จบ;
ProcedureTdbDatetime.datachange (ผู้ส่ง: tobject);
เริ่ม
DateTime: = ตอนนี้;
// หากการควบคุมเชื่อมต่อกับชุดข้อมูลที่ใช้งานอยู่ชุดข้อมูลจะเปลี่ยนไป
ตัวควบคุมแสดงค่าฟิลด์ที่สอดคล้องกันของระเบียนปัจจุบัน
iffdatalink.field nilthen
iffdatalink.field.text
DateTime: = fdatalink.field.asdateTime;
จบ;
ProcedUreTDBDATETIME.UPDATEDATA (ผู้ส่ง: TOBJECT);
เริ่ม
fdatalink.field.asdateTime: = DateTime;
// อัปเดตฟิลด์ที่เกี่ยวข้องกับวันที่และเวลาในการควบคุม
จบ;
ProcedureTDBDATETIME.CHANGE;
เริ่ม
// ตั้งค่าชุดข้อมูลเป็นแก้ไขสถานะเมื่อผู้ใช้เปลี่ยนเนื้อหาในการควบคุม
fdatalink.modified;
ifnotfdatalink.editingthen
fdatalink.edit;
สืบทอดมา;
จบ;
ProcedureTDBDATETIME.Notification (Acomponent:
tComponent; การดำเนินการ: topperation);
เริ่ม
การแจ้งเตือนที่สืบทอดมา (Acomponent, การดำเนินการ);
// เมื่อ tDataSource เชื่อมต่อกับการควบคุมคือ
ตั้งค่าคุณสมบัติ DataSource ของตัวควบคุมให้ว่างเปล่าเมื่อลบ
if (การดำเนินการ = opremove) และ (fdatalink nil)
และ (acomponent = dataSource) แล้ว
DataSource: = nil;
จบ;
ขั้นตอนการลงทะเบียน;
เริ่ม
registercomponents (Datacontrols,
[TDBDATETIME]); // หลังจากการควบคุมได้รับการลงทะเบียนแล้วจะถูกติดตั้งในหน้า DataControls
จบ;
จบ.
หลังจากการติดตั้งการควบคุมนี้สามารถดึงปฏิทินและเพิ่มหรือลดลงวันที่และเวลาของฐานข้อมูลและสามารถแสดงวันที่ในสองรูปแบบซึ่งสะดวกและใช้งานได้จริง การควบคุมมีความปลอดภัยและเชื่อถือได้ใน Delphi3 และ Delphi4