Segunda-feira, 22 de setembro de 2003 às 01h59

Utilizando XML e Delphi - Parte 2

Olá pessoal!

Na primeira parte do artigo, criamos nosso projeto e o arquivo XML que será utilizado para armazenar as informações. Agora montaremos nossa janela (form). Para isso, utilizarei componentes TDBEdit, para a visualização das colunas do XML e botões TSpeedButton para as principais ações.

Novo: Cria uma nova linha no arquivo XML.
Salvar: Confirma a nova linha criada ou atualiza um registro já existente.
Excluir: Remove o registro do arquivo XML.
Cancelar: Cancela a última ação realizada que ainda não foi confirmada pelo botão Salvar.

Caso alguém tenha dúvida sobre como construir o formulário (design), procure mais sobre o assunto em nossa coluna de Delphi aqui no iMasters.

Depois que você adicionar os componentes TDBEdit, você deve modificar o nome dos mesmos para dbeNome, dbeDtNascimento, dbeDtCadastro, dbeTelFixo, dbeTelCelular, dbeEmail.

Também deve ser vinculado cada componente TDBEdit com seu respectivo campo no componente datContatos (TDataSource). Na imagem abaixo, vemos o componente dbeNome com a propriedade DataSource ligada ao Modulo.datContatos e também a propriedade DataField ligada a coluna NOME, repita este procedimento para todas as outras colunas de seu arquivo XML

Como você viu, não vou entrar em muitos detalhes sobre o Design pois acredito que cada pessoa possui um "estilo" de desenvolvimento, principalmente sobre o layout das janelas. Então, vamos diretamente ao nosso código.

Nosso botão Novo será responsável por criar uma nova linha no arquivo XML para isso iremos utilizar o seguinte código:

procedure TContatos.sbtNovoClick(Sender: TObject);
begin
If Not Modulo.cdsContatos.Active Then // Verifica se o DataSet está ativo
Modulo.cdsContatos.Open // Caso esteja fechado
else
begin
Modulo.cdsContatos.Insert; // Cria um novo registro
dbeNome.SetFocus; // Coloca o cursor no primeiro campo a preencher.

   // Desabilita os botões
   sbtNovo.Enabled     := False;
   sbtSalvar.Enabled   := True;
   sbtExcluir.Enabled  := False;
   sbtCancelar.Enabled := True;
  end;
end;

Nosso botão Salvar utiliza uma função que é executada antes de que seja confirmado os dados no arquivo XML. Veja logo a baixo mais detalhes sobre esta função que é responsável por verificar se o usuário informou todas as colunas obrigatórias (todas :-) e após efetuar a validação aplicar as modificações.

procedure TContatos.sbtSalvarClick(Sender: TObject);
begin
If
ValidarDados = True Then // Função que verifica se foi preenchido o formulario
begin
try

Modulo.cdsContatos.FieldByName('DT_CADASTRO').AsDateTime := Now;
// Pega a data atual da maquina

Modulo.cdsContatos.MergeChangeLog; // Atualiza o ParamsLog e a linha de
dados, não cria uma nova.

Modulo.cdsContatos.Post; // Confirma as modificações no DatSet
    // Desabilita os botões
    sbtNovo.Enabled     := True;
    sbtSalvar.Enabled   := False;
    sbtExcluir.Enabled  := True;
    sbtCancelar.Enabled := False;

  except // Caso Aconteça algum erro exibe mensagem ao usuário
   MessageDlg('Atenção não foi possivel salvar o registro.', mtError, [mbOk], 0);
  end;
 end;
end;

O botão Excluir exibe uma mensagem de confirmação para o usuário e logo após é executado o método DELETE que exclui o registro ativo de nossa aplicação.

procedure TContatos.sbtExcluirClick(Sender: TObject);
begin
 If MessageDlg('Você deseja excluir o registro atual ?', mtConfirmation, 
[mbYes,mbNo], 0) = mrYes Then begin Modulo.cdsContatos.Delete; // Exclui o registro atual
   // Desabilita os botões
   sbtNovo.Enabled     := True;
   sbtSalvar.Enabled   := False;
   sbtExcluir.Enabled  := True;
   sbtCancelar.Enabled := False;
  end;
end;

O botão Cancelar não possui nenhum comando desconhecido da "comunidade". Apenas utiliza de uma mensagem de confirmação e aplica a ação de CANCEL de nosso TDataSet

procedure TContatos.sbtCancelarClick(Sender: TObject);
begin
If
MessageDlg('Deseja realmente cancelar as modificações ?', mtConfirmation,
[mbYes,mbNo], 0) = mrYes Then
Modulo.cdsContatos.Cancel;
end;

Como foi falado no início, nosso projeto também possui uma função que é responsavel por validar o cadastro verificando se o usuário digitou a informação ou não.

O procedimento de verificação é simples:

1. Verifica se usuário digitou alguma informação retirando os espaços em branco utilizando Trim e Comparando com EmptyStr (String Vazia)
2. Caso nosso TDBEdit esteja preenchido pulamos para o próximo TDBEdit, caso esteja vazio pula para o próximo passo
3. Exibe uma mensagem ao usuário para ele preencher a coluna
4. Coloca o cursor no campo que deve ser preenchido
5. Retorna a função o valor FALSE para que não seja confirmada a alteração

A função:

function TContatos.ValidarDados: Boolean;
begin
 if Trim(dbeNome.Text) = EmptyStr Then
  begin
   MessageDlg('Informe o nome do contato.', mtWarning, [mbOk], 0);
   dbeNome.SetFocus;
   ValidarDados := False;
  end
 else if Trim(dbeDtNascimento.Text) = EmptyStr Then
  begin
   MessageDlg('Informe a data de nascimento.', mtWarning, [mbOk], 0);
   dbeDtNascimento.SetFocus;
   ValidarDados := False;
  end
 else if Trim(dbeTelefoneFixo.Text) = EmptyStr Then
  begin
   MessageDlg('Informe o telefone fixo.', mtWarning, [mbOk], 0);
   dbeTelefoneFixo.SetFocus;
   ValidarDados := False;
  end
 else if Trim(dbeTelefoneCelular.Text) = EmptyStr Then
  begin
   MessageDlg('Informe o telefone celular.', mtWarning, [mbOk], 0);
   dbeTelefoneCelular.SetFocus;
   ValidarDados := False;
  end
 else if Trim(dbeEmail.Text) = EmptyStr Then
  begin
   MessageDlg('Informe o e-mail do contato.', mtWarning, [mbOk], 0);
   dbeEmail.SetFocus;
   ValidarDados := False;
  end
 else
   ValidarDados := True;
end;

Bom pessoal, acredito que já está bom de código por hoje, não é? :-)

Irei explicar sobre o que acontece com nosso arquivo XML após algumas brincadeiras de Cadastrar, Excluir, Modificar Dados, Salvar... Nosso amigo Delphi possui varias opções para lidar com XML. Ainda estamos no início. No próximo artigo irei concluir a explicação sobre nosso projeto e também mostrar modificações no mesmo para se tirar o máximo da tecnologia XML + Delphi.

Irei atender aos pedidos que recibi por e-mail para a publicação de exemplos utilizando ASP .NET + XML e outros assuntos nos próximos artigos.

Download do Exemplo (Delphi 7)

6 comentários

 Aurimar Aparecido da Silva
02/12/2004 16h37

Não funcionou

Quando eu tento salvar um registro aparece o seguinte erro:
cdsContatos: Dataset not in edit or insert mode

Obrigado,

Aguardo resposta

 Marcell
19/12/2004 22h58

Não funciona

Baixei o exemplo , mas toda a vez que tenho gravar aparece uma mensagem de erro !!!
Como posso resolver isso !

 Marcelo Avellar Marqueti
23/12/2004 14h29

Resposta comentario

Aurimar,
O meu tb não funcionou ..mais tirei esse erro colocando Modulo.cdsContatos.insert;
para abrir para inserção.
Até mais
Marcelo Marqueti

 Diego Candido de Souza
11/12/2005 03h52

Não funciona nem por resa

Bom tentei complilar o sistema é ta dando erro muito chatos, espero que vc possa me mandar pelo meu e-mail Obrigada ai

 Paulo Jorge Santos
26/04/2007 22h55

Com reZa funciona!!!

"Não funciona nem por resa", disse um colega.
Que tal tentar com REZA?

 Aureo koppe
25/06/2008 23h59

Faça Isso:

Duas Coisas
1- Coloque esta linha no evento onCreate do Datamodule

cdsContatos.FileName := ExtractFilePath(ParamStr(0)) + '\Conatos.xml';

2 -Comente a linha
Modulo.cdsContatos.Post; // Confirma as modificações no DatSet

Cancelar resposta

Qual a sua opinião?

Faça login abaixo ou cadastre-se rapidamente.


2001 - iMasters FFPA Informática Ltda - Todos os direitos reservados.