unit DataUnit; interface uses { Delphi } System.SysUtils, System.Classes, Data.DB, dxmdaset, System.ImageList, Vcl.ImgList, Vcl.Controls, cxImageList, cxGraphics, { Constom } Employee.Model; type /// MainUnit에서 DataSet State를 사용하기 위해 인터페이스로 전달 IDataStateNotifier = interface procedure NotifyDataSetStateChange(const AState: TDataSetState); end; TdmData = class(TDataModule) mdEmployee: TdxMemData; mdEmployeename: TStringField; mdEmployeeage: TSmallintField; mdEmployeeposition: TStringField; mdEmployeesalary: TIntegerField; mdEmployeeaddress: TStringField; dsEmployee: TDataSource; ilSmallIcons: TcxImageList; mdEmployeeworktype: TSmallintField; procedure dsEmployeeStateChange(Sender: TObject); procedure DataModuleCreate(Sender: TObject); private FNotifier: IDataStateNotifier; public procedure SetNotifier(ANotifier: IDataStateNotifier); /// Employee 전체 데이타 반환 /// TArray TEmployee 레코드를 배열로 반환 /// 예제함수 function GetAllEmployee: TArray; end; var dmData: TdmData; implementation {$R *.dfm} procedure TdmData.DataModuleCreate(Sender: TObject); begin mdEmployee.Active:= True; end; procedure TdmData.dsEmployeeStateChange(Sender: TObject); begin // DataSet 상태가 변할때 NotifyDataSetStateChange 메소드로 전달 if Assigned(FNotifier) then FNotifier.NotifyDataSetStateChange(dsEmployee.DataSet.State); end; procedure TdmData.SetNotifier(ANotifier: IDataStateNotifier); begin FNotifier:= ANotifier; end; function TdmData.GetAllEmployee: TArray; begin var Employees: TArray; var i:= 0; SetLength(Employees, mdEmployee.RecordCount); mdEmployee.First; while Not mdEmployee.EOF do begin Employees[i].Name:= mdEmployee.FieldByName('Name').AsString; Inc(i); mdEmployee.Next; end; result:= Employees; end; end.