Verificar se já está no ClientdataSet
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?
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
Curtidas 0
Respostas
Macario
22/07/2006
Ola.
Uma opção seria utilizar a propriedade IndexFieldName, indicando a chave da pesquisa.
E depois pode utilizar, FindKey, ou o conjunto SetKey + Gotokey, para efetuar a pesquisa; 8)
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
22/07/2006
você poderia detalhar um pouco mais, e se possível fazer um exemplo?
GOSTEI 0
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
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
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
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?
ou seja, como localizar o próximo registro com o mesmo critério?
GOSTEI 0
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
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