Fórum QULA A MELHOR FORMA... #374414

01/09/2009

0

olá Amigos..

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

Lenasi

Responder

Posts

01/09/2009

Osocram

se vc ja tem os dados não precisa buscar novamente.

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.

olá Amigos.. 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?



Responder

Gostei + 0

01/09/2009

Lenasi

Talvez o melhor seria criar um clone do seu ClientDataSet e fazer um locate.


Poderia me passar um exemplo de como clonar com o locate?


Responder

Gostei + 0

01/09/2009

Rweberich

Ola,

Qual e melhor forma de pesquisar no momento da inclusão se o registro já está cadastrado? Com Locate ou Select?


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.


Responder

Gostei + 0

01/09/2009

Lenasi

Ola, 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:c0dcf3bc76]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:c0dcf3bc76] Abraco.


Utilizo, mas é independente do auto_incremento, quero verificar no momento do cadastro se já consta algum registro com o nome de login, por exemplo...


Responder

Gostei + 0

01/09/2009

Osocram

Como eu disse no outro post
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.


Responder

Gostei + 0

01/09/2009

Lenasi

Como eu disse no outro post 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.


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?


Responder

Gostei + 0

01/09/2009

Osocram

respondi no seu outro post

o link do post esta aqui se alguem precisar fazer referencia.

[url]http://forum.devmedia.com.br/viewtopic.php?t=70404[/url]


Responder

Gostei + 0

01/09/2009

Lenasi

respondi no seu outro post o link do post esta aqui se alguem precisar fazer referencia. [url]http://forum.devmedia.com.br/viewtopic.php?t=70404[/url]


MUITISSIMO OBRIGADO...


Responder

Gostei + 0

04/09/2009

Pestana_

lenasi este campo foi definido como unico, ou seja campo do tipo Unique?


Responder

Gostei + 0

04/09/2009

Lenasi

lenasi este campo foi definido como unico, ou seja campo do tipo Unique?


Olá Amigo,

Sim foram definidos..
Teria problemas caso não? Fiz testes sem e funcionou normalmente!!!


Responder

Gostei + 0

11/09/2009

Pestana_

boa tarde lenasi!

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.


Responder

Gostei + 0

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

Aceitar