Buscar

Manutenção Tabelas

Código

//**** MANUTENÇÃO DE TABELAS INTERBASE/FIREBASE
//**** autoria de Paulo R. Maitan - pmaitan@ig.com.br
//
//**** No DataModule use os eventos do IBDataset
//**** AfterDelete e AfterPost para incrementar a Tag do IBDataset desta maneira

procedure TDataModule.IBDatasetAfterDelete(DataSet: TDataSet);
begin
  IBDataset.Tag := IBDataset.Tag + 1;
end;

procedure TDataModule.IBDatasetAfterPost(DataSet: TDataSet);
begin
  IBReceber.Tag := IBReceber.Tag + 1;
end;

------------------------------------------------------------------------------
//**** Formulario de manutenção::..

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, DBCtrls, StdCtrls, Mask, Buttons;
type
  TForm1 = class(TForm)
    Label2: TLabel;
    DBEdit2: TDBEdit;
    Label3: TLabel;
    DBEdit3: TDBEdit;
    Label4: TLabel;
    DBEdit4: TDBEdit;
    DBNavigator1: TDBNavigator;
    btCommit: TBitBtn;
    btRollback: TBitBtn;
    Label1: TLabel;
    DBText1: TDBText;
    Timer1: TTimer;
    procedure FormShow(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure btCommitClick(Sender: TObject);
    procedure btRollbackClick(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses UnitDM;

{$R *.dfm}

//**** Abre a Tabela
procedure TForm1.FormShow(Sender: TObject);
begin
  DataModule.IBDataset.Open;
end;

//**** Fecha a tabala
procedure TForm1.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  DataModule.IBDataset.Close;
end;

//**** Salva os dados definitivamente e mantem o ponteiro do registro na mesma posição
procedure TForm1.btCommitClick(Sender: TObject);
  var
    CurRec: Pointer;
begin
  with DataModule.IBDataset do
  begin
    CurRec := GetBookmark;
    DisableControls;
    try
      dm.IBTransaction1.Commit;
      Tag := 0;
    finally
      Open;
      GotoBookmark(CurRec);
      FreeBookmark(CurRec);
      EnableControls;
    end;
    Refresh;
  end;
end;

//**** Cancela a gravação e mantem o ponteiro do registro na mesma posição
procedure TForm1.btRollbackClick(Sender: TObject);
  var
    CurRec: Pointer;
begin
  with DataModule.IBDataset do
  begin
    CurRec := GetBookmark;
    DisableControls;
    try
      dm.IBTransaction1.Rollback;
      Tag := 0;
    finally
      Open;
      GotoBookmark(CurRec);
      FreeBookmark(CurRec);
      EnableControls;
    end;
    Refresh;
  end;
end;

//*** Liga e desliga os botões
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if DataModule.IBDataset.Tag = 0 then
  begin
    btCommit.Enabled := false;
    btRollback.Enabled := false;
  end
  else
  begin
    btCommit.Enabled := true;
    btRollback.Enabled := true;
  end;
end;

//**** Se o Tag for maior que 0 (zero), é porque ouve deleção ou gravação de
//**** algum dado
//**** então você e questionado ao sair
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  if DataModule.IBDataset.Tag > 0 then
  begin
    Case MessageBox(Application.Handle, 'Existe dados para serem gravados!' +
    #13 + 'Gravar os dados?','Saindo...', MB_YESNOCANCEL + MB_ICONQUESTION +
    MB_DEFBUTTON1) of
     idYes:
        begin
          btCommitClick(Sender); //**** sai gravando
          Self.Close;
        end;
     idNo:
        begin
         btRollbackClick(Sender); //**** sai cancelando
         Self.Close;
        end;
     idCancel: //**** não sai
      Abort;
    end;
  end
  else
    self.close; //**** não existe dados sai numa boa
end;

end.

   

Publicidade

Vote na dica




Quantidade de votos: 1 voto
Aceitação: 20%


Detalhes da dica

Categoria: Banco de dados
Adicionada dia: 17/09/09
Por: Paulo Roberto Maitan
Visualizada: 4214 vezes

Planeta Delphi - Tudo sobre programação Delphi Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009