Como fazer a consistência de dados com componentes dataware ?

28/03/2018

0

Oi pessoal...

Possuo um componente FDQuery (FireDAC) em um DataModule. A partir desse componente foi criado um formulário de CRUD. Gostaria de fazer a consistência de um dos DBEdits desse formulário, verificando se o conteúdo do mesmo já se encontra cadastrado na tabela, para impedir cadastro em duplicidade. Sei que dá para usar o evento OnBeforePost do FDQuery. Referenciei no DataModule o arquivo ".pas" dessa tela de CRUD e, mesmo assim, ao executar o método Locate do componente FDQuery estou obtendo MemoryLeak. Depurando o código verifiquei que a propriedade do componente está retornando "Inaccessible Value". Onde será que estou errando ? A parte do código segue abaixo:

procedure Tdm.qryConsultaBeforePost(DataSet: TDataSet);
var bLoc: Boolean;
sNome: String;
begin
sNome := Trim(frmCadNome.edtNome.Field.AsString); ===> AQUI OCORRE O ERRO - Tentando buscar o valor digitado no DBEdit pela propriedade Field.
bLoc := qryConsulta.Locate('Nome', sNome,[loCaseInsensitive]);
if bLoc then
raise Exception.Create('Nome já cadastrado !');
end;

Grato por qualquer ajuda.
Adalberto Brasaca

Adalberto Brasaca

Responder

Post mais votado

29/03/2018

Fala Adalberto, blz? Em casos de validação como esta, em que você está verificando dados da própria tabela que está sendo manipulada, o ideal é você, por exemplo, usar um FDQuery a parte, fazendo uma consulta SQL ao banco, e não utilizando Locate. O Locate faz uso dos dados em memória, logo, você teria que fazer um clone da Query que está sendo usada no CRUD para que funcionasse da forma ideal que você deseja.

Espero que tenha te ajudado.

Abraço!

Fabricio Kawata

Fabricio Kawata
Responder

Mais Posts

30/03/2018

Adalberto Brasaca

Bom dia, Fabricio. Muito obrigado pela contribuição. Ajudou e muito ! Grande abraço.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar