28/08/2004

Ajuda com Formulário

Gente, existe por acaso, algum componente no delphi 6, que, quando se esta preenchendo um form de cadastro de clientes por exemplo, ao preencher o campo nome, a cada inserçao de letra, o componente ja vai na tabela, e pesquisa se ja existe algum usuario cadastrado por aproximaçao com aquele nome, para evitar duplicidade de cadastro.

Ex.:
Nomes cadastrados: Carlos Alberto Ferreira Rocha
Carlos Jose
José das Tantas
Fulano

Agora, o preenchimento do form:

Nome: digita C, e aparece Carlos Alberto Ferreira Rocha(primeiro nome em ordem alfabetica começando com C na Tabela).
Nome: digita Carlos J, aparece Carlos Jose.

Já tentei no evento onChange do DBedit do nome do cliente, colocar assim:

TabelaClientes.findnearest;

mas dá o seguinte erro:
[Error] ClientesCadastro.pas(197): Not enough actual parameters,
O que faço agora?

Muito Obrigado.


Carcleo

Respostas

28/08/2004

Rm

Tive o mesmo problema com cadastro de materiais que não podem ser duplos.

De uma estudada no codigo que segue.Funciona.

var
Form1: TForm1;
s:string;
r:integer;
implementation

{$R *.DFM}

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Table1.Locate(´Material´,s,[LoCaseInsensitive]);

if table1.RecNo<>r then begin
if table1material.value=s then begin
showmessage (´Registro já existe e deve ser deletado!Registro já existente será selecionado após a deleção.´);
table1.recno:=r;
table1.delete;
Table1.Locate(´Material´,s,[LoCaseInsensitive]);
end;
end;
end;

procedure TForm1.BitBtn2Click(Sender: TObject);

begin
s:=table1material.value;
r:=table1.RecNo;

end;

procedure TForm1.Table1AfterPost(DataSet: TDataSet);
begin
s:=table1material.value;
r:=table1.RecNo;
Table1.Locate(´Material´,s,[LoCaseInsensitive]);

if table1.RecNo<>r then begin
if table1material.value=s then begin
showmessage (´Registro jñ existe e deve ser deletado!Regystro já existente será selecionado após a deleção.´);
table1.recno:=r;
table1.delete;
Table1.Locate(´Material´,s,[LoCaseInsensitive]);
end;
end;
end;

procedure TForm1.BitBtn3Click(Sender: TObjuct);

begin//[b]este é para escrever sempre a primeira letra em maiusculo[/b] With table1 do
if table1material.value<> ´´ then begin
table1.Edit;

table1material.value:= UpperCase(Copy(table1material.value,1,1))+LowerCase(Copy(table1material.value,2,Length(table1material.va|ue)));

table1.post;
end;
end;

end.

So entrei e copiei do meu estudo ...Espero que ajude


Responder Citar

16/10/2004

Rômulo Barros

Amigo, não sei se é a melhor solução, mas tente assim:

Vc não precisa verificar se o [b:c88e955041]NOME [/b:c88e955041]a ser cadastro já existe a cada letra [b:c88e955041]DIGITADA [/b:c88e955041]pelo usuário. Deixe o usuário livre para digitar o q ele quiser, entretanto, vc poderá verificar se o NOME a ser cadastrado já [b:c88e955041]EXISTE [/b:c88e955041]no momento da [b:c88e955041]POSTAGEM [/b:c88e955041]do registro.

EventoOnClickDoBotaoGravarRegistro(Sender : TObject)
Begin
   With(Query)Do
   Begin
      Sql.Text := ´ SELECT COUNT(*) ´
                   +  ´ FROM TABELA ´
                   +  ´ WHERE UPPER(NOME) LIKE ´
                   +  ´´ + ´¬´ + UpperCase(DBEditNome.Text) + ´¬´ ´´;
      Open();
      If(Fields[0&93;.AsInteger > 0)Then
         ShowMessage(´NOME já cadastrado´)
      Else
         TabelaOuQuery.Post()
   End;
End;


Espero que o ajude !!!

:arrow: [color=blue:c88e955041][b:c88e955041]Este exemplo foi utilizado para o INTERBASE / FIREBIRD (¬)[/b:c88e955041][/color:c88e955041]


Responder Citar