การสร้างโปรแกรมแบบ 3 tier หรือ Multi-tier โดยใช้ Delphi 7 นั้นไม่มีอะไรซับซ้อน แต่ต้องเข้าใจในหลักการของสถาปัตยกรรมเทียร์(http://systemdevman.blogspot.com/2011/06/tier.html) เพื่อนำไปใช้งานได้จริง
ในตัวอย่างนี้ผู้เขียนจะใช้ ADO Component กับ ฐานข้อมูล MySQL เชื่อมต่อข้อมูลที่ Application Server
โดยใช้การรับ – ส่ง ผ่าน DCOM (Distributed Component Object Model) กับฝั่ง Client
สร้าง Application Server
สร้าง Project เป็น Application ตั้งชื่อฟอร์มเป็น frmAppServer และเปลี่ยน Caption เป็น AppServer
เพิ่ม Remote Data Module เข้ามาใน Project ด้วยการไปที่เมนู File > New > Other
![]() |
ไปที่ Tab Multitier เลือก Remote Data Module |
![]() |
ตั้งชื่อ Class Name เป็น TAppServerRDM ตามภาพ |
จะได้ Remote Data Module เข้ามาใน Project จากนั้นให้ Save Project
![]() |
ภาพรวมของ Project ในหน้าต่าง Project Manager |
ตอนนี้คือ Application Server ที่ยังไม่มีการเชื่อมต่อ Database ใดๆ
ต่อไปคือการเชื่อมต่อกับ Database MySQL โดยผู้เขียนเลือกที่จะใช้ AdoConnection ติดต่อผ่าน My ODBC ที่ได้ติดตั้งไว้แล้ว
การตั้งค่าใน My ODBC
ให้เข้าไปที่ Control Panel > Administrative Tools > Data Source(ODBC)
![]() |
เลือก Tab System DSN แล้วกดปุ่ม Add จะพบหน้าต่าง Create New Data Source ให้เลือก MySQL ODBC Driver ที่อยู่ในรายการ จากนั้นกด Finish |
![]() |
จะพบหน้าต่างให้ตั้งค่าสำหรับการเชื่อมต่อกับ MySQL ในที่นี้ผู้เขียนตั้งให้ DSN ชื่อ mysqlDATA_EN |
![]() |
เมื่อตั้งค่าเสร็จ กด OK แล้ว ชื่อของ DSN ที่สร้างขึ้นจะเข้ามาอยู่ในรายการ พร้อมใช้งานแล้ว |
การติดต่อกับ MySQL
ผู้เขียนจะใช้ Component กลุ่ม ADO กับ Remote Data Module
![]() |
ประกอบด้วย ADOConnection , ADOTable (EMPLOYEE) , DataSetProvider (dspEMPLOYEE) |
ใส่คำสั่งใน Event OnCreate ดังนี้
procedure TTAppServerRDM.RemoteDataModuleCreate(Sender: TObject);
begin
With Self.ADOConnection1 do
Begin
ConnectionString:='Provider=MSDASQL.1;Persist Security Info=False;Data Source=mysqlDATA_EN;Initial Catalog=data_en';
LoginPrompt:=false;
Connected:=true;
end;
With Self.EMPLOYEE do
Begin
Connection:=Self.ADOConnection1;
TableName:='EMPLOYEE';
Active:=true;
end;
With Self.dspEMPLOYEE do
Begin
DataSet:=Self.EMPLOYEE;
Options:=Options+[poAllowCommandText];
end;
end;
จากนั้นทดสอบโดยรันโปรแกรม ถ้าไม่มี Error ก็แสดงว่าการเชื่อมต่อกับฐานข้อมูลสมบูรณ์
ตอนนี้ Application Server สามารถเชื่อมต่อเพื่อดึงข้อมูลได้แล้ว ต่อไปคือการสร้าง Client เพื่อรับ - ส่งข้อมูลกับ Application Server
สร้าง Client Application
![]() |
ไปที่ Project Manager คลิ๊กเมาส์ขวาที่ ProjectGroup เลือก Add New Project |
![]() |
ให้เลือก Application จากนั้นจะเกิดฟอร์มขึ้น ตั้งชื่อฟอร์มเป็น frmClient และ Save ทั้งหมด |
![]() |
ภาพรวม Project ใน Project Manager |
![]() |
ใน frmClient ให้วาง Component DCOMConnection , ClientDataSet , DataSource และ DBGrid |
หมายเหตุ
DCOMConnection อยู่ใน Tab DataSnap
ClientDataSet และ DataSource อยู่ใน Tab Data Access
จากนั้นตั้งค่า Properties ให้กับ Component ต่างๆดังนี้
![]() |
กำหนด ComputerName เป็นเครื่องตัวเองคือ 127.0.0.1 หลังจากเราระบุเครื่องแล้ว ให้เราเลือก ServerName เป็น Application Server ที่เราได้สร้างขึ้น |
หมายเหตุ
ServerName ที่มองเห็นใน DropDown นั้นเกิดจากการรัน Application Server ที่เราสร้างขึ้น โดยเมื่อรันในครั้งแรกแล้ว Application Server จะทำการ Register ตัวเองเข้าไปใน Registry ของ Windows อัตโนมัติ
DCOMConnection
กำหนด Connected ให้เป็น True จะเห็นว่าเมื่อกำหนด Connected ให้เป็น True แล้ว จะเป็นการติดต่อกับ Application Server ที่ได้ระบุไว้ใน DCOMConnection ทันที โดย Application Server จะถูกเปิดขึ้นเพื่อพร้อมที่จะใช้งานโดยอันโนมัติ
![]() |
Application Server จะถูกเรียกเปิดขึ้นเมื่อทำการ Connect |
กำหนดค่า Properttesให้ ClientDataSet |
ที่ ClientDataSet ให้กำหนด RemoteServer ชี้ไปที่ DCOMConnection บนฟอร์ม ในที่นี้คือ DCOMCOnnection1 เมื่อกำหนดแล้วไปดูที่ Property ProviderName กด DropDown ลงมาจะมองเห็น DataSetProvider ที่อยู่บน Application Server ให้เลือกตัวที่ต้อการใช้ (ในที่นี้มีตัวเดียวคือ dspEMPLOYEE ตามภาพ) จากนั้นกำหนด Active=true
DataSource
![]() |
กำหนดค่า DataSource โดยให้ DataSet=ClientDataSet1 (ClientDataSet ที่อยู่บนฟอร์ม) |
จากนั้นเมื่อตั้งค่าให้ DBGrid รับค่าจาก DataSource ก็จะเห็นถึงข้อมูลที่ส่งมาจาก Application Server
![]() |
ข้อมูลที่ส่งผ่าน DataSetProvider ที่อยู่บน Application Server |
ในการใช้งานจริงอาจจะให้ DCOMConnection เริ่ม Connect ตอนฟอร์มโชว์ก็ได้
procedure TfrmClient.FormShow(Sender: TObject);
begin
Self.DCOMConnection1.Connected:=true;
end;
เมื่อรัน Client จะเห็นว่ามีการทำงานของ Application Server รันขึ้นมาพร้อมๆกันด้วย และเมื่อ Client ถูกปิด Application Server ก็จะปิดตัวเองไปด้วย
แต่ในการใช้งานจริง Application Server จะต้องนำไปไว้ใน Tier อื่น จะไว้บน Database Server ก็ได้
![]() |
Application Server และ Client ทำงานคู่กัน |
DCOM ทำงานอย่างไร?
ไม่มีความคิดเห็น:
แสดงความคิดเห็น