ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

evento edit onchange

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
fabiodurgante
Aprendiz
Aprendiz


Registrado: Sexta-Feira, 8 de Novembro de 2013
Mensagens: 197

MensagemEnviada: Ter Nov 19, 2013 4:46 pm    Assunto: evento edit onchange Responder com Citação

tenho o codigo no evento onchange
IBQuery1.sql.Clear;
IBQuery1.CLOSE;
IBQuery1.sql.add('SELECT ID as Cod, nome ');
IBQuery1.sql.add('from produto JOIN cliente ON produto.id=cliente.id');
IBQuery1.SQL.Add('where id=:id or codigo_barra = :cod ');
IBQuery1.sql.add(' order by nome ');
IBQuery1.ParamByName('id').AsInteger:= StrToInt(edit1.Text);
IBQuery1.ParamByName('cod').AsInteger:= StrToInt(edit1.Text);
ShowMessage(IBQuery1.ParamByName('id').Value);
ShowMessage(IBQuery1.ParamByName('cod').Value);

coloquei o ShowMessage, ele somemente funciona o ShowMessage ate o 10 caracter digitado no edit1, o codigo de barra tem 13 nunca vai ler por codigo de barra entende, pois so funciona ate o 10, digito no edit 1 aparece o ShowMessage
digo 1234567890 te ai funciona se eu digitar mais numeros depois do 0 ele nao aparece o ShowMessage como posso fazer para ler o codigo barra ???
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Ter Nov 19, 2013 4:56 pm    Assunto: Responder com Citação

Boa tarde,

O campo codigo_barra é de que tipo no banco de dados?
Tente trocar o AsInteger e a função StrToInt utilizados com o parâmetro cod por algo equivalente ao tipo do campo no banco de dados.

Espero que ajude.


Editado pela última vez por imex em Seg Out 02, 2023 11:33 am, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
fabiodurgante
Aprendiz
Aprendiz


Registrado: Sexta-Feira, 8 de Novembro de 2013
Mensagens: 197

MensagemEnviada: Ter Nov 19, 2013 9:12 pm    Assunto: Responder com Citação

a questao pelo que percebo nao é isso é que o evento nao funciona depois de digitar 10 caracteres, qualquer coisa que eu digito ate 10 ele funciona depois de 10 caracteres ele nao faz o evento nao acontece nada
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Netrunner
Aprendiz
Aprendiz


Registrado: Domingo, 7 de Julho de 2013
Mensagens: 236

MensagemEnviada: Ter Nov 19, 2013 9:22 pm    Assunto: Responder com Citação

Por isso ele falou pra colocar asinteger ou integer na coluna COD do banco de dados, ele não ta validando numeros corretamente.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
fabiodurgante
Aprendiz
Aprendiz


Registrado: Sexta-Feira, 8 de Novembro de 2013
Mensagens: 197

MensagemEnviada: Ter Nov 19, 2013 10:02 pm    Assunto: Responder com Citação

fiz assim
function EhNumero(S: string): Boolean;
var
I: Integer;
begin
Result := True;
for I := 1 to length(S) do begin
if not (S[I] in ['0'..'9']) then begin
Result := False;
Break;
end;
end;
end;


e no evento onchange
if EhNumero(edit1.Text) then
begin
IBQuery1.sql.Clear;
IBQuery1.CLOSE;
IBQuery1.sql.add('SELECT ID as Cod, nome ');
IBQuery1.sql.add('from produto JOIN cliente ON produto.id=cliente.id');
IBQuery1.SQL.Add('where id=:id or codigo_barra = :cod ');
IBQuery1.sql.add(' order by nome ');
IBQuery1.ParamByName('id').AsInteger:= StrToInt(edit1.Text);
IBQuery1.ParamByName('cod').AsInteger:= StrToInt(edit1.Text);
ShowMessage(IBQuery1.ParamByName('id').Value);
ShowMessage(IBQuery1.ParamByName('cod').Value);
alterar_dbgrid();
end
else
begin

IBQuery1.sql.Clear;
IBQuery1.CLOSE;
IBQuery1.sql.add('SELECT ID as Cod, nome ');
IBQuery1.sql.add('from produto JOIN cliente ON produto.id=cliente.id');
IBQuery1.sql.add('where LOWER(nome) LIKE ' + QuotedStr(ansilowercase(edit1.text+'%')));
IBQuery1.sql.add( 'and status='+ quotedstr (par)+ 'order by descricao');
IBQuery1.open;
alterar_dbgrid();
end


se for numero procuro por codigo de barra, se nao for numero procuro por nome, ai começo a digitar numero no edit1 quando digito a 11º numero 1234567890 quando eu digito +1 numero apos o 0 da erro is not a alid integer value
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
fabiodurgante
Aprendiz
Aprendiz


Registrado: Sexta-Feira, 8 de Novembro de 2013
Mensagens: 197

MensagemEnviada: Ter Nov 19, 2013 10:07 pm    Assunto: Responder com Citação

pelo que andei vendo é o int64 que preciso mas da erro na funcao
function EhNumero(S: string): Boolean;
var
I: int64;
begin
Result := True;
for I := 1 to length(S) do begin
if not (S[I] in ['0'..'9']) then begin
Result := False;
Break;
end;
end;
end;

com trocando INTEGER por int64.

campo do Banco é VARCHAR
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qua Nov 20, 2013 9:48 am    Assunto: Responder com Citação

Se o campo é VarChar experimente alterar o código para passagem do parâmetro:

Código:
IBQuery1.ParamByName('cod').AsString := Edit1.Text;


Espero que ajude.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
fabiodurgante
Aprendiz
Aprendiz


Registrado: Sexta-Feira, 8 de Novembro de 2013
Mensagens: 197

MensagemEnviada: Qua Nov 20, 2013 10:29 am    Assunto: Responder com Citação

alterei e mesmo assim ele so executa o onchange ate o 10 caracter depois do 10º numero digitado ele não faz nada deve ser a primeiro if, mas como que poderia fazer para verificar nome, código ou código barra no mesmo edit, cada 1 das pesquisas no mesmo campo , alterando o sql da ibquery
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qua Nov 20, 2013 11:01 am    Assunto: Responder com Citação

O evento OnChange do Edit vai ocorrer sempre que o conteúdo do mesmo for modificado, independente da quantidade de caracteres que ele possui.
Para comprovar isso você pode colocar um BreakPoint na primeira linha de código do OnChange e executar a sua aplicação com debug.

Olhando novamente o código que você postou acima reparei que está faltando executar o método Open da IBQuery após a passagem dos parâmetros.

Espero que ajude.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB