CRUD Delphi 2

CRUD Delphi 2


 


Veja neste artigo como desenvolver um formulário genérico de cadastro e consulta no Delphi que pode ser herdado, facilitando o desenvolvimento das telas de CRUD do sistema.





 (3)  (0)





O objetivo deste artigo é mostrar como criar um formulário simples e genérico para realizar consulta e cadastro (inserção, exclusão e edição) no Delphi, utilizando o conceito de herança para agilizar o desenvolvimento das telas de CRUD do sistema. Não iremos nos ater a design ou detalhes mais simples e sim abordar a ideia geral por trás desta prática. Aqui, utilizaremos os componentes da paleta ADO (ADOConnection e ADOQuery), mas o mesmo pode ser feito com outras engines.

Mãos à obra, vamos montar a estrutura do form. Inicialmente, devemos adicionar um formulário ao projeto (VCL Forms Application) e chamá-lo de “frmGenerico”. Neste form, adicionemos os seguintes controles:

TADOQuery

  • Name = “qryGeral”;

  • Connection = ADOConnection adicionado em um DataModule e configurado para acessar um banco de sua escolha


TDataSource

  • Name = “dsGeral”

  • DataSet = qryGeral


TPageControl

  • Name = “pgcPrincipal”

  • TTabSheet
    Caption = “Consulta”

  • TTabSheet
    Caption = “Cadastro”


Agora, dentro da aba Cadastro do pagecontrol, vamos adicionar os controles da seguinte forma:

TDBNavigator

  • Align = alTop

  • DataSource = dsGeral


TPanel

  • Name = “pnlDados”


Por último, dentro da aba Consulta do pagecontrol, adicionemos os seguintes controles:

TDBGrid

  • Align = alClient

  • DataSource = dsGeral


TPanel

  • TCombobox
    Name = “cbbColunas”

  • TEdit
    Name = “edtConsulta”

  • TButton
    Name = “btnConsultar”


Pronto, a estrutura básica está montada. Agora vamos ao código.

Antes de tudo é preciso declarar uma variável privada do tipo string chamada “SQL” que será usada na consulta. Feito isso, no evento onShow do form, devemos escrever o seguinte código:

Listagem 1: código do evento onShow

var
i:Integer;
begin
for i := 0 to Pred(dsGeral.DataSet.FieldCount) do
begin
if dsGeral.DataSet.Fields[i].Tag = 1 then
cbbColunas.Items.Add(dsGeral.DataSet.Fields[i].DisplayLabel);
end;
SQL := (dsGeral.DataSet as TADOQuery).SQL.Text;


Esse código adiciona no combobox o título das colunas da ADOQuery que estajam marcadas com Tag=1, essa foi a forma que definimos para identificar as colunas que podem ser usadas para consulta. No final, inicializamos a variável SQL com o conteúdo da propriedade SQL.Text da query, ou seja, devemos definir uma consulta inicial que possa ser usada de forma genérica, por exemplo: SELECT * FROM CLIENTES.

Agora, no evento onClick do botão btnConsultar, codificamos da seguinte forma:

Listagem 2: Código do evento onClick do botão Consultar

var
coluna:string;
i : Integer;
begin
coluna := EmptyStr;
for i := 0 to Pred(dsGeral.DataSet.FieldCount) do
begin
if dsGeral.DataSet.Fields[i].DisplayLabel = cbbColunas.Text then
coluna := dsGeral.DataSet.Fields[i].FieldName;
end;
dsGeral.DataSet.Close();
(dsGeral.DataSet as TADOQuery).SQL.Text := SQL + ' WHERE '+coluna+' = :valor ';
(dsGeral.DataSet as TADOQuery).Parameters.ParamByName('valor').Value := edtConsulta.Text;
dsGeral.DataSet.Open();


Esse trecho de código funciona da seguinte maneira: verificamos qual coluna está selecionada no combobox e encontramos o nome do campo para montar a consulta SQL. Percebemos que é necessário que a propriedade DisplayLabel das colunas seja única, para que se possa localizar corretamente a coluna selecioanda. Uma vez conhecida a coluna pela qual se deseja consultar, montamos uma instrução SQL com base no conteúdo da variável SQL (que deve ser algo como SELECT * FROM TABELA), definindo uma condição de consulta.

Para concluir a escrita de código, basta adicionar nos eventos onDblClick do DBGrid e onStateChange do DataSource os códigos constantes nas listagens 3 e 4.

Listagem 3: Código do evento onDblClick do DBGrid

pgcPrincipal.ActivePageIndex := 1;
//Ao clicar duas vezes sobre o grid, selecionar a aba de cadastro


Listagem 4: Código do evento onStateChange do DataSource.

pnlDados.Enabled := dsGeral.DataSet.State in [dsEdit, dsInsert];
//O painel com os campos para edição e inserção só fica habilitado
//se o DataSet estiver em edição ou inserção}


Para testar o fucionamento deste form genérico, basta adicionar ao projeto oum novo form herdando deste (File > New > Other > Inheritable Items > frmGenerico). Criado o form herdado, é necessário alterar o SQL da query para uma consulta simples como já foi citado, alterar a propriedade DisplayLabel das colunas e alterar para 1 a propriedade Tag das colunas pelas quais se deseja permitir a consulta. Na aba de cadastro, basta arrastar os campos da query para o painel pnlDados (ou adicionar da forma como preferir). Em geral, não é necessário adicionar nenhum código no form herdado, pois todas as rotinas de consulta e cadastro são genéricas e encontram-se no form pai. Se considerarmos um sistema com várias telas de CRUD básicas, que não diferem muito em funcionalidade, percebemos a praticidade que esta forma de trabalho garante.

Bem, o código é simples. Não me ative a detalhes, mas essa é a ideia geral na qual baseia-se a criação do form genérico de consulta e cadastro. Surgindo alguma dúvida, basta entrar em contato.

Um abraço e até a próxima.



Autor: Thyago Henrique Pacher

Nosso pessoal é especializado em produção de sistemas para nuvem de acordo com o que for necessário para sua empresa e altamente configurável. Entre em contato conosco e podera ter seu sistema até hoje mesmo com máximo de garantia de dados salvos na nuvem e podendo recupera-los a hora que quiser. Temos em nosso portfólio o desenvolvimento de bons e grandes sistemas cujo são voltados para condominios ficando em GestCCon Sistema Concierge, JedisaMunck site para muncks, Site para advogados Ronald Arruda, empresas de consignação de créditos, sites institucionais, sites para cursos online com integração a plataformas famosas tais como moodle.
Utilizamos no nosso dia a dia as melhores ferramentasimagem autor

Comentários

Postagens mais visitadas deste blog

Api para correspondente bancário - Analise Info