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

(Resolvido) Erro de Consulta


Fabiano Furquim

Pergunta

Bom Dia a todos.

Estou com o seguinte erro na minha consulta.

Exception class EConvertError with Message Is not valid integer value.

Sei que é um erro por causa do tipo de dados.

O que esta ocorrendo:

Tenho um formulário de busca, que a mesma pode ser feita tanto pelo código do aluno, como também pode ser feita pelo nome. O que ocorre é que eu consigo fazer a primeira busca pelo código, mas, quando tento realizar uma nova busca ele apresenta essa mensagem de erro. E tanto faz se a nova busca é por nome ou por código, ele sempre mostra a mensagem.

Estou usando os componetes de conexão Zeos(zConection e Zquery), e a consulta é feita pelo onchange dos edit's.

Segue código das consulta.

consulta por código

procedure TForm1.Edit1Change(Sender: TObject);
var
aluno : integer;
begin
    //Variável que recebe o valor do edit1 e transforma em número inteiro
    Aluno := strtoint(Edit1.Text);
    // Desativa a query
    Zquery.Active := false;
    // Limpa o atual SQL da query
    Zquery.SQL.Clear;
    // Adiciona o SQL para busca do Aluno
    Zquery.SQL.Append('SELECT ALUNO FROM OCORRENCIA WHERE ALUNO = :Aluno');
    // Define o parametro "Aluno" como sendo o Inteiro
    Zquery.ParamByName('Aluno').AsInteger:=Aluno;
    // Abre(executa) a busca
    Zquery.Open;

end;
Consulta por Nome
procedure TForm1.Edit2Change(Sender: TObject);
var
nome : string;
begin
    nome := edit2.Text;
    // Desativa a query
    Zquery.Active := false;
    // Limpa o atual SQL da query
    Zquery.SQL.Clear;
    // Adiciona o SQL para busca do usuario
    Zquery.SQL.Append('SELECT NOME FROM OCORRENCIA WHERE NOME = :Nome');
    // Define o parametro "Nome" como sendo o Texto do Edit2
    Zquery.ParamByName('Nome').AsString := nome;
    // Abre(executa) a busca
    Zquery.Open;
end;

Ainda quando troco o foco dos edit's ele limpa o edit anterior, ou seja foco no edit1 (edit2.text:=''), foco no edit2(edit1.text:='')

Se alguém tiver uma outra solução, agradeço.

Desde já agradeço pela ajuda de todos

Fabiano Furquim

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0
Estou com o seguinte erro na minha consulta.

Exception class EConvertError with Message Is not valid integer value.

Sei que é um erro por causa do tipo de dados.

O que esta ocorrendo:

Tenho um formulário de busca, que a mesma pode ser feita tanto pelo código do aluno, como também pode ser feita pelo nome. O que ocorre é que eu consigo fazer a primeira busca pelo código, mas, quando tento realizar uma nova busca ele apresenta essa mensagem de erro. E tanto faz se a nova busca é por nome ou por código, ele sempre mostra a mensagem.

Fabiano, é quase certo que seja devido a linha:

Aluno := strtoint(Edit1.Text);

O evento OnChange ocorre a cada alteração do Edit. Seja pela digitação de um caracter ou por sua definição como nulo (''). E é justo nesta condição que a linha citada gera erro. Ao tentar coverter qualquer coisa que não seja número para um (isto inclui a string nula - vazia), você terá o erro.

Para contorná-la você deverá validar seu conteúdo, tipo:

if Edit1.Text <> '' then
begin
  Aluno := strtoint(Edit1.Text);
  Zquery.Active := false;
  ...
  Zquery.Open;
end;
ou, pelo menos, talvez o mais apropriado:
try
  Aluno := strtoint(Edit1.Text);
  Zquery.Active := false;
  ...
  Zquery.Open;
except
    ShowMessage('Digite um núbero válido.');
end;

Entretanto, por não tratar-se de uma busca incremental (onde a cada caracter digitado você vai filtrando a consulta - como se faz em uma pesquisa usando LIKE), minha sugestão é que este tratamento seja feito no evento OnExit, ou seja, apenas quando o texto (mesmo que numérico) esteja completo.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
será q você poderia me dar um exemplo de como ficaria essa consulta com a clausula LIKE, dessa maneira poderia deixar a busca mais aprimorada....
Vou por alguns tópicos sobre o assunto, mas para ver outros, use o botão Pesquisar e coloque como palavra chave: LIKE (tem muitos tópicos a respeito)

- Fazer Uma Busca Em Sql E Usar Like Ao Invés De =

- Duvida Com Pesquisa

- Consulta Usando Query

Vai olhando eles que você consegue tirar muitas dúvidas (que outros já tiveram) sobre este comando.

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,3k
    • Posts
      652,4k
×
×
  • Criar Novo...