Consultar cliente ja cadastrado
Us IB 6 com D6. Como fazer uma rotina que possa verificar se um registro ja esta cadastrado? Se uso locate(impossivel numa arquitetura client/server) fica muito lento. Imagne um banco com 30.000 registro? A resposta deveria vir o mais rapido possivel, tipo no OnExit do DBEdit ou edit, ja vira a msg: ESTE CLIENTE JA ESTA CADASTRADO.
Paulo
Curtidas 0
Respostas
Delphistar
13/11/2003
realmente quando a tabela eh grande o LOCATE eh inviavel, eu uso uma query tipo assim:
select codigo from clientes where codigo = :codigo
eu passo o parametro (codigo que estou buscando), e executo, dai faço a verificacao pela propriedade IsEmpty da query, se = false quer dizer que ja esta cadastrado...
select codigo from clientes where codigo = :codigo
eu passo o parametro (codigo que estou buscando), e executo, dai faço a verificacao pela propriedade IsEmpty da query, se = false quer dizer que ja esta cadastrado...
GOSTEI 0
Celsoctorres
13/11/2003
Crie um IBQuery (IBQVerifica) e siga este código:
você pode colocar este código no evento on exit do dbedit:
só lembre-se que quando vc tiver editando é preciso tratar este se não este irá verificar sempre.
Para burlar este problema fiz o seguinte:
1º declarei uma variavel global...
var
editando : Boolean;
depois fiz o seguinte:
no botão inserir
editando:=false; //isso fará com que ele seja verificado...
if editando = false then
begin
with dm1.IBQVerifica do
begin
Close;
SQL.Clear;
SQL.Add(´select ARQUIVO´); //campo que vc quer verificar
SQL.Add(´from PROJETOS´); // tabela
SQL.Add(´where ARQUIVO=´+´´´´+dbnomearquivo.Text+´´´´);
Open;
if dm1.IBQVerifica.IsEmpty then
else
begin
Application.MessageBox(´Projeto já cadastrado!´,´Cadastro de Projetos´,MB_OK + MB_ICONWARNING);
dbndesenho.SetFocus;
end;
end;
end;
nos botões
editar : editando:=true;
salvar: editando:=false;
ou seja, somente no botão editar editando recebe true;
espero ter ajudado...
um abraço
você pode colocar este código no evento on exit do dbedit:
só lembre-se que quando vc tiver editando é preciso tratar este se não este irá verificar sempre.
Para burlar este problema fiz o seguinte:
1º declarei uma variavel global...
var
editando : Boolean;
depois fiz o seguinte:
no botão inserir
editando:=false; //isso fará com que ele seja verificado...
if editando = false then
begin
with dm1.IBQVerifica do
begin
Close;
SQL.Clear;
SQL.Add(´select ARQUIVO´); //campo que vc quer verificar
SQL.Add(´from PROJETOS´); // tabela
SQL.Add(´where ARQUIVO=´+´´´´+dbnomearquivo.Text+´´´´);
Open;
if dm1.IBQVerifica.IsEmpty then
else
begin
Application.MessageBox(´Projeto já cadastrado!´,´Cadastro de Projetos´,MB_OK + MB_ICONWARNING);
dbndesenho.SetFocus;
end;
end;
end;
nos botões
editar : editando:=true;
salvar: editando:=false;
ou seja, somente no botão editar editando recebe true;
espero ter ajudado...
um abraço
GOSTEI 0
Mitsalito
13/11/2003
:D Desculpa mecher no fonte mas é pouca coisa
if dm1.IBQVerifica.state in [dsEdit] then
begin
with dm1.IBQVerifica do
begin
Close;
SQL.text := ´select Count(campo) ´Qtd´ from tabela Where campo = ´
+ variavel
ExecSql;
Open;
if dm1.IBQVerifica.FieldValues[´Qtd´] = 0 then
begin
end
else
begin
Application.MessageBox(´Projeto já cadastrado!´,´Cadastro de
Projetos´,MB_OK + MB_ICONERROR);
dbndesenho.SetFocus;
end;
end;
end;
e olha pelo lado bom vc ainda vair ter um recordcount via SQL se souber usar vai lhe ser de grande proveito
if dm1.IBQVerifica.state in [dsEdit] then
begin
with dm1.IBQVerifica do
begin
Close;
SQL.text := ´select Count(campo) ´Qtd´ from tabela Where campo = ´
+ variavel
ExecSql;
Open;
if dm1.IBQVerifica.FieldValues[´Qtd´] = 0 then
begin
end
else
begin
Application.MessageBox(´Projeto já cadastrado!´,´Cadastro de
Projetos´,MB_OK + MB_ICONERROR);
dbndesenho.SetFocus;
end;
end;
end;
e olha pelo lado bom vc ainda vair ter um recordcount via SQL se souber usar vai lhe ser de grande proveito
GOSTEI 0