Most popular

วันอาทิตย์ที่ 10 กรกฎาคม พ.ศ. 2554

Delphi 7 Multi-tier (Application server -> DCOM)

การสร้างโปรแกรมแบบ 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
ClientDataSet
กำหนดค่า 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 ทำงานอย่างไร?

ไม่มีความคิดเห็น:

แสดงความคิดเห็น