Num cadastro padrão (CRUD), como configurar os DataSets de Manipulação de dados:
1 - Adicione o DataSet ao DataModule.
2 - Nomeie o DataSet. Exemplo: AdsClientes.
3 - Associe o DataSet ao conector do banco de dados: Através da propriedade “Connection” (Caso esteja trabalhado com ADO), ou “SQLConnection” (caso trabalhe com DBExpress), ou “DataBase” (caso a tecnologia de acesso a dados seja DBE ou IBExpress).
4 - Defina o comando SQL genérico na propriedade específica para isso:
- TADODataSet, TSQLDataSet – propriedade “CommandText”.
- TQuery, TADOQuery, TIBQuery – propriedade “SQL”.
Obs: TQuery deve trabalhar associado ao TUpdateSQL (o TIBQuery, igualmente com o seu correlato). Isso porque, eles não possuem a capacidade de gerar sozinhos os comandos de “insert”, “Update”, “Delete”.
O Comando SQL padrão para um dataset que fará inclusão, alteração e deleção deve ser:
- Selecionar todas as colunas da tabela (a qual se deseja construir o cadastro). Filtrando sempre pela chave primária usando para isso o operador relaciona de igualdade “=”. Exemplo genérico:
SELECT
*
FROM
[Nome da Tabela]
WHERE
[“ColunaPK”] = :parametro
Exemplo específico:
SELECT
*
FROM
Clientes
WHERE
ClienteID = :pID
OBS: O símbolo “:” determina um parâmetro, o qual, no programa Delphi, receberá dinamicamente valor (muitas vezes da interface) , para então executar comando SQL retornando para a aplicação os dados desejados.
5 - Configurar o tipo do parâmetro na propriedade “Params”, ou “Parameters” caso trabalhe com ADO.
6 - Adicionar os campos persistentes: Botão direito sobre o dataset, no Fields Editor, Add all fields
7 - Configurar as propriedades “DisplayLabel”, “DisplayFormat” ou “EditMasck” caso deseje formatar o dado para exibí-lo. Exemplo:
AdsClientesConsDataCadastro.DiplayLabel = ‘Data de Cadastro’;
AdsClientesConsDataCadastro.DiplayFormat = ‘DD/MM/YYYY’;
AdsClientesConsValorComprado.DiplayLabel = ‘Valor Total em Compras:’;
AdsClientesConsValorComprado.DiplayFormat = #,##0.00;
OBS1: Esses DataSets configurados para inclusão, alteração e deleção não são propícios para utilização de “JOINS” (uniões entre tabelas). Visto que, o resultset retornado por este tipo de select não é atualizável. Contudo, através da utilização da tecnologia MIDAS, é possível fazer com que dados possam ser atualizados a partir dessa abordagem. Todavia, isso requer o emprego de uma técnica específica, a qual emprega uma configuração apropriada no TDataSetProvider para este fim. Veremos sobre está técnica adiante.
OBS2: No cado dos componentes da ADO altere a propriedade “LockType” para “ltBatchOptimistic”. Para habiltá-lo a trabalhar com Cache.
“Use the LockType ltBatchOptimistic to open a dataset in batch update mode.”
8 - Valores default deverão ser atribuídos no evento “OnNewRecord” do DataSet, caso seja sua opção fazer isso pelo front-end. Exemplo:
procedure TDM.AdsClientesNewRecord(DataSet: TDataSet);
begin
AdsClientesID_Cliente.AsInteger := GeraID(AdsClientesID_Cliente.FieldName);
AdsClientesStatus.AsString := 'S';
AdsClientesTipo.AsString := 'F';
AdsClientesData.AsDateTime := Now;
end;
Considerações finais:
Fiz referência, neste post a classe “TDataSet” que é a classe da qual derivam todos os objetos de seleção e manipulação de dados da VCL (biblioteca de componentes visuais, do Delphi), porque meu intuito é apresentar uma forma padronizada, genérica, para configuração de componentes usados em programas de cadastro. Ou seja se você procurar na palheta decomponentes por “DataSet” não vai encontrar nada. Uma questão quanto a isso seria que, nem todos os componentes que derivam de TDataSet são adequados para as configurações listadas por mim neste exemplo. Mas, apesar disso, os DataSets aos quais me refiro aqui são adequados para a funcionalidade de cadastro.
Outra coisa importante a destacar é que este exemplo não aborda uma metodologia definitiva, completa para todos os casos de CRUD. Meu objetivo é mostrar a importância de se definir um procedimento padrão, através de um exemplo, mais próximo da realidade que um desenvolvedor encontra no dia-a-dia, que serve como ponto de partida didaticamente formulado.
Artigo completo (View Full Post)