⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cachedup.pas

📁 Delphi_7.0数据库开发源代码。有内容十一章节
💻 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
  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 + -