Array
(
)

Como saber se já existe o registro?

Titanius
   - 08 dez 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


Emerson
   - 08 dez 2005

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.


Adriano Santos
   - 08 dez 2005

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

#Código



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.


Wiltonfenix
   - 08 dez 2005

É 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.


Titanius
   - 08 dez 2005

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.


Edilcimar
   - 08 dez 2005

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


Titanius
   - 08 dez 2005

Isso nao faria eu perder o ponteiro de insercao nao?


Thomaz_prg
   - 08 dez 2005

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


Edilcimar
   - 08 dez 2005

ele teria que fazer o teste antes de inserir


Adriano Santos
   - 08 dez 2005


Citação:
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.


Wiltonfenix
   - 08 dez 2005

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.


Replicante
   - 08 dez 2005

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´.


Caninha51
   - 11 dez 2005


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


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