Fórum QULA A MELHOR FORMA... #374414
01/09/2009
0
Qual e melhor forma de pesquisar no momento da inclusão se o registro já está cadastrado?
Com Locate ou Select?
Utilizo ClientDataSet.
No caso de Select, seria necessário buscar esta informação no banco sendo que o ClientDataSet já tem a informação em memória?
Como seria a busca neste?
Lenasi
Curtir tópico
+ 0Posts
01/09/2009
Osocram
Mas tem um porem se vc ja deixou o ClientDataSet em modo de insert, ao navegar ele vai tentar dar um post ou cancelar o insert.
Talvez o melhor seria criar um clone do seu ClientDataSet e fazer um locate.
Gostei + 0
01/09/2009
Lenasi
Poderia me passar um exemplo de como clonar com o locate?
Gostei + 0
01/09/2009
Rweberich
A pergunta é: qual a sua necessidade?
Caso vc use a caracteristica ´auto-increment´ para a geracao do novo codigo, entao vc podera fazer da seguinte forma:
[b:8b85c01916]procedure TFrom1.bbConfirmaClick(Sender: TObject);
var
codigo: Longint;
achou : boolean;
begin
codigo := 1;
achou := true;
while achou do
begin
DM. qyCidade.Close;
DM. qyCidade.SQL.Clear;
DM. qyCidade.SQL.Add(´SELECT CODIGO FROM CIDADE WHERE CODIGO = ´´´ + IntToStr(codigo) + ´´´´);
DM. qyCidade.Open;
if DM. qyCidade.eof then
achou := false
else
codigo := codigo + 1;
end;
From1.DBeditCodigo.Field.Value := inttostr(codigo);
end;[/b:8b85c01916]
Obs: Este exemplo eu usei um componente Query, mas a forma é quase semelhante.
A justificativa de usar via ´select´ é de que a recuperacao desse valor sera feita no ato da postagem no banco de dados. Ou seja, recupera o ultimo, soma mais um e ja faz o Post, e comita.
Ja com o ´Locate´ pode ocorrer de um usuario tambem esteja inserindo um novo registro e cancele a operacao, entao tera um registro ´pulado´ quando fizer um ´post´.
Espero te-lo ajudado!
Abraco.
Gostei + 0
01/09/2009
Lenasi
Utilizo, mas é independente do auto_incremento, quero verificar no momento do cadastro se já consta algum registro com o nome de login, por exemplo...
Gostei + 0
01/09/2009
Osocram
Se vc ja tem os dados em memoria não tem o pq de se fazer um select novamente, isso so vai gerar um acesso ao banco a toa.
o melhor seria fazer um CloneCursor e fazer um locate.
Gostei + 0
01/09/2009
Lenasi
Blz, amigo,
É assim que vou trabalhar...
Já consegui adaptar o CloneCursos através de outro post que encontrei aqui.
Isso para o cadastro que tem apenas um campos.
E agora?
Como faço para outro cadastro onde preciso verificar dois ou mais campos de uma única vez?
Gostei + 0
01/09/2009
Osocram
o link do post esta aqui se alguem precisar fazer referencia.
[url]http://forum.devmedia.com.br/viewtopic.php?t=70404[/url]
Gostei + 0
01/09/2009
Lenasi
MUITISSIMO OBRIGADO...
Gostei + 0
04/09/2009
Pestana_
Gostei + 0
04/09/2009
Lenasi
Olá Amigo,
Sim foram definidos..
Teria problemas caso não? Fiz testes sem e funcionou normalmente!!!
Gostei + 0
11/09/2009
Pestana_
primeiramente, desculpe pela demora é porque eu fique sem acesso ao fórum estes dias!
não tem nenhum problema fazer como foi sugerido!
Eu só quero colocar que você tambem pode tratar a exceção que o banco dispara quando se inclui registros iguais, com isso, antes de incluir o registro no banco você não precisa fazer a verificação se existe, deixando que o banco se encarrede de fazer isso.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)