unit BriefcaseModelClientChanges; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ComCtrls; type TBriefcaseModelClientChangesForm = class(TForm) ListView: TListView; Splitter1: TSplitter; ListBox: TListBox; procedure ListBoxClick(Sender: TObject); procedure ListViewData(Sender: TObject; Item: TListItem); private { Private declarations } procedure SetupListview; procedure Setup; public { Public declarations } end; var BriefcaseModelClientChangesForm: TBriefcaseModelClientChangesForm; procedure ShowChanges; implementation uses uDADelta, BriefcaseModelClientData, uDAInterfaces; {$R *.dfm} procedure ShowChanges; begin with TBriefcaseModelClientChangesForm.Create(Application) do try Setup; if ListBox.Count = 0 then Exit; ShowModal; finally Release; end; end; procedure TBriefcaseModelClientChangesForm.ListBoxClick(Sender: TObject); begin SetupListView; end; procedure TBriefcaseModelClientChangesForm.SetupListview; begin ListView.Items.Count := 0; if ListBox.ItemIndex = -1 then Exit; ListView.Items.Count := TDADeltaChange(Listbox.Items.Objects[ListBox.ItemIndex]).Delta.LoggedFieldCount; end; procedure TBriefcaseModelClientChangesForm.ListViewData(Sender: TObject; Item: TListItem); var DeltaChange: TDADeltaChange; begin if (Item = nil) or (Item.Index >= ListView.Items.Count) then Exit; DeltaChange := TDADeltaChange(Listbox.Items.Objects[ListBox.ItemIndex]); Item.Caption := DeltaChange.Delta.LoggedFieldNames[Item.Index]; if DeltaChange.ChangeType <> ctInsert then Item.SubItems.Add(VarToStr(DeltaChange.OldValueByName[Item.Caption])) else Item.SubItems.Add(''); if DeltaChange.ChangeType <> ctDelete then Item.SubItems.Add(VarToStr(DeltaChange.NewValueByName[Item.Caption])) else Item.SubItems.Add(''); end; procedure TBriefcaseModelClientChangesForm.Setup; procedure AddDelta(Delta: IDADelta); var str: string; i, j: integer; begin for i := 0 to Delta.Count - 1 do with Delta.Changes[i] do begin case ChangeType of ctInsert: str := '[New]'; ctUpdate: str := '[Update]'; ctDelete: str := '[Delete]'; end; str := str + ' ' + Delta.LogicalName + ': '; for j := 0 to delta.KeyFieldCount - 1 do begin if ChangeType = ctDelete then str := str + VarToStr(OldValueByName[delta.KeyFieldNames[j]]) + ',' else str := str + VarToStr(NewValueByName[delta.KeyFieldNames[j]]) + ',' end; if delta.KeyFieldCount > 0 then SetLength(Str, Length(str) - 1); ListBox.Items.AddObject(str, Delta.Changes[i]); end; end; begin ListBox.Items.Clear; with BriefcaseModelClientDataModule do begin if tbl_Customers.DeltaInitialized then AddDelta(tbl_Customers.Delta); if tbl_Orders.DeltaInitialized then AddDelta(tbl_Orders.Delta); end; if ListBox.Count > 0 then begin ListBox.ItemIndex := 0; ListBoxClick(ListBox); end; end; end.