데이타셋 데모
1. Tag를 활용한 리펙토링 2. Interface를 활용한 DataSet State 분리
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
unit DataUnit;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
{ Delphi }
|
||||
System.SysUtils, System.Classes, Data.DB, dxmdaset, System.ImageList,
|
||||
Vcl.ImgList, Vcl.Controls, cxImageList, cxGraphics,
|
||||
{ Constom }
|
||||
Employee.Model;
|
||||
|
||||
type
|
||||
/// <summary>MainUnit에서 DataSet State를 사용하기 위해 인터페이스로 전달</summary>
|
||||
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;
|
||||
procedure dsEmployeeStateChange(Sender: TObject);
|
||||
procedure DataModuleCreate(Sender: TObject);
|
||||
private
|
||||
FNotifier: IDataStateNotifier;
|
||||
public
|
||||
procedure SetNotifier(ANotifier: IDataStateNotifier);
|
||||
/// <summary>Employee 전체 데이타 반환</summary>
|
||||
/// <returns>TArray<TEmployee> TEmployee 레코드를 배열로 반환</returns>
|
||||
/// <remarks>예제함수</remarks>
|
||||
function GetAllEmployee: TArray<TEmployee>;
|
||||
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<TEmployee>;
|
||||
begin
|
||||
var Employees: TArray<TEmployee>;
|
||||
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.
|
||||
Reference in New Issue
Block a user