📄 cachedup.~pas
字号:
unit CachedUp;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Menus, StdCtrls, ExtCtrls, DBCtrls, Grids, DBGrids, IBCustomDataSet, Db, IBQuery;
type
TCacheDemoForm = class(TForm)
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
GroupBox1: TGroupBox;
UnmodifiedCB: TCheckBox;
ModifiedCB: TCheckBox;
InsertedCB: TCheckBox;
DeletedCB: TCheckBox;
Panel2: TPanel;
ApplyUpdatesBtn: TButton;
CancelUpdatesBtn: TButton;
RevertRecordBtn: TButton;
ReExecuteButton: TButton;
RadioGroup1: TRadioGroup;
btnUpdateStatus: TButton;
procedure ApplyUpdatesBtnClick(Sender: TObject);
procedure CancelUpdatesBtnClick(Sender: TObject);
procedure RevertRecordBtnClick(Sender: TObject);
procedure UpdateRecordsToShow(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure ReExecuteButtonClick(Sender: TObject);
procedure RadioGroup1Click(Sender: TObject);
procedure btnUpdateStatusClick(Sender: TObject);
private
{ Private declarations }
FDataSet: TIBCustomDataSet;
procedure SetControlStates(Enabled: Boolean);
public
{ Public declarations }
end;
var
CacheDemoForm: TCacheDemoForm;
implementation
{$R *.dfm}
uses
ErrForm, DataMod, typInfo;
procedure TCacheDemoForm.SetControlStates(Enabled: Boolean);
begin
ApplyUpdatesBtn.Enabled := Enabled;
CancelUpdatesBtn.Enabled := Enabled;
RevertRecordBtn.Enabled := Enabled;
UnmodifiedCB.Enabled := Enabled;
ModifiedCB.Enabled := Enabled;
InsertedCB.Enabled := Enabled;
DeletedCB.Enabled := Enabled;
end;
procedure TCacheDemoForm.FormCreate(Sender: TObject);
begin
FDataSet := CacheData.CacheDS.DataSet as TIBCustomDataSet;
FDataset.Close;
SetControlStates(true);
FDataSet.Open;
end;
procedure TCacheDemoForm.ApplyUpdatesBtnClick(Sender: TObject);
begin
FDataSet.Database.ApplyUpdates([FDataSet]);
end;
procedure TCacheDemoForm.CancelUpdatesBtnClick(Sender: TObject);
begin
FDataSet.CancelUpdates;
end;
procedure TCacheDemoForm.RevertRecordBtnClick(Sender: TObject);
begin
UpdateErrorForm.ShowModal
// FDataSet.RevertRecord;
end;
procedure TCacheDemoForm.UpdateRecordsToShow(Sender: TObject);
var
UpdRecTypes : TIBUpdateRecordTypes;
begin
UpdRecTypes := [];
if UnModifiedCB.Checked then
Include(UpdRecTypes, cusUnModified);
if ModifiedCB.Checked then
Include(UpdRecTypes, cusModified);
if InsertedCB.Checked then
Include(UpdRecTypes, cusInserted);
if DeletedCB.Checked then
Include(UpdRecTypes, cusDeleted);
FDataSet.UpdateRecordTypes := UpdRecTypes;
end;
procedure TCacheDemoForm.ReExecuteButtonClick(Sender: TObject);
begin
FDataSet.Close;
FDataSet.Open;
end;
procedure TCacheDemoForm.RadioGroup1Click(Sender: TObject);
var
NewDataset : TIBCustomDataset;
begin
case TRadioGroup(Sender).ItemIndex of
0 : NewDataset := CacheData.IBCacheQuery;
1 : NewDataset := CacheData.IBCachedDataSet;
else
NewDataset := CacheData.IBCachedTable;
end;
//如果数据集变化,则直接退出,否则须提示用户是否抛弃前面的数据
if NewDataSet <> FDataset then
begin
if FDataset.UpdatesPending then
if MessageDlg('Updates Pending. Are you certain you want to discard?', mtConfirmation, [mbYes, mbNo], 0) = IDNO then
begin
RadioGroup1.ItemIndex := FDataset.Tag;
Exit;
end;
FDataset.Close; //切换数据集前要先关闭数据集
FDataset := NewDataset; //切换数据集
CacheData.CacheDS.DataSet := FDataset;
FDataset.Open;
end;
end;
procedure TCacheDemoForm.btnUpdateStatusClick(Sender: TObject);
begin
case FDataset.UpdateStatus of
usUnmodified : ShowMessage('Unmodified');
usModified : ShowMessage('Modified');
usInserted : ShowMessage('Inserted');
usDeleted : ShowMessage('Deleted');
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -