Como identificar se está sendo feito Update ou Insert no CDS

Delphi

28/06/2006

Utilizo DBExpress + Firebird e estou usando os seguintes componentes:
SQLDataSet + DataSetProvider + ClientDataSer.

Todos concentrados em um DM. Estou tentando deixar todas as regras de negócio dentro deste DM, antes fazia a validação no BeforePost do Query q eu tinha no mesmo form do cadastro. Agora como o BeforePost do ClientDataSet não está mais na mesma tela do cadastro não consigo identificar se o registro está sendo inserido ou alterado.

Quando o usuário seleciona para alterar os DataControls que estavam ligados aos campos chave eram desabilitados e no before post eu testava a propriedade Enabled para saber se era um update ou um insert, no caso do insert precisava testar se a chave era nula, se não fosse precisava testar para saber se o código digitado já existia ou não, caso alguma das alternativas falhasse... era acionado o Abort para ele não gravar.

Tentei usar o OldValue e o NewValue, porém não funcionou pois se eu adicionar um registro com o código 700 e gravar... beleza, mas no próximo registro que vou adicionar ele fica com o OldValue igual ao último registro inserido... se o cara fizer duas vezes a inserção do mesmo código me retorna erro pois ele reconhece que os dois registros são ´os mesmos´ por ter o mesmo código.


Alguém tem idéia de como posso resolver este problema?

Se não fui claro, por favor, avisem que tento explicar a situação um pouco melhor.

Obrigado a todos.


Techsoft

Techsoft

Curtidas 0

Respostas

Andreaskaquino

Andreaskaquino

28/06/2006

Olha não entendi muito bem o seu problema mas em todo caso pra voce descobrir se um dataset esta em modo de edição ou inserção existe uma propriedade do mesmo que poderá ser utilizada em qualquer local independente de estar num DATAMODULE ou não.

if (ClientDataSet1.State = dsInsert) then //Inclusão
begin
...
end
else if if (ClientDataSet1.State = dsEdit) then //Alteração
begin
...
end

Att,


GOSTEI 0
Techsoft

Techsoft

28/06/2006

Obrigado por responder amigo, já havia resolvido o problema e foi exatamente assim como você postou.

[]´s


GOSTEI 0
Sremulador

Sremulador

28/06/2006

você pode utilizar o case tb...


GOSTEI 0
POSTAR