Como saber se já existe o registro?

08/12/2005

Olá, tenho um IBDataSet, e estou em modo Insert, inserindo um registro, por exemplo, queria verificar se o campo NOME, já consta no DataSet antes de dar o Post, tem como fazer isso? Pois se eu usar o Locate, ele perde o ponteiro insert, ou não?


Desde já agradeço.

[]s


Titanius

Respostas

08/12/2005

Emerson

sim, perde o ponteiro e sai do modo de edicao/insercao.

sugiro que você tenha uma query separada, somente para pesquisa.
eu faço isso nos meus sistemas: sempre tenho um ClientDataset_Geral onde eu faço essas pesquisas.


Responder Citar

08/12/2005

Adriano Santos

Cara existem diversas formas de se fazer isso.
Vc pode, por exemplo, colocar um novo TQuery e fazer uma pesquisa separada, algo como:


with MeuQueryPesquisa do
begin
  Close;
  Sql.Clear;
  Sql.Add(´SELECT NOME FROM TABELA WHERE NOME = :MINHAVARIAVEL´);
  ParamByName(´MINHAVARIAVEL´).AsString := MinhaVariavel;
  Open;
  if not IsEmpty then
  begin
    ShowMessage(´Este nome já existe na base.´);
    Close;
  end
  else 
  begin
    //Seus comandos de Inclusão;
    Close;
  end;
end;



Mas, reforçando...existem diversas formas de se fazer isso.


Responder Citar

08/12/2005

Wiltonfenix

É verdade, existem muitas formas. Mas o uso de uma Query para pesquisar na minha opinião é a melhor. Porque vc não move o ponteiro na sua tabela e com isso não perde o estado atual dela.


Responder Citar

08/12/2005

Titanius

valeu pessoal.. no caso terei que ter uma tabela de memoria, ja q ainda os dados nao foram comitados.. a query buscaria no banco, mas enquanto ele esta adicionando eu verificaria numa tabela de memoria...

obrigado.


Responder Citar

08/12/2005

Edilcimar

também pode colocar um bookmark no registro, pesquisar e depois voltar ao bookmark


Responder Citar

08/12/2005

Titanius

Isso nao faria eu perder o ponteiro de insercao nao?


Responder Citar

08/12/2005

Thomaz_prg

Mas mesmo usando um Bookmark, quando ele movimentar o ponteiro, o registro sairá do status de edição e dará o post automaticamente.


Responder Citar

08/12/2005

Edilcimar

ele teria que fazer o teste antes de inserir


Responder Citar

08/12/2005

Adriano Santos

Mas mesmo usando um Bookmark, quando ele movimentar o ponteiro, o registro sairá do status de edição e dará o post automaticamente.


Corretíssimo. Se o cara está em modo de edição e fizer qualquer movimentação os eventos de Post da tabela serão acionados perdendo então o ponteiro. A melhor alternativa continua sendo criar uma pesquisa paralela. Você só precisa inserir um novo componente Query e fazê-la.


Responder Citar

08/12/2005

Wiltonfenix

Por estes problemas de movimentação de ponteiro é que um TQuery é a melhor opção. Além de ser muito mais rápido também.


Responder Citar

08/12/2005

Replicante

Pq não usa o evento ´beforeInsert´ do ´ClientDataSet´? De preferencia usando o ´FindKey´, que faz a busca baseado nos indices do ´dataset´. Se já houver a pessoa, só mandar ´abort´ direto, nem vai chegar a inserir nada no ´dataset´.


Responder Citar

11/12/2005

Caninha51

...queria verificar se o campo NOME, já consta no DataSet antes de dar o Post...


Não esqueça dos homónimos! :D


Responder Citar