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.