ClipaTec Informática

Receba novidades por e-mail. Digite seu e-mail abaixo e clique no botão "Cadastrar"

Delivered by FeedBurner

25 de agosto de 2014

Cadastro de Cliente no Delphi Modelo 1 - Parte 3

delphi
Hey, hey, hey...Espero que estejam animados com esta série de artigos, então, vamos lá, mão no teclado e bora programar.
No artigo anterior, configuramos os componentes do DataModule, neste artigo, vamos realizar algumas implementações no mesmo.
Então vamos lá, selecione o componente "cdsCadCliente", e duplo-clique no evento "AfterDelete". 
Quando chamamos o método "Delete" do ClientDataSet, o registro corrente é excluido, após a exclusão ser realizada, este evento é disparado, então, temos que persistir a exclusão no banco de dados, pois até antes disso, a exclusão só foi realizada no ClientDataSet, o registro ainda permanece no banco.
Baseado nestas informações, precisamos aplicar esta alteração no banco de dados, e mandar uma mensagem para o usuário, então, no evento "AfterDelete", faça o seguinte:

delphi

Muito bem. O parâmetro "-1" do "ApplyUpdates" se refere a quantidade de erros permitidas, no exemplo acima, definimos que não será tolerado nenhum tipo de erro na hora de persistir no banco de dados.
Quando alteramos algum registro ou inserimos um novo registro, no final, ambos executam o método "Post" do ClientDataSet. Este método grava no cache do ClientDataSet, mas também, precisamos persistir, ou melhor dizendo, aplicar estas atualizações no banco de dados, então, ainda com o "cdsCadCliente" selecionado, duplo-clique no evento "AfterPost". Este evento sempre é executado após o comando "Post". Faça a seguinte implementação:

delphi

Isso mesmo. Agora, vem uma questão muito importante, as vezes o usuário clica no botão excluir sem querer, então, temos que prever esta situação, para não causar transtorno. A melhor forma de proteger contra este tipo de incidente, é pedindo uma confirmação de exclusão, então, vamos no evento "BeforeDelete". 
Este evento é executado antes da execução do método Delete do ClientDataSet. Faça a seguinte implementação:

delphi

Como você pode notar, estamos mandando uma mensagem de confirmação para o usuário através do método "MessageDlg".
Observe que usamos quatro parâmetros, onde o primeiro é a mensagem que queremos imprimir para o usuário, o segundo é o tipo da mensagem, de acordo com o tipo, a mensagem é personaliza com uma imagem, no caso acima, aparece o ícone de um ponto de interrogação, em seguida, temos o terceiro parâmetro, onde definimos quais botões teremos na mensagem, como estamos pedindo uma confirmação de exclusão, então passamos os dois botões, "Sim" e "Não", respectivamente, o último parâmetro, é o índice do arquivo help referente a mensagem de erro, como no nosso caso não temos um arquivo help, deixamos o valor "0".
Então, nós estamos enviando essa mensagem de confirmação para o usuário, testando o retorno dela.
Este retorno, é do botão clicado, na implementação acima, estamos testando se o retorno é "idNo", caso seja verdade, significa que o botão clicado pelo usuário foi o "Não". Se o usuário clicou em "Não", é porque ele não deseja excluir o registro, sendo assim, abortamos a operação de exclusão, através do comando "Abort".
Legal, agora vamos para uma implementação muito interessante. Neste exemplo, vamos gerar nosso "ID_CLIENTE", ou seja, o código sequencial, automaticamente.
Para, vamos no evento "BeforePost", e faça a seguinte implementação:

delphi
Já sabemos que após inserirmos, ou alterarmos, chamamos o método "Post" no final para gravar no cache do "ClientDataSet".
O método "BeforePost" é executado antes do método "Post" ser executado, sendo assim, antes de gravarmos, geramos o código do novo cliente, porém, temos que testar antes se o nosso "ClientDataSet" está e modo de inserção, pois não podemos gerar um novo código no estado de edição. Então, se estiver em modo de inserção apenas, nós geramos o código sequencial. Note que usei uma função que se chama "GerarCodigoCliente", onde passamos por parâmetro o campo da tabela que é a chave primária, e o segundo parâmetro, o nome da tabela.
Para entendermos o que está função faz, vamos implementá-la, sendo assim, vamos no escopo "Private" do "DataModule" e declare:


delphi




Pressione as teclas "Shft + Ctrl + C" para que a IDE faça a declaração na seção "Implementation".
Legal, agora, vamos implementá-la, faça o seguinte:


delphi
Legal, primeiro nós criamos uma variável "sqlAux" do tipo "TSQLDataSet". Este tipo, na verdade é uma classe, que cria um objeto "SQLDataSet", ou seja, um componente. Poderíamos arrastar o componente e jogar no "DataModule" normalmente, mas fiz neste caso, estamos fazendo isso em tempo de execução, para não ficar enchendo o "DataModule" de componentes, e ao mesmo tempo, para vermos como criar um componente em tempo de execução.
Prosseguindo com a implementação, está totalmente comentada e fácil de entender. Caso tenham dúvidas, posta seu comentário.
Só quero ressaltar a parte do "Try...Except" e "Try...Finally". O "Try...Except" está sendo usado para tratarmos qualquer exceção que ocorrer durante a execução dos comandos, e o "Try...Finally" para garantir que o objeto criado será destruído da memória independente se ocorreu ou não algum erro ou exceção.
Posteriormente pretendo explicar em outro artigo de forma mais detalhada sobre esses blocos de tentativas.
Se você seguiu todos estes passos, nosso "DataModule" por ora, está pronto. Aguardo você no próximo artigo para continuarmos nosso projeto. Abraço, valeu.


(Por Welinton Jr. Dias)

0 comentários:

Postar um comentário

Visite nossa página de Política de comentarios antes de comentar para ter certeza de que seu comentário não será excluído! Lembre-se, assim que aprovarmos o teu comentário ele será publicado, por isso, não deixe de sempre visitar nosso blog e conferir nossa resposta ao seu comentário, abraço!