Array
(
)

Ajuda com Formulário

Carcleo
   - 28 ago 2004

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.


Rm
   - 28 ago 2004

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//este é para escrever sempre a primeira letra em maiusculo 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


Rômulo Barros
   - 16 out 2004

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

Vc não precisa verificar se o NOME a ser cadastro já existe a cada letra DIGITADA 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á EXISTE no momento da POSTAGEM do registro.

#Código

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].AsInteger > 0)Then
ShowMessage(´NOME já cadastrado´)
Else
TabelaOuQuery.Post()
End;
End;


Espero que o ajude !!!

:arrow: Este exemplo foi utilizado para o INTERBASE / FIREBIRD (¬)