Como Criar um Projeto CRUD em Delphi Usando MySQL e ADODB

CRUD em Delphi

Introdução

CRUD é uma sigla para Create, Read, Update e Delete, que são as quatro operações básicas para gerenciar dados em um banco de dados. Neste artigo, vamos criar um projeto CRUD em Delphi, utilizando o banco de dados MySQL e a biblioteca ADODB para conexão. Vamos abordar cada uma dessas operações com um exemplo prático e detalhado para que qualquer pessoa, mesmo iniciantes, possam entender e implementar.

Lembrando que esse será um exemplo muito simples de manipulação de banco de dados, feito da forma mais simples possível para que todos consigam entender.

Preparativos

Requisitos

Antes de começarmos, precisamos garantir que temos o seguinte instalado:

  1. Delphi (qualquer versão que suporte VCL e ADODB).
  2. MySQL Server.
  3. MySQL Workbench ou qualquer outro cliente MySQL para gerenciar o banco de dados.

Caso não saiba como instalar e configurar o MySql, veja o post abaixo:

https://codedelphi.com/banco-de-dados-em-delphi

Configuração do Banco de Dados

Para criar o banco de dados, abra o MySQl Workbench e selecione a instância da sua conexão e insira a senha que você escolheu na instalação:

CRUD em Delphi

Vamos criar um banco de dados MySQL chamado dbCRUD e uma tabela tblClientes com os seguintes campos:

CREATE DATABASE dbCRUD;
USE dbCRUD;

CREATE TABLE tblClientes (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nome VARCHAR(255),
    email VARCHAR(255),
    telefone VARCHAR(20)
);

Crie uma nova aba SQL, para digitar os comandos acima e assim criar o banco de dados e a tabela que será utilizada nesse projeto. Siga a ordem das numerações da imagem abaixo. Insira o código na aba aberta, execute o código clicando no botão de executar e pronto, nosso banco de dados e tabela, estão criados.

CRUD em Delphi

Configuração do Delphi

  1. Abra o Delphi e crie um novo projeto VCL Forms Application.
  2. Adicione um componente TADOConnection ao formulário para gerenciar a conexão com o banco de dados.
  3. Adicione um componente TADOTable para manipular os dados da tabela.
  4. Adicione componentes visuais como TDBEdit(3), TButton(4), TDataSource(1), TDBGrid(1) e TLabel(3).

Configuração da Conexão

Configure o componente TADOConnection para se conectar ao banco de dados MySQL:

ADOConnection1.ConnectionString := 'Provider=MSDASQL.1;Password=yourpassword;User ID=yourusername;Data Source=yourdatasource;Initial Catalog=dbCRUD';
ADOConnection1.LoginPrompt := False;

Substitua yourpassword, yourusername, e yourdatasource pelos valores apropriados.

Preparando o formulário

Adicione os componentes TDBEdit para capturar o nome, e-mail e telefone, as TLabels para a descrição de cada campo, os TButton para inserir, alterar, excluir e salvar os dados:

Para visualizar os dados, utilizamos um TDBGrid conectado a um TDataSource que, por sua vez, está conectado ao TADOTable, além de ser necessário conectar o banco de dados e abrir a tabela para que os dados sejam exibidos. Isso pode ser feito no evento FormCreate do formuário,

procedure TForm1.FormCreate(Sender: TObject);
begin
  //Configura a conexão com o MySql
  ADOConnection1.ConnectionString := 'Provider=MSDASQL.1;Persist Security Info=False;User ID=root;Data Source=MySql ODBC 32 Ansi;Initial Catalog=dbcrud;';
  ADOConnection1.DefaultDatabase := 'dbcrud';
  ADOConnection1.LoginPrompt := False;//seta o login prompt para falso, para não exibir a entrada de senha
  ADOConnection1.Connected := True; //Conecta o banco de dados

  ADOConnection1.Connected := True; //Ativa a conexão
  ADOTable1.Connection := ADOConnection1; //liga a conexão na tabela
  ADOTable1.TableName := 'tblClientes';//seta o nome da tabela
  ADOTable1.Active := True;//ativa a tabela

  DataSource1.DataSet := ADOTable1; //liga a tabela ao datasource
  DBGrid1.DataSource := DataSource1;//liga o datasource a grid

  HabilitarDesabilitar(False);//Desabilita os campos para digitar  
end;

Já no evento FormClose, iremos fechar as conexões sempre que o formulário for fechado.

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  ADOTable1.Close;//Fecha a conexão da tabela
  ADOConnection1.Connected := False;//Fecha a conexão do banco de dados
end;

Operações CRUD em Delphi

CREATE (Inserir)

No evento ButtonInsertClick do botão inserir, vamos inserir o seguinte código para habilitar a inserção dos registros:

procedure TForm1.ButtonInsertClick(Sender: TObject);
begin
  //Verifica se o registro não está em modo de inserção ou edição
  if not (ADOTable1.State in [dsInsert, dsEdit]) then
  begin
    HabilitarDesabilitar(True);//Habilita os campos para digitar
    ADOTable1.Insert; //Prepara o componente ADOTable1 para inserir os registros na tabela tblClientes
    EditNome.SetFocus;//seta o foco na caixa de texto nome
  end;
end;

UPDATE (Atualizar)

No evento ButtonUpdateClick do botão alterar, vamos inserir o seguinte código para habilitar a edição dos registros:

procedure TForm1.ButtonUpdateClick(Sender: TObject);
begin
  //Verifica se a tabela possui registros para alterar
  //e verifica se o registro não está em modo de inserção ou edição
  if (not ADOTable1.IsEmpty) and (not (ADOTable1.State in [dsInsert, dsEdit])) then
  begin
    HabilitarDesabilitar(True);//Habilita os campos para digitar
    ADOTable1.Edit;//Prepara o componente ADOTable1 para alterar os registros na tabela tblClientes
    EditNome.SetFocus;//seta o foco na caixa de texto nome
  end;
end;

DELETE (Deletar)

No evento ButtonDeleteClick botão excluir, vamos inserir o seguinte código para exclusão dos registros:

procedure TForm1.ButtonDeleteClick(Sender: TObject);
begin
  //Verifica se a tabela tem registros inseridos, para serem excluídos
  if not ADOTable1.IsEmpty then
  begin
    //faz uma pergunta para excluir o registro, caso responda sim, o registro será excluido
    if MessageDlg('Deseja realmente excluir este cliente?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
    begin
      ADOTable1.Delete;// comando para deletar o registro
      ShowMessage('Cliente excluído com sucesso!');//Exibe mensagem de sucesso
    end;
  end;
end;

Funções complementares

Save (Salvar)

No evento ButtonSaveClick botão salvar, vamos inserir o seguinte código para salvar os registros:

procedure TForm1.ButtonSaveClick(Sender: TObject);
begin
  //Verifica se a tabela está em modo de inserção ou edição, caso esteja, salva o registro
  if (ADOTable1.State in [dsInsert, dsEdit]) then
  begin
    ADOTable1.Post;//Salva os dados no banco de dados
    HabilitarDesabilitar(False);//Desabilita os campos para digitar
    ShowMessage('Cliente salvo com sucesso!');//Exibe mensagem de sucesso.
  end;

end;

HabilitarDesabilitar

Essa procedure é encarregada de habilitar e desabilitar os campos para inserção e edição sempre que os botões de inserir e alterar são acionados, para que os dados estejam protegidos e só sejam alterados quando for necessário.

procedure TForm1.HabilitarDesabilitar(Habilitar:Boolean);
begin
  //Habilita e desabilita as caixas de texto de acordo com o parametro Habilitar
  EditNome.Enabled := Habilitar;
  EditEmail.Enabled := Habilitar;
  EditTelefone.Enabled := Habilitar;
end;

Código fonte completo

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, Data.Win.ADODB, Vcl.StdCtrls, Vcl.Grids, Vcl.DBGrids, Vcl.Mask, Vcl.ExtCtrls, Vcl.DBCtrls;

type
  TForm1 = class(TForm)
    DBGrid1: TDBGrid;
    ButtonInsert: TButton;
    ButtonUpdate: TButton;
    ButtonDelete: TButton;
    EditNome: TDBEdit;
    EditEmail: TDBEdit;
    EditTelefone: TDBEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    ADOConnection1: TADOConnection;
    ADOTable1: TADOTable;
    DataSource1: TDataSource;
    ADOTable1id: TAutoIncField;
    ADOTable1nome: TStringField;
    ADOTable1email: TStringField;
    ADOTable1telefone: TStringField;
    ButtonSave: TButton;
    procedure FormCreate(Sender: TObject);
    procedure ButtonInsertClick(Sender: TObject);
    procedure ButtonUpdateClick(Sender: TObject);
    procedure ButtonDeleteClick(Sender: TObject);
    procedure ButtonSaveClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
    procedure HabilitarDesabilitar(Habilitar:Boolean);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ButtonSaveClick(Sender: TObject);
begin
  //Verifica se a tabela está em modo de inserção ou edição, caso esteja, salva o registro
  if (ADOTable1.State in [dsInsert, dsEdit]) then
  begin
    ADOTable1.Post;//Salva os dados no banco de dados
    HabilitarDesabilitar(False);//Desabilita os campos para digitar
    ShowMessage('Cliente salvo com sucesso!');//Exibe mensagem de sucesso.
  end;

end;

procedure TForm1.ButtonDeleteClick(Sender: TObject);
begin
  //Verifica se a tabela tem registros inseridos, para serem excluídos
  if not ADOTable1.IsEmpty then
  begin
    //faz uma pergunta para excluir o registro, caso responda sim, o registro será excluido
    if MessageDlg('Deseja realmente excluir este cliente?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
    begin
      ADOTable1.Delete;// comando para deletar o registro
      ShowMessage('Cliente excluído com sucesso!');//Exibe mensagem de sucesso
    end;
  end;
end;

procedure TForm1.ButtonInsertClick(Sender: TObject);
begin
  //Verifica se o registro não está em modo de inserção ou edição
  if not (ADOTable1.State in [dsInsert, dsEdit]) then
  begin
    HabilitarDesabilitar(True);//Habilita os campos para digitar
    ADOTable1.Insert; //Prepara o componente ADOTable1 para inserir os registros na tabela tblClientes
    EditNome.SetFocus;//seta o foco na caixa de texto nome
  end;
end;

procedure TForm1.ButtonUpdateClick(Sender: TObject);
begin
  //Verifica se a tabela possui registros para alterar
  //e verifica se o registro não está em modo de inserção ou edição
  if (not ADOTable1.IsEmpty) and (not (ADOTable1.State in [dsInsert, dsEdit])) then
  begin
    HabilitarDesabilitar(True);//Habilita os campos para digitar
    ADOTable1.Edit;//Prepara o componente ADOTable1 para alterar os registros na tabela tblClientes
    EditNome.SetFocus;//seta o foco na caixa de texto nome
  end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  ADOTable1.Close;//Fecha a conexão da tabela
  ADOConnection1.Connected := False;//Fecha a conexão do banco de dados
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  //Configura a conexão com o MySql
  ADOConnection1.ConnectionString := 'Provider=MSDASQL.1;Persist Security Info=False;User ID=root;Data Source=MySql ODBC 32 Ansi;Initial Catalog=dbcrud;';
  ADOConnection1.DefaultDatabase := 'dbcrud';
  ADOConnection1.LoginPrompt := False;//seta o login prompt para falso, para não exibir a entrada de senha
  ADOConnection1.Connected := True; //Conecta o banco de dados

  ADOConnection1.Connected := True; //Ativa a conexão
  ADOTable1.Connection := ADOConnection1; //liga a conexão na tabela
  ADOTable1.TableName := 'tblClientes';//seta o nome da tabela
  ADOTable1.Active := True;//ativa a tabela

  DataSource1.DataSet := ADOTable1; //liga a tabela ao datasource
  DBGrid1.DataSource := DataSource1;//liga o datasource a grid

  HabilitarDesabilitar(False);//Desabilita os campos para digitar

end;

procedure TForm1.HabilitarDesabilitar(Habilitar:Boolean);
begin
  //Habilita e desabilita as caixas de texto de acordo com o parametro Habilitar
  EditNome.Enabled := Habilitar;
  EditEmail.Enabled := Habilitar;
  EditTelefone.Enabled := Habilitar;
end;

end.
CRUD em Delphi
Ilustração do projeto.

Código fonte do exemplo

Você pode fazer o download do exemplo do projeto através do repositório do github:

https://github.com/Gisele-de-Melo/CRUD-MySql-ADODB

Conclusão

Criar um projeto CRUD em Delphi usando MySQL e ADODB é uma excelente maneira de aprender sobre manipulação de dados e interação com bancos de dados. Este tutorial mostrou como configurar a conexão, criar, ler, atualizar e deletar registros de forma simples e clara. A prática desses conceitos ajudará você a desenvolver aplicações mais complexas e robustas no futuro. Continue explorando e expandindo suas habilidades em Delphi e desenvolvimento de banco de dados!

Por favor, deixe seus comentários e sugestões abaixo. Estamos sempre abertos a feedback para melhorar nossos tutoriais e ajudar você a se tornar um desenvolvedor Delphi ainda melhor!

Posts Relacionados


Livros + e-books

Delphi para Android e iOS

codedelphi.com
codedelphi.com

Delphi Start

codedelphi.com

Programando em Delphi XE

Aprenda programar Delphi

Banco de Dados RAD Delphi

Delphi Programming Projects

Deixe um comentário