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

Erro de leitura de codigo de barras


Limas

Pergunta

Boa tarde pessoal,

Meu programa não esta conseguindo ler o código de barras, gerei os códigos de barra tipo btCodeEAN13 do CJVBarcode desta forma:

procedure Tfproduto.DBGrid1ColExit(Sender: TObject);
begin
     if (DbGrid1.SelectedIndex=12) then
   begin
     tbproduto.edit;
     tbproduto['codbarra'] := '789827287' + tbproduto['codigo'];
     tbproduto.post;
end;
end;
O delphi (banco paradox) grava na tabela o código sem o digito identificador mas imprime a etiqueta com o identificador, o que pode estar errado, o sistema pode identificar no banco um código sem o digito identificador? Para a leitura do código eu escrevi o font abaixo que também pode estar errado pois o leitor traz sempre o primeiro registro.
procedure TFvendas.EditCodBarraKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
try
tbproduto.Open;
tbproduto.IndexFieldNames := 'codbarra';
tbproduto.Editkey;
tbproduto.FindNearest([EditCodbarra.Text]);
tbproduto.Refresh;
except on
EDBEngineError do MessageDlg('Erro na busca! Tente novamente.', mtError,
[mbOK], 0);
end;
begin
        if EditCodPed.Text='' then begin
        Showmessage('Escolha Nova Venda, para continuar');
        abort;
        end;
        tbitem.insert;
        tbitem['codigo']:= tbproduto['codigo'];
        tbitem['nome']:= tbproduto['item'];
        tbitem['Qtd']:= 1;
        tbitem['vrunit']:= tbproduto['venda'];
        tbitem['data']:=DateTostr(now);
        tbitem.post;
        EditCodbarra.Clear;
        EditCodbarra.SetFocus;
        end;
end;
end;

Se os colegas puderem me ajudar eu agradeço antecipadamente.

Abraço.

Valdir Lima

Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 0
O delphi (banco paradox) grava na tabela o código sem o digito identificador mas imprime a etiqueta com o identificador, o que pode estar errado, o sistema pode identificar no banco um código sem o digito identificador?
O digito identificado é gerado no momento da leitura e no banco ele não é gravado

Para a leitura do código eu escrevi o font abaixo que também pode estar errado pois o leitor traz sempre o primeiro registro

O Erro esta no evento ... não use OnKeyDown e sim OnKeyPress

procedure TFvendas.EditCodBarraKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure TFvendas.EditCodBarraKeyPress(Sender: TObject; var Key: Char);
o outro erro:
begin
try
  tbproduto.Open;
  tbproduto.IndexFieldNames := 'codbarra';
  tbproduto.Editkey;
  tbproduto.FindNearest([EditCodbarra.Text]);
  tbproduto.Refresh;
except on
  EDBEngineError do MessageDlg('Erro na busca! Tente novamente.', mtError,
[mbOK], 0);
end;
begin
try
  tbproduto.IndexDefs.Clear;
  tbproduto.IndexName := 'codbarra';
  tbproduto.IndexDefs.Update;

  tbproduto.open;
  tbproduto.FindNearest(trim[EditCodbarra.Text]);

except on
  EDBEngineError do MessageDlg('Erro na busca! Tente novamente.', mtError,
[mbOK], 0);
end;

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Boa tarde pessoal,

Meu programa não esta conseguindo ler o código de barras, gerei os códigos de barra tipo btCodeEAN13 do CJVBarcode desta forma:

procedure Tfproduto.DBGrid1ColExit(Sender: TObject);

begin

if (DbGrid1.SelectedIndex=12) then

begin

tbproduto.edit;

tbproduto['codbarra'] := '789827287' + tbproduto['codigo'] ;

tbproduto.post;

end;

end;

O delphi (banco paradox) grava na tabela o código sem o digito identificador mas imprime a etiqueta com o identificador, o que pode estar errado, o sistema pode identificar no banco um código sem o digito identificador?

Para a leitura do código eu escrevi o font abaixo que também pode estar errado pois o leitor traz sempre o primeiro registro.

procedure TFvendas.EditCodBarraKeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

begin

try

tbproduto.Open;

tbproduto.IndexFieldNames := 'codbarra';

tbproduto.Editkey;

tbproduto.FindNearest([EditCodbarra.Text]);

tbproduto.Refresh;

except on

EDBEngineError do MessageDlg('Erro na busca! Tente novamente.', mtError,

[mbOK], 0);

end;

begin

if EditCodPed.Text=' then begin

Showmessage('Escolha Nova Venda, para continuar');

abort;

end;

tbitem.insert;

tbitem['codigo]:= tbproduto['codigo'];

tbitem['nome']:= tbproduto['item'];

tbitem['Qtd']:= 1;

tbitem['vrunit']:= tbproduto['venda'];

tbitem['data']:=DateTostr(now);

tbitem.post;

EditCodbarra.Clear;

EditCodbarra.SetFocus;

end;

end;

end;

Se os colegas puderem me ajudar eu agradeço antecipadamente.

Abraço.

Valdir Lima

Olá Jhonas,

Eu fiz a correção conforme sua orientação mas na hora de abrir o programa ele apresenta o seguinte erro:

[Error] UVenda.pas(253): There is no overloaded version of 'Trim' that can be called with these arguments

[Error] UVenda.pas(253): Incompatible types: 'Integer' and 'TCaption'

Este erro aparece na linha abaixo:

tbproduto.FindNearest(trim[EditCodbarra.Text]);

Estou tentando resolver por aqui mas não estou conseguindo.

Abraço.

Valdir

Link para o comentário
Compartilhar em outros sites

  • 0
[Error]UVenda.pas(253): There is no overloaded version of 'Trim' that can be called with these arguments

[Error] UVenda.pas(253): Incompatible types: 'Integer' and 'TCaption'

Não há nenhuma versão de ' Trim' que pode ser chamado com estes argumentos

Tipos Incompativeis: Inteiro e TCaption

OPS: Erro meu ... desculpe...rs

Este erro aparece na linha abaixo:

tbproduto.FindNearest(trim[EditCodbarra.Text]);

O correto:

tbproduto.FindNearest([trim(EditCodbarra.Text)]);

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia Jhonas,

Quero te agradecer por ter me ajudado até aqui mas eu continuo com problema para fazer a leitura,

ao passar o leitor no código de barra o sistema passa para tbitem vários produtos e varias vezes ao invés de passar

o produto do código de barra uma vez só. Eu acho que está faltando associar o produto na tbproduto para poder transferir

este para tbitem.

Se você puder me ajudar mais uma vez, eu te agradece muito.

Segue abaixo o font do jeito que está no programa.

procedure TFvendas.EditCodBarraKeyPress(Sender: TObject; var Key: Char);
begin
try
  tbproduto.IndexDefs.Clear;
  tbproduto.IndexName := 'bycodbarra';
  tbproduto.IndexDefs.Update;
  tbproduto.open;
  tbproduto.FindNearest([trim(EditCodbarra.Text)]);

except on
  EDBEngineError do MessageDlg('Erro na busca! Tente novamente.', mtError,
[mbOK], 0);
end;
begin
   if EditCodPed.Text='' then begin
   Showmessage('Escolha Nova Venda, para continuar');
   abort;
   end;
   tbitem.insert;
   tbitem['codigo']:= tbproduto['codigo'];
   tbitem['nome']:= tbproduto['item'];
   tbitem['Qtd']:= 1;
   tbitem['vrunit']:= tbproduto['venda'];
   tbitem['data']:=DateTostr(now);
   tbitem.post;
   EditCodbarra.Clear;
   EditCodbarra.SetFocus;
   end;
end;

Atenciosamente.

Valdir Lima.

Link para o comentário
Compartilhar em outros sites

  • 0

Só lembrando :

O codigo de barras deve ser do tipo varchar e não integer

O ultimo digito é o digito verificador e não é gravado no banco ( o campo devera ter apenas 12 numeros ) ... este digito é gerado na leitura do código

procedure TFvendas.EditCodBarraKeyPress(Sender: TObject; var Key: Char);
ao passar o leitor no código de barra o sistema passa para tbitem vários produtos e varias vezes ao invés de passar o produto do código de barra uma vez só.
Veja que voce esta usando o metodo OnKeyPress.... não deveria, pois o leitor funciona como se voce estivesse digitando cada numero do código, ou seja, o metodo será chamado uma vez para cada numero que o leitor está lendo. Esse código deveria estar no evento OnExit do Edit
procedure TFvendas.EditCodBarraExit(Sender: TObject);
begin
try
  tbproduto.IndexDefs.Clear;
  tbproduto.IndexName := 'bycodbarra';
  tbproduto.IndexDefs.Update;
  tbproduto.open;
  tbproduto.FindNearest([trim(EditCodbarra.Text)]);

except on
  EDBEngineError do MessageDlg('Erro na busca! Tente novamente.', mtError,
[mbOK], 0);
end;
begin
   if EditCodPed.Text='' then begin
   Showmessage('Escolha Nova Venda, para continuar');
   abort;
   end;
   tbitem.insert;
   tbitem['codigo']:= tbproduto['codigo'];
   tbitem['nome']:= tbproduto['item'];
   tbitem['Qtd']:= 1;
   tbitem['vrunit']:= tbproduto['venda'];
   tbitem['data']:=DateTostr(now);
   tbitem.post;
   EditCodbarra.Clear;
   EditCodbarra.SetFocus;
   end;
end;

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Só lembrando :

O codigo de barras deve ser do tipo varchar e não integer

O ultimo digito é o digito verificador e não é gravado no banco ( o campo devera ter apenas 12 numeros ) ... este digito é gerado na leitura do código

procedure TFvendas.EditCodBarraKeyPress(Sender: TObject; var Key: Char);
ao passar o leitor no código de barra o sistema passa para tbitem vários produtos e varias vezes ao invés de passar o produto do código de barra uma vez só.
Veja que voce esta usando o metodo OnKeyPress.... não deveria, pois o leitor funciona como se voce estivesse digitando cada numero do código, ou seja, o metodo será chamado uma vez para cada numero que o leitor está lendo. Esse código deveria estar no evento OnExit do Edit
procedure TFvendas.EditCodBarraExit(Sender: TObject);
begin
try
  tbproduto.IndexDefs.Clear;
  tbproduto.IndexName := 'bycodbarra';
  tbproduto.IndexDefs.Update;
  tbproduto.open;
  tbproduto.FindNearest([trim(EditCodbarra.Text)]);

except on
  EDBEngineError do MessageDlg('Erro na busca! Tente novamente.', mtError,
[mbOK], 0);
end;
begin
   if EditCodPed.Text='' then begin
   Showmessage('Escolha Nova Venda, para continuar');
   abort;
   end;
   tbitem.insert;
   tbitem['codigo']:= tbproduto['codigo'];
   tbitem['nome']:= tbproduto['item'];
   tbitem['Qtd']:= 1;
   tbitem['vrunit']:= tbproduto['venda'];
   tbitem['data']:=DateTostr(now);
   tbitem.post;
   EditCodbarra.Clear;
   EditCodbarra.SetFocus;
   end;
end;

abraço

Olá Jhonas, estamos aqui novamente.

Ainda não consegui fazer o leitor de código de barras funcionar, ao passá-lo em uma barra, pode ser o primeiro registro ou outro qualquer, o programa lança sempre o "primeiro" e o "último" registro da minha tabela produto duas ou tres vezes para tabela itens.

Talvez eu esteja fazendo confusão onde eu deva usar o evento EditCodBarraKeyDown que você citou na resposta do dia 11/09 e o evento EditCodBarraExit que está na resposta do dia 18/09, eu devo usar um dos dois ou os dois eventos em procedures diferentes?

Segue abaixo o font que está gerando este erro.

procedure TFvendas.EditCodBarraKeyPress(Sender: TObject; var Key: Char);

begin

try

tbproduto.IndexDefs.Clear;

tbproduto.IndexName := 'bycodbarra';

tbproduto.IndexDefs.Update;

tbproduto.open;

tbproduto.FindNearest([trim(EditCodbarra.Text)]);

except on

EDBEngineError do MessageDlg('Erro na busca! Tente novamente.', mtError, [mbOK], 0);

end;

begin

if EditCodPed.Text=' then begin

Showmessage('Escolha Nova Venda, para continuar');

abort;

end;

tbitem.insert;

tbitem['codigo]:= tbproduto['codigo'];

tbitem['nome']:= tbproduto['item'];

tbitem['Qtd']:= 1;

tbitem['vrunit']:= tbproduto['venda'];

tbitem['data']:=DateTostr(now);

tbitem.post;

EditCodbarra.Clear;

EditCodbarra.SetFocus;

end;

end;

Um abraço.

Valdir Lima

Link para o comentário
Compartilhar em outros sites

  • 0
Talvez eu esteja fazendo confusão onde eu deva usar o evento EditCodBarraKeyDown que você citou na resposta do dia 11/09 e o evento EditCodBarraExit que está na resposta do dia 18/09, eu devo usar um dos dois ou os dois eventos em procedures diferentes?

Entenda que é necessario definir apenas uma vez o indice e abrir o arquivo

A leitura do codigo de barra deve ser feita o Exit do Edit

Caso a leitura tenha sido ok e o referido produto localizado, então pode ser feito a inclusão do produto em outra tabela ( ex: Vendas )

procedure TForm1.FormActivate(Sender: TObject);
begin
    tbproduto.IndexDefs.Clear;
    tbproduto.IndexName := 'bycodbarra';
    tbproduto.IndexDefs.Update;
    tbproduto.open;
end;

procedure TForm1.EditExit(Sender: TObject);
begin
  try
    tbproduto.FindNearest([trim(EditCodbarra.Text)]);
  except on
    EDBEngineError do MessageDlg('Erro na busca! Tente novamente.', mtError, [mbOK], 0);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if EditCodPed.Text='' then
     begin
        Showmessage('Escolha Nova Venda, para continuar');
        abort;
     end;

      tbitem.insert;
      tbitem['codigo']:= tbproduto['codigo'];
      tbitem['nome']:= tbproduto['item'];
      tbitem['Qtd']:= 1;
      tbitem['vrunit']:= tbproduto['venda'];
      tbitem['data']:=DateTostr(now);
      tbitem.post;
      EditCodbarra.Clear;
      EditCodbarra.SetFocus;
end;

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia Jhonas,

O erro que ainda está ocorrendo é que o programa não está conseguindo localizar o produto na tabela de produtos, eu fiz as tres etapas conforme você passou abaixo, o programa faz a leitura do código de barras e depois carrega no EditCodBarra e no evento OnClick do Button1 o sistema não consegue identificar o código do produto na tabela de produto.

Talvez no evento OnClick esteja faltando informar o que está carregado no EditCodBarra para que o sistema possa buscar na tabela e carregar na tabela itens ou ainda algum problema com a geração do código de barra onde eu estou somando (+) ao número fixo '789827287' o número gerado pelo autoincrement que está resultando um número com 9 dígitos.

Já tentei resolver de várias maneiras do tipo "OnKeyPress", "OnExit" do Edit e outros mas não deu certo.

Um Abraço.

Valdir Lima

Link para o comentário
Compartilhar em outros sites

  • 0
O erro que ainda está ocorrendo é que o programa não está conseguindo localizar o produto na tabela de produtos, eu fiz as tres etapas conforme você passou abaixo, o programa faz a leitura do código de barras e depois carrega no EditCodBarra e no evento OnClick do Button1 o sistema não consegue identificar o código do produto na tabela de produto.

Talvez no evento OnClick esteja faltando informar o que está carregado no EditCodBarra para que o sistema possa buscar na tabela e carregar na tabela itens ou ainda algum problema com a geração do código de barra onde eu estou somando (+) ao número fixo '789827287' o número gerado pelo autoincrement que está resultando um número com 9 dígitos.

Já tentei resolver de várias maneiras do tipo "OnKeyPress", "OnExit" do Edit e outros mas não deu certo.

Veja quer se voce usar o tipo integer a quantidade de dígitos será no maximo de 10

Integer –2147483648..2147483647 signed 32-bit

Int64 –2^63..2^63–1 signed 64-bit

Se voce quer usar o codigo de barras, o campo para o código deve ser do tipo Alpha ( Caractere )

Eu uso a seguinte sequência:

1 - definição do campo na tabela como Alphanumerico de 13 posições

2 - a leitura do código de barras é feita no OnKeyPress do Edit

3 - a pesquisa do código de barras na tabela é feita no evento OnExit do edit

4 - a gravação do código de barras lido é somente de 12 digitos sem o digito verificador ( neste caso eu limitei o tamanho do Edit em 12 caracteres )

Tenho um sistema que trabalha com um arquivo de 90.000 itens com codigo de barras e funciona perfeitamente

abraço

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
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...