unit BriefcaseModelClientMain; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, uROClient, uROClientIntf, uRORemoteService, uROBinMessage, ExtCtrls, DBCtrls, Grids, DBGrids, ActnList; type TBriefcaseModelClientMainForm = class(TForm) Panel1: TPanel; gCustomers: TDBGrid; gOrders: TDBGrid; dbnCustomers: TDBNavigator; dbnOrders: TDBNavigator; Splitter1: TSplitter; OpenButton: TButton; ApplyUpdateButton: TButton; DiscardChangesButton: TButton; ShowChangesButton: TButton; ActionList1: TActionList; ApplyUpdateAction: TAction; DiscardChangesAction: TAction; ShowChangesAction: TAction; procedure ApplyUpdateButtonClick(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormCreate(Sender: TObject); procedure OpenButtonClick(Sender: TObject); procedure DiscardChangesButtonClick(Sender: TObject); procedure ShowChangesButtonClick(Sender: TObject); procedure ApplyUpdateActionUpdate(Sender: TObject); private { Private declarations } procedure Load; procedure Save; procedure FetchData; public { Public declarations } end; var BriefcaseModelClientMainForm: TBriefcaseModelClientMainForm; implementation uses BriefcaseModelClientData, uDADataTable, BriefcaseModelClientChanges; {$R *.dfm} procedure TBriefcaseModelClientMainForm.ApplyUpdateButtonClick(Sender: TObject); begin BriefcaseModelClientDataModule.RemoteDataAdapter.ApplyUpdates([BriefcaseModelClientDataModule.tbl_Customers]); end; procedure TBriefcaseModelClientMainForm.Load; function loadTable(ATable: TDADataTable): Boolean; var aFileName: string; begin aFileName := ExtractFilePath(Application.ExeName) + ATable.LogicalName + '.table'; if FileExists(aFileName) then begin aTable.LoadFromFile(aFileName); Result := True; end else Result := False; end; begin if not loadTable(BriefcaseModelClientDataModule.tbl_Customers) or not loadTable(BriefcaseModelClientDataModule.tbl_Orders) then begin if MessageDlg('No data table files could be found, do you want to fetch the data from the server?', mtConfirmation, [mbYes, mbNo], 0) = idYes then begin FetchData; end; end; end; procedure TBriefcaseModelClientMainForm.Save; procedure SaveTable(ATable: TDADataTable); begin with ATable do if active then SaveToFile(ExtractFilePath(Application.ExeName) + LogicalName + '.table'); end; begin with BriefcaseModelClientDataModule do begin SaveTable(tbl_Customers); SaveTable(tbl_Orders); end; end; procedure TBriefcaseModelClientMainForm.FormClose(Sender: TObject; var Action: TCloseAction); begin Save; end; procedure TBriefcaseModelClientMainForm.FormCreate(Sender: TObject); begin Load; end; procedure TBriefcaseModelClientMainForm.OpenButtonClick(Sender: TObject); begin FetchData; end; procedure TBriefcaseModelClientMainForm.FetchData; begin BriefcaseModelClientDataModule.tbl_Orders.close; BriefcaseModelClientDataModule.tbl_Customers.close; BriefcaseModelClientDataModule.RemoteDataAdapter.Fill([BriefcaseModelClientDataModule.tbl_Customers, BriefcaseModelClientDataModule.tbl_Orders], true, false); end; procedure TBriefcaseModelClientMainForm.DiscardChangesButtonClick(Sender: TObject); begin with BriefcaseModelClientDataModule do begin tbl_Customers.CancelUpdates; end; end; procedure TBriefcaseModelClientMainForm.ShowChangesButtonClick(Sender: TObject); begin ShowChanges; end; procedure TBriefcaseModelClientMainForm.ApplyUpdateActionUpdate( Sender: TObject); begin with BriefcaseModelClientDataModule do TAction(Sender).Enabled := (tbl_Customers.DeltaInitialized) and ((tbl_Customers.Delta.Count > 0)) or (tbl_Orders.DeltaInitialized) and ((tbl_Orders.Delta.Count > 0)) end; end.