Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Auto completar edit


Vivendo&Aprendendo

Pergunta

Olá pessoal.

Eu utilizava este código abaixo para auto completar o edit conforme o usuário iria digitando nele, usava adoquery, access e edit ou dbedit, mas agora mudei de banco de dados e componente, continuo usando edit e dbedtit, mas mysql e zeos e o código não funciona para esses.

Segue abaixo o código:

procedure TFrmAcrescimos.EdtFavorecidoChange(Sender: TObject);
Var Aux : Integer;
begin
  AdoClientes.Close;
  AdoClientes.Open;
  if AdoClientes.Locate('Nome',copy(EdtFavorecido.Text,1,EdtFavorecido.SelStart),[loCaseInsensitive,loPartialKey]) then
  begin
    EdtFavorecido.OnChange := nil; // Não ativar o evento agora.
    Aux := EdtFavorecido.SelStart; // Posição do cursor no EditFornecedor
    EdtFavorecido.Text := AdoClientes.FieldByName('Nome').AsString; // Foi o que encontramos pois o codigo só passa por aqui se existe a informação
    EdtFavorecido.SelStart := Aux; // Atualizamos a posição do cursor.
    EdtFavorecido.OnChange := EdtFavorecidoChange; // Agora podemos chamar novamente.
  end; 
end;

Código no OnChange do Edit.

Agora com o zeos e o mysql ele até não da erro, mas o dbedit só fica apontando para o primeiro registro enquanto os outros ficam certos.

Como posso mudar esse código para que funcione no zeos e mysql?

Abraços

Editado por Vivendo&Aprendendo
Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0
Eu utilizava este código abaixo para auto completar o edit conforme o usuário iria digitando nele, usava adoquery, access e edit ou dbedit, mas agora mudei de banco de dados e componente, continuo usando edit e dbedtit, mas mysql e zeos e o código não funciona para esses.

AdoClientes.Close;
  AdoClientes.Open;
  if AdoClientes.Locate('Nome',copy(EdtFavorecido.Text,1,EdtFavorecido.SelStart),[loCaseInsensitive,loPartialKey]) then

continuo usando edit e dbedtit, mas mysql e zeos e o código não funciona para esses.

Não será porque voce não mudou o componente da query ( adoquery ) -> AdoClientes ???

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Olá Jhonas...

Não é por causa do nome não, mudei de AdoQuery para ZQuery e deixei o mesmo nome que estava antes.

O componente está funcionando corretamente, cadastra, exclui, altera, o problema é que quando abro o form a tabela aponta para um registro e o edit que busca o cliente aponta para o primeiro cliente.

Abraço

Link para o comentário
Compartilhar em outros sites

  • 0
O componente está funcionando corretamente, cadastra, exclui, altera, o problema é que quando abro o form a tabela aponta para um registro e o edit que busca o cliente aponta para o primeiro cliente.

Vivendo&Aprendendo, aparentemente você posiciona o registro de algum modo, já que não está posicionado no 1º como mostra o Edit. Onde você faz isto?

O evento OnChange do Edit só ocorrerá caso o seu conteúdo seja mudado, não apenas quando se digita algo, mas também quando via código alteramos o conteúdo da propriedade Text. Isto dá a impressão que, por exemplo, no evento OnCreate do form você esteja, por exemplo, limpando seu edit.

Assim, se seu dataset está aberto no momento que o Edit.Text é definido para '', ao executar o OnChange, ele será inicializado com o primeiro registro do dataset. Numa etapa seguinte, quando você posiciona seu dataset no registro desejado, vai acontecer justamente o que você descreveu: Edit mostra 1º registro e DBEdits mostrando registro atualmente selecionado.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Olá Micheus, muito obrigado pelas respostas, eu não limpo o text do edit e nem mexo nele em lugar nenhum, também não entendi o porque que ele estava fazendo isso, mas consegui resolver da seguinte form:

procedure TFrmAcrescimos.EdtFavorecidoChange(Sender: TObject);
Var Aux : Integer;
begin
  If EdtFavorecido.Focused Then
  begin
    DmDados.Clientes.Close;
    DmDados.Clientes.Open;
    if DmDados.Clientes.Locate('Nome',copy(EdtFavorecido.Text,1,EdtFavorecido.SelStart),[loCaseInsensitive,loPartialKey]) then
    begin
      EdtFavorecido.OnChange := nil; // Não ativar o evento agora.
      Aux := EdtFavorecido.SelStart; // Posição do cursor no EditFornecedor
      EdtFavorecido.Text := DmDados.Clientes.FieldByName('Nome').AsString; // Foi o que encontramos pois o codigo só passa por aqui se existe a informação
      EdtFavorecido.SelStart := Aux; // Atualizamos a posição do cursor.
      EdtFavorecido.OnChange := EdtFavorecidoChange; // Agora podemos chamar novamente.
    end;
  end;
end;

Dessa form como você já sabe ele só executa a busca se o foco estiver no edit...

Abraços

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...