Esse artigo faz parte da revista Clube Delphi Edição 82. Clique aqui para ler todos os artigos desta edição

dos de persistência das classes FuncionarioDiaristaDAO e FuncionarioDAO, cobrindo assim um exemplo completo envolvendo um funcionário diarista, tratando inclusive a associação desse com um departamento, conforme definido no modelo de domínio.

Para a definição dos demais métodos das classes DAO, cujos códigos são semelhantes aos demonstrados, basta realizar poucas modificações, principalmente nas expressões em SQL codificadas.

Na Listagem 1 está definido o Persistir da classe FuncionarioDiaristaDAO. Esse método é responsável por persistir as informações obtidas de um objeto da classe de domínio FuncionarioDiarista e armazená-las no banco de dados.

 

Listagem 1. Definição do Persistir da classe FuncionarioDiaristaDAO

1.             function FuncionarioDiaristaDAO.Persistir(

2.               pFuncDia: FuncionarioDiarista): Boolean;

3.             var

4.               vDataModule: TdtmdlDados;

5.             begin

6.               result := False;

7.               vDataModule := TdtmdlDados.Create(nil);

8.               vDataModule.clntdtstPrincipal.Close;

9.             if pFuncDia.getOID = '' then

10.         begin

11.           pFuncDia.setOID(self.GerarOID);

12.           vDataModule.sqldtstPrincipal.CommandText :=

13.             'select OID, Nome, Tipo, Departamento, NumDias,'+

        ' ValorDia from FUNCIONARIO where OID is null';

14.           vDataModule.clntdtstPrincipal.Open;

15.           vDataModule.clntdtstPrincipal.Insert;

16.           vDataModule.clntdtstPrincipal.FieldByName(

        'OID').AsString := pFuncDia.getOID;

17.         end

18.         else

19.         begin

20.           vDataModule.sqldtstPrincipal.CommandText :=

21.             ' select OID, Nome, Tipo, Departamento, '+

        'NumDias, ValorDia from FUNCIONARIO where OID = ''' +

        pFuncDia.getOID + '''';

22.           vDataModule.clntdtstPrincipal.Open;

23.           vDataModule.clntdtstPrincipal.Edit;

24.         end;

25.         vDataModule.clntdtstPrincipal.FieldByName(

      'NOME').AsString := pFuncDia.getNome;

26.         vDataModule.clntdtstPrincipal.FieldByName(

      'TIPO').AsString := 'D';

27.         vDataModule.clntdtstPrincipal.FieldByName(

      'DEPARTAMENTO').AsString :=

      pFuncDia.getDepartamento.getOID;

28.         vDataModule.clntdtstPrincipal.FieldByName(

      'NUMDIAS').AsInteger := pFuncDia.getNumDias;

29.         vDataModule.clntdtstPrincipal.FieldByName(

      'VALORDIA').AsCurrency := pFuncDia.getValorDia;

30.         vDataModule.clntdtstPrincipal.Post;

31.         if vDataModule.clntdtstPrincipal.ApplyUpdates(

      -1) = 0 then

32.         begin

33.           result := True;

34.         end;

35.         vDataModule.clntdtstPrincipal.Close;

36.         vDataModule.Free;

37.         end;

 

Nessa listagem, observa-se na linha 7 a criação de uma instância da classe TdtmdlDados, que é o Data Module responsável pela comunicação com o banco de dados. O Persistir no exemplo, realiza a dupla função de incluir um novo objeto no banco de dados, como também atualizar um objeto já existente.

Para isso, o critério de decisão para gerar as expressões SQL correspondentes a cada caso é a existência ou não de um OID do objeto. Caso o objeto ainda não possua um OID, conforme testado na linha 9, o bloco de código das linhas 10 a 17 é executado, gerando um novo OID, atribuindo e executando uma expressão SQL que garanta que somente a estrutura da tabela seja retornada e, por fim, o ClientDataSet é colocado em modo de inserção, conforme a linha 15. 

...

Quer ler esse conteúdo completo? Tenha acesso completo