Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
fabiodurgante Aprendiz
![Aprendiz Aprendiz](../modules/PNphpBB2/templates/PNTheme/images/narodniki-classic/star2.gif)
Registrado: Sexta-Feira, 8 de Novembro de 2013 Mensagens: 197
|
Enviada: Ter Nov 19, 2013 4:46 pm Assunto: evento edit onchange |
|
|
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 |
|
![](templates/subSilver/images/spacer.gif) |
imex Moderador
![Moderador Moderador](../modules/PNphpBB2/templates/PNTheme/images/narodniki-classic/moderador.gif)
Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Ter Nov 19, 2013 4:56 pm Assunto: |
|
|
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 |
|
![](templates/subSilver/images/spacer.gif) |
fabiodurgante Aprendiz
![Aprendiz Aprendiz](../modules/PNphpBB2/templates/PNTheme/images/narodniki-classic/star2.gif)
Registrado: Sexta-Feira, 8 de Novembro de 2013 Mensagens: 197
|
Enviada: Ter Nov 19, 2013 9:12 pm Assunto: |
|
|
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 |
|
![](templates/subSilver/images/spacer.gif) |
Netrunner Aprendiz
![Aprendiz Aprendiz](../modules/PNphpBB2/templates/PNTheme/images/narodniki-classic/star2.gif)
Registrado: Domingo, 7 de Julho de 2013 Mensagens: 236
|
Enviada: Ter Nov 19, 2013 9:22 pm Assunto: |
|
|
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 |
|
![](templates/subSilver/images/spacer.gif) |
fabiodurgante Aprendiz
![Aprendiz Aprendiz](../modules/PNphpBB2/templates/PNTheme/images/narodniki-classic/star2.gif)
Registrado: Sexta-Feira, 8 de Novembro de 2013 Mensagens: 197
|
Enviada: Ter Nov 19, 2013 10:02 pm Assunto: |
|
|
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 |
|
![](templates/subSilver/images/spacer.gif) |
fabiodurgante Aprendiz
![Aprendiz Aprendiz](../modules/PNphpBB2/templates/PNTheme/images/narodniki-classic/star2.gif)
Registrado: Sexta-Feira, 8 de Novembro de 2013 Mensagens: 197
|
Enviada: Ter Nov 19, 2013 10:07 pm Assunto: |
|
|
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 |
|
![](templates/subSilver/images/spacer.gif) |
imex Moderador
![Moderador Moderador](../modules/PNphpBB2/templates/PNTheme/images/narodniki-classic/moderador.gif)
Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Qua Nov 20, 2013 9:48 am Assunto: |
|
|
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 |
|
![](templates/subSilver/images/spacer.gif) |
fabiodurgante Aprendiz
![Aprendiz Aprendiz](../modules/PNphpBB2/templates/PNTheme/images/narodniki-classic/star2.gif)
Registrado: Sexta-Feira, 8 de Novembro de 2013 Mensagens: 197
|
Enviada: Qua Nov 20, 2013 10:29 am Assunto: |
|
|
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 |
|
![](templates/subSilver/images/spacer.gif) |
imex Moderador
![Moderador Moderador](../modules/PNphpBB2/templates/PNTheme/images/narodniki-classic/moderador.gif)
Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Qua Nov 20, 2013 11:01 am Assunto: |
|
|
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 |
|
![](templates/subSilver/images/spacer.gif) |
|