Atualizando dados em uma aplicação Multi-Tier

 

No artigo desta semana, veremos como resolver uma dúvida encontrada por um colega-usuário. Para isso, partiremos do seguinte ponto:

-Temos uma aplicação simples, que utiliza DBExpress com uma conexão ao banco employee.gdb do Interbase.

-No SQLDataSet temos a propriedade CommandText preenchida com a declaração: select CUST_NO, CONTACT_FIRST, COUNTRY from CUSTOMER

-Por fim, temos um DataSetProvider conectado ao SQLDataSet, um ClientDataSet conectado ao DataSetProvider e um DataSource conectado ao ClientDataSet.

Insira no formulário da aplicação, 1 DBGrid, 1 DBNavigator e 3 Buttons. Veja na figura 1 como o formulário deverá ficar.

 

Figura 1 – A aplicação.

Não esqueça de conectar o DBGrid e o DBNavigator ao DataSource e também inserir nos eventos OnShow e OnClose do Form os seguintes códigos:

 

OnShow:

ClientDataSet1.Open;

 

OnClose:

ClientDataSet1.Close;

 

Nos botões adicione as seguintes linhas:

 

Atualizar Reg:

ClientDataSet1.RefreshRecord;

 

Cancelar:

ClientDataSet1.CancelUpdates;

 

Salvar

ClientDataSet1.ApplyUpdates(0);

 

Com a aplicação nesse estado, o usuário, disse que no momento em que o método RefreshRecord do ClientDataSet fosse chamado uma exception era gerada com a seguinte mensagem: “Unable to find record. No key specified"

Se você também se deparou com este erro, veja agora como podemos resolver este problema de forma simples e rápida.

RefreshRecord

Diferente do Refresh, o RefreshRecord atualiza somente o registro atual, e não gera uma exceção se o log de modificação do dataset estiver vazio. Esta foi uma definição bem simples do método.

Para que possamos utilizar o método, devemos configurar o pfInKey do campo chave-primária. E chama-lo somente quando o UpdateStatus do registro for usUnmodified. Portanto corriga no código do exemplo o botão Atualizar Reg. Insira nele a seguinte codificação:

 

If ClientDataSetl.UpdateStatus = usUnmodified them

ClientDataSetl.RefershRecord;

 

Não esqueça de configurar o pfInKey e execute a aplicação. Agora esta tudo OK. Na próxima matéria veremos como interceptar dados entre cliente e servidor. Então, até lá!