Cadastro funcional postado no forum para possiveis melhorias

19/07/2008

1

Pessoal tive uma idéia e resolvi deixar um modelo de cadastro que utilizo totalmente funcional aqui no fórum para que todos pudessem melhorá-los.
Foi utilizado conexão dbexpress, banco firebird com o trio de componentes:

sqldataset, datasetprovider e clientdataset.

No caso é um cadastro de funcionários e o sql utilizado é:

SELECT * FROM FUNCIONARIOS WHERE IDFUNCIONARIO=:IDFUNCIONARIO


O evento NewRecord do ClientDataSet é:

begin
  cdsfUNCIONARIOS.FieldByName(´IDFUNCIONARIO´).asinteger:=0;
  CdsFuncionarios.FieldByName(´DATACADASTRO´).AsDateTime:=date;
  cdsFuncionarios.FieldByName(´CEP´).AsString:=DmEmpresa.CdsEmpresaCEP.asstring;
  cdsFuncionarios.FieldByName(´CIDADE´).AsString:=DmEmpresa.CdsEmpresaCidade.AsString;
  cdsFuncionarios.FieldByName(´UF´).AsString:=DmEmpresa.CdsEmpresaUF.asstring;
  CdsFuncionarios.FieldByName(´SITUACAO´).AsString:=´SIM´;
end;


A rotina de auto incremento é:

procedure TDmFuncionarios.CdsFuncionariosBeforePost(DataSet: TDataSet);
begin
  if DataSet.State=dsInsert then
    CdsFuncionarios.FieldByName(´IDFUNCIONARIO´).AsInteger:=DMTABELAS.GetNewID(´GEN_FUNCIONARIOS_ID´);
end;


E o código do cadastro é:

unit UFuncionarios;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, ExtCtrls, StdCtrls, DBCtrls, DB, Mask, Buttons, jpeg,
  DBClient, BmsXPTopBar;

type
  TFrmFuncionarios = class(TForm)
    bar1: TStatusBar;
    Panel1: TPanel;
    pgc1: TPageControl;
    TabSheet1: TTabSheet;
    Panel2: TPanel;
    pnlPrincipal: TPanel;
    Label1: TLabel;
    DataSource1: TDataSource;
    Label2: TLabel;
    dbPrimeiro: TDBEdit;
    GroupBox1: TGroupBox;
    Label9: TLabel;
    DBEdit8: TDBEdit;
    Label11: TLabel;
    DBEdit10: TDBEdit;
    Label13: TLabel;
    DBEdit12: TDBEdit;
    Label14: TLabel;
    DBEdit13: TDBEdit;
    Label15: TLabel;
    DBEdit14: TDBEdit;
    Label16: TLabel;
    dbCPF: TDBEdit;
    Label17: TLabel;
    DBEdit16: TDBEdit;
    Label18: TLabel;
    DBEdit17: TDBEdit;
    GroupBox2: TGroupBox;
    Label3: TLabel;
    DBEdit3: TDBEdit;
    DBEdit4: TDBEdit;
    Label4: TLabel;
    Label5: TLabel;
    DBEdit5: TDBEdit;
    Label6: TLabel;
    DBEdit6: TDBEdit;
    Label7: TLabel;
    DBComboBox1: TDBComboBox;
    Label8: TLabel;
    DBEdit7: TDBEdit;
    btnInserir: TBitBtn;
    btnSalvar: TBitBtn;
    btnCancelar: TBitBtn;
    btnPesquisar: TBitBtn;
    btnExcluir: TBitBtn;
    Label10: TLabel;
    DBEdit9: TDBEdit;
    Label12: TLabel;
    DBEdit11: TDBEdit;
    Label19: TLabel;
    DBEdit18: TDBEdit;
    Label20: TLabel;
    DBEdit19: TDBEdit;
    Label21: TLabel;
    DBEdit20: TDBEdit;
    Label22: TLabel;
    DBCheckBox1: TDBCheckBox;
    Label23: TLabel;
    DBEdit21: TDBEdit;
    DBText1: TDBText;
    Label24: TLabel;
    DBEdit22: TDBEdit;
    Label25: TLabel;
    DBEdit23: TDBEdit;
    DBText2: TDBText;
    BmsXPTopBar1: TBmsXPTopBar;
    procedure btnInserirClick(Sender: TObject);
    procedure btnSalvarClick(Sender: TObject);
    procedure btnCancelarClick(Sender: TObject);
    procedure DataSource1StateChange(Sender: TObject);
    procedure btnExcluirClick(Sender: TObject);
    procedure btnPesquisarClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure dbCPFExit(Sender: TObject);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);

  private
    FDataSet: TClientDataSet;
    procedure Inserir;
    procedure Salvar;
    procedure Cancelar;
    procedure Pesquisar;
    procedure Excluir;
    procedure ControlarTela(filtro: integer);

  public
    property DataSet: TClientDataSet read FDataSet write FDataSet;
  end;

var
  FrmFuncionarios: TFrmFuncionarios;

implementation

uses UDmTabelas, UProcurar, UProcurarFuncionarios, UFuncoes,
  UDmFuncionarios;

{$R *.dfm}

procedure TFrmFuncionarios.FormShow(Sender: TObject);
begin
  DataSet := DmFuncionarios.CdsFuncionarios;
  ControlarTela(1);
end;

//=============INSERIR==========================================================
procedure TFrmFuncionarios.btnInserirClick(Sender: TObject);
begin
  Inserir;
end;

//==============SALVAR==========================================================
procedure TFrmFuncionarios.btnSalvarClick(Sender: TObject);
begin
  Salvar;
end;

//======================= CANCELAR =============================================
procedure TFrmFuncionarios.btnCancelarClick(Sender: TObject);
begin
  Cancelar;
end;

//====================== PESQUISAR==============================================
procedure TFrmFuncionarios.btnPesquisarClick(Sender: TObject);
begin
  Pesquisar;
end;

//======================= EXCLUIR ==============================================
procedure TFrmFuncionarios.btnExcluirClick(Sender: TObject);
begin
  Excluir;
end;

//======CONTROLAR ESTADO DOS BOTÕES=============================================
procedure TFrmFuncionarios.DataSource1StateChange(Sender: TObject);
const
  estados: array[TDataSetState] of string =
  (´Fechado´, ´Consultando´, ´Alterando´, ´Inserindo´, ´´, ´´, ´´, ´´, ´´, ´´,
   ´´, ´´, ´´);
begin
  btnInserir.Enabled := datasource1.State in [dsBrowse, dsInactive];
  btnSalvar.Enabled := datasource1.State in [dsinsert, dsedit];
  btnCancelar.Enabled := datasource1.State in [dsinsert, dsedit];
  btnExcluir.Enabled := datasource1.State in [dsBrowse];
  btnPesquisar.Enabled := datasource1.State in [dsBrowse, dsInactive];
  bar1.Panels[0].text := Estados[Datasource1.state];
end;

//====VALIDAR CPF===============================================================
procedure TFrmFuncionarios.dbCPFExit(Sender: TObject);
begin
  if (tbIsCPF(DataSet.FieldByName(´CPF´).AsString) = false) and
    (DataSource1.State in [dsinsert, dsedit, dsBrowse]) then
  begin
    ShowMessage(´CPF inválido´);
    DataSet.FieldByName(´CPF´).AsString := ´´;
  end;
end;


//==============================================================================
procedure TFrmFuncionarios.FormKeyPress(Sender: TObject; var Key: Char);
begin
//======Troca TAB por ENTER=====================================================
  if key = 13 then
  begin
    Key := 0;
    Perform(Wm_NextDlgCtl, 0, 0);
  end;
//=======Fecha Janelas ao apertar ESC===========================================
  if key = 27 then
    close;

end;

//==============================================================================
procedure TFrmFuncionarios.ControlarTela(filtro: integer);
begin
  pgc1.ActivePageIndex := 0;  //pgc é um pagecontrol

  if pgc1.Pages[0].CanFocus then
    pgc1.Pages[0].SetFocus;

  if filtro = 0 then 
    if dbPrimeiro.CanFocus then
      dbPrimeiro.SetFocus
  else
    if filtro = 1 then 
      if btnInserir.CanFocus then
        btnInserir.SetFocus;
end;

//==============================================================================
procedure TFrmFuncionarios.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
//se a tecla apertada for enter, botao gravar recebe o foco  e o click
  if key = VK_END then
  begin
    if btnSalvar.CanFocus then
      btnSalvar.SetFocus;
    btnSalvar.Click;
  end;
end;

procedure TFrmFuncionarios.Cancelar;
begin
  with DataSet do
  begin
    if MessageDlg(´Deseja realmente cancelar?´, mtConfirmation, [mbYes, mbNo],
      0) = mrYes then
    begin
      Cancel;
      CancelUpdates;
      Close;
      if btnInserir.CanFocus then btnInserir.SetFocus;
      ControlarTela(1);
    end
    else
      ControlarTela(0);
  end;
end;

procedure TFrmFuncionarios.Excluir;
begin
  with DataSet do
  begin
    if MessageDlg(´Deseja realmente excluir este registro?´, mtConfirmation,
      [mbyes, mbno], 0) = mryes then
    begin
      delete;
      if ApplyUpdates(0) <> 0 then
      begin
        CancelUpdates;
        ShowMessage(´Não é possível excluir este registro, ´
          + ´verifique se existem relacionamentos!´);
      end; //fim do if
    end;
    Close;
    ControlarTela(1);
  end; //fim do with
end;

procedure TFrmFuncionarios.Inserir;
begin
  with DataSet do
  begin
    if not active then
      open;
    Append;
  end; //fim do with
  Controlartela(0);
end;

procedure TFrmFuncionarios.Pesquisar;
begin
  FrmProcurarFuncionarios := TFrmProcurarFuncionarios.create(self);
  try
    if FrmProcurarFuncionarios.ShowModal = mrOk then
    begin
      with DataSet do
      begin
        Close;
        Params[0].AsInteger :=
          DmFuncionarios.CdsProcuraFuncionarioIDFuncionario.AsInteger;
        Open;
        ControlarTela(0);
      end; // fim do with
    end; // fim do if
  finally
    DmFuncionarios.CdsProcuraFuncionario.close;
    FrmProcurarFuncionarios.Free;
  end;
end;

procedure TFrmFuncionarios.Salvar;
begin
  with DataSet do
  begin
    post;
    if ApplyUpdates(0) <> 0 then
    begin
      CancelUpdates;
      MessageDlg(´Erro na Gravação!´, mtError, [mbok], 0);
    end
    else
      MessageDlg(´Registro salvo com sucesso!´, mtInformation, [mbok], 0);
    Close;
  end; // fim do with
  ControlarTela(1);
end;


procedure TFrmFuncionarios.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  DataSet.Close;
  DmTabelas.CdsListaFuncionarios.close;
end;

end.


Espero que seja de grande valia e todos colaborem para melhorar o código.


Responder

Posts

19/07/2008

Altingon

Obrigado por compartilhar com a galera amigo....parabéns....se tivesse umas telas do cadastro ajudaria bastante tambem...


Responder

19/07/2008

Frostlost

Se precisar da tela posso enviar no seu e-mail. Entre em contato por frostlost@yahoo.com.br solicitando a mesma.


Abraços

Claudio Stein Junior

Obrigado por compartilhar com a galera amigo....parabéns....se tivesse umas telas do cadastro ajudaria bastante tambem...
[/img]


Responder