unit MasterDetailMultiDemoData; interface uses Forms, SysUtils, Classes, DB, cxStyles, cxClasses, cxGridTableView, cxGridCardView, cxGridBandedTableView, DBTables, DemoUtils; type TMasterDetailMultiDemoMainDM = class(TDataModule) dsFilms: TDataSource; dsFilmsPersons: TDataSource; dsPersonsLine: TDataSource; tblPersonsLine: TTable; tblPersonsLineID: TAutoIncField; tblPersonsLineNAME: TStringField; DataBase: TDataBase; qryFilmsPersons: TQuery; qryFilmsPersonsName: TStringField; qryFilmsPersonsPersonLineID: TIntegerField; qryFilmsPersonsFIRSTNAME: TStringField; qryFilmsPersonsSECONDNAME: TStringField; qryFilmsPersonsNICKNAME: TStringField; qryFilmsPersonsBIRTHNAME: TStringField; qryFilmsPersonsDATEOFBIRTH: TDateTimeField; qryFilmsPersonsLOCATIONOFBIRTH: TStringField; qryFilmsPersonsBIOGRAPHY: TMemoField; qryFilmsPersonsHOMEPAGE: TStringField; qryFilmsPersonsID: TAutoIncField; qryFilmsPersonsFilmID: TIntegerField; qryFilmsPersonsBIRTHCOUNTRY: TIntegerField; qryFilmsPersonsGender: TBooleanField; tblPersonsHelper: TTable; tblPersonsHelperID: TAutoIncField; tblPersonsHelperFIRSTNAME: TStringField; tblPersonsHelperSECONDNAME: TStringField; tblPersonsHelperGENDER: TBooleanField; tblPersonsHelperBIRTHNAME: TStringField; tblPersonsHelperDATEOFBIRTH: TDateTimeField; tblPersonsHelperBIRTHCOUNTRY: TIntegerField; tblPersonsHelperLOCATIONOFBIRTH: TStringField; tblPersonsHelperBIOGRAPHY: TMemoField; tblPersonsHelperNICKNAME: TStringField; tblPersonsHelperHOMEPAGE: TStringField; tblPersonsStaffHelper: TTable; tblPersonsStaffHelperID: TAutoIncField; tblPersonsStaffHelperFILMID: TIntegerField; tblPersonsStaffHelperPERSONLINEID: TIntegerField; tblPersonsStaffHelperPERSONID: TIntegerField; tblPersonsStaffHelperDESCRIPTION: TStringField; dsFilmsCompanies: TDataSource; qryFilmsCompanies: TQuery; qryFilmsCompaniesName: TStringField; qryFilmsCompaniesType: TStringField; qryFilmsCompaniesCountry: TStringField; qryFilmsCompaniesWebSite: TStringField; qryFilmsCompaniesID: TIntegerField; qryFilmsCompaniesFILMID: TIntegerField; tblFilmsScreens: TTable; tblFilmsScreensID: TAutoIncField; tblFilmsScreensFILMID: TIntegerField; tblFilmsScreensSCREEN: TBlobField; tblFilmsScreensICON: TBlobField; dsFilmsScreens: TDataSource; qryFilms: TQuery; qryFilmsID: TAutoIncField; qryFilmsCAPTION: TStringField; qryFilmsYEAR: TIntegerField; qryFilmsTAGLINE: TStringField; qryFilmsPLOTOUTLINE: TStringField; qryFilmsRUNTIME: TIntegerField; qryFilmsCOLOR: TStringField; qryFilmsPHOTO: TBlobField; qryFilmsICON: TBlobField; qryFilmsWEBSITE: TStringField; tblGenres: TTable; tblGenresID: TAutoIncField; tblGenresNAME: TStringField; cxStyleRepository: TcxStyleRepository; GridTableViewStyleSheetDevExpress: TcxGridTableViewStyleSheet; cxStyle1: TcxStyle; cxStyle2: TcxStyle; cxStyle3: TcxStyle; cxStyle4: TcxStyle; cxStyle5: TcxStyle; cxStyle6: TcxStyle; cxStyle7: TcxStyle; cxStyle8: TcxStyle; cxStyle9: TcxStyle; cxStyle10: TcxStyle; cxStyle11: TcxStyle; cxStyle12: TcxStyle; cxStyle13: TcxStyle; cxStyle14: TcxStyle; GridBandedTableViewStyleSheetDevExpress: TcxGridBandedTableViewStyleSheet; cxStyle15: TcxStyle; cxStyle16: TcxStyle; cxStyle17: TcxStyle; cxStyle18: TcxStyle; cxStyle19: TcxStyle; cxStyle20: TcxStyle; cxStyle21: TcxStyle; cxStyle22: TcxStyle; cxStyle23: TcxStyle; cxStyle24: TcxStyle; cxStyle25: TcxStyle; cxStyle26: TcxStyle; cxStyle27: TcxStyle; cxStyle28: TcxStyle; cxStyle29: TcxStyle; cxStyle30: TcxStyle; GridCardViewStyleSheetDevExpress: TcxGridCardViewStyleSheet; cxStyle31: TcxStyle; cxStyle32: TcxStyle; cxStyle33: TcxStyle; cxStyle34: TcxStyle; cxStyle35: TcxStyle; cxStyle36: TcxStyle; cxStyle37: TcxStyle; cxStyle38: TcxStyle; cxStyle39: TcxStyle; cxStyle40: TcxStyle; procedure qryFilmsPersonsCalcFields(DataSet: TDataSet); procedure qryFilmsPersonsBeforePost(DataSet: TDataSet); procedure qryFilmsPersonsAfterInsert(DataSet: TDataSet); private { Private declarations } FIsInserting: Boolean; public { Public declarations } end; var MasterDetailMultiDemoMainDM: TMasterDetailMultiDemoMainDM; implementation {$R *.dfm} procedure TMasterDetailMultiDemoMainDM.qryFilmsPersonsCalcFields( DataSet: TDataSet); begin SetStringFieldValue(qryFilmsPersonsName, qryFilmsPersonsFIRSTNAME.Value + ' ' + qryFilmsPersonsSECONDNAME.Value); end; procedure TMasterDetailMultiDemoMainDM.qryFilmsPersonsBeforePost( DataSet: TDataSet); procedure InsertNewPerson; begin tblPersonsHelper.Insert; tblPersonsHelperFIRSTNAME.AsString := qryFilmsPersonsFIRSTNAME.AsString; tblPersonsHelperSECONDNAME.Value := qryFilmsPersonsSECONDNAME.Value; tblPersonsHelperGENDER.AsBoolean := qryFilmsPersonsGender.AsBoolean; tblPersonsHelperBIRTHNAME.AsString := qryFilmsPersonsBIRTHNAME.AsString; tblPersonsHelperDATEOFBIRTH.AsDateTime := qryFilmsPersonsDATEOFBIRTH.AsDateTime; tblPersonsHelperBIRTHCOUNTRY.AsString := qryFilmsPersonsBIRTHCOUNTRY.AsString; tblPersonsHelperLOCATIONOFBIRTH.AsString := qryFilmsPersonsLOCATIONOFBIRTH.AsString; tblPersonsHelperBIOGRAPHY.AsString := qryFilmsPersonsBIOGRAPHY.AsString; tblPersonsHelperNICKNAME.AsString := qryFilmsPersonsNICKNAME.AsString; tblPersonsHelperHOMEPAGE.AsString := qryFilmsPersonsHOMEPAGE.AsString; tblPersonsHelper.Post; end; procedure InsertNewPersonStaff; begin tblPersonsStaffHelper.Insert; tblPersonsStaffHelperPERSONID.AsInteger := tblPersonsHelperID.AsInteger; tblPersonsStaffHelperPERSONLINEID.AsInteger := qryFilmsPersonsPersonLineID.AsInteger; tblPersonsStaffHelper.Post; end; begin if FIsInserting then begin InsertNewPerson; InsertNewPersonStaff; DataSet.Cancel; DataSet.Close; DataSet.Open; DataSet.Locate('ID',tblPersonsStaffHelper.FieldByName('ID').AsInteger,[]); Abort; FIsInserting := False end; end; procedure TMasterDetailMultiDemoMainDM.qryFilmsPersonsAfterInsert( DataSet: TDataSet); begin FIsInserting := True; end; end.