Verificar se já está no ClientdataSet

Delphi

22/07/2006

como faço para que antes de incluir um registro, o ClientDataSet seja verificado em busca de se o registro já está cadastrado?

tentei colocar no envento BeforePost da CLientDataSet uma rotina que varre o ClientDataSet, mas não deu certo e ocorre o seguinte erro: Stack overflow.

acho que uma solução poderia ser clonar o clientdataset e fazer a varredura no clone. mas como faço isso?


Raserafim

Raserafim

Curtidas 0

Respostas

Macario

Macario

22/07/2006

Ola.

Uma opção seria utilizar a propriedade IndexFieldName, indicando a chave da pesquisa.


ClientDataSet.IndexFieldName:=´ID_CLIENTE´;


E depois pode utilizar, FindKey, ou o conjunto SetKey + Gotokey, para efetuar a pesquisa; 8)


GOSTEI 0
Raserafim

Raserafim

22/07/2006

você poderia detalhar um pouco mais, e se possível fazer um exemplo?


GOSTEI 0
Bruno Belchior

Bruno Belchior

22/07/2006

Esse tipo de verificação, não vai funcionar no caso de você estar com o DataSet em edição ou inserção, pois ele irá tirar o mesmo desse modo. A solução é realizar essa pesquisa em outro DataSet.


GOSTEI 0
Raserafim

Raserafim

22/07/2006

bruno, mas como faço uma cópia de um ClientDataSet sem que ao copiar os dados precise varrer todos os registros, saindo assim do registro atual e causando o problema que já citei?


GOSTEI 0
Andremuller

Andremuller

22/07/2006

cdsClone.Data := cdsPrincipal.Data;


Depois para localizar o registro preferencialmente fazer o que o Macario disse. Caso não seja possível também dá para usar um Locate, que apesar de mais lento que o FindKey ainda é melhor que percorrer todos registros.


GOSTEI 0
Raserafim

Raserafim

22/07/2006

após dar um locate, como saber se não tem mais nenhum outro registro igual?

ou seja, como localizar o próximo registro com o mesmo critério?


GOSTEI 0
Andremuller

Andremuller

22/07/2006

se você seguiu a dica de criar um data set clone então tu poderá fazer qualquer coisa com os dados dele porque ele não será persistido no banco.

Sendo assim, após dar o locate, se achou, exclui o registro do client e dá um novo locate.

Sempre lembrando que é muito melhor dar um find key caso seja possível


GOSTEI 0
POSTAR