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
Posts
08/12/2005
Emerson Nascimento
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.
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.
É 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.
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.
também pode colocar um bookmark no registro, pesquisar e depois voltar ao bookmark
Isso nao faria eu perder o ponteiro de insercao nao?
Mas mesmo usando um Bookmark, quando ele movimentar o ponteiro, o registro sairá do status de edição e dará o post automaticamente.
ele teria que fazer o teste antes de inserir
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.
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.
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´.
...queria verificar se o campo NOME, já consta no DataSet antes de dar o Post...
Não esqueça dos homónimos! :D