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); // 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); // 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,
// 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.

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

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

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

Bom tentei complilar o sistema é ta dando erro muito chatos, espero que vc possa me mandar pelo meu e-mail Obrigada ai
Responder comentário
"Não funciona nem por resa", disse um colega.
Que tal tentar com REZA?

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
Os textos publicados neste espaço são de responsabilidade única de seus autores (colunistas e leitores) e podem não expressar necessariamente a opinião do iMasters.
Rafael Smorigo é analista programador e trabalha no controle do sistemas na LG Electronics.
2001 - iMasters FFPA Informática Ltda - Todos os direitos reservados.