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
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
...