Como ler código de barras?

Delphi

08/09/2009

Bom dia a todos.

Estou desenvolvendo um programas e não estou conseguindo ler o código de barras e jogar os dados em uma tabela, o leitor tras sempre o mesmo item, se vocês puderem me ajudar desde já eu agradeço.
Segue abaixo o meu font.


procedure TFvendas.EditCodBarraChange(Sender: TObject);
begin
Try
// Crio um indice secundário para o campo de código de Barras
tbproduto.Open; //Tabela de origem dos dados
tbproduto.IndexFieldNames := ´item´;
tbproduto.Editkey;
tbproduto.FindNearest([EditCodPed.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;
EditCodPed.Clear;
editqtd.SetFocus;
end;

end;


Valdir Lima

Valdir Lima

Curtidas 0

Respostas

Darkrme

Darkrme

08/09/2009

Amigo, nao seu qual componente pra acesso ao BD vc usa.. eu uso o ADO...

minha sequencia para acessar os codigos de barras ficou mais ou menos assim... ve se te ajuda:


      cod_produto := EdtCodProduto.Text;
        if dm.QryProdutos.Active then
        begin
          dm.QryProdutos.Close;
        end;
        dm.QryProdutos.SQL.Text := ´SELECT * FROM produtos ´ +
          ´WHERE cod_produto = :cod_protudo´;
        dm.QryProdutos.Parameters[0].Value := cod_produto;
        dm.QryProdutos.Open;
        dm.QryProdutos.Locate(´cod_produto´,cod_produto,[loCaseInsensitive, loPartialKey]);
        if dm.QryProdutos.RecordCount <> 0 then
        begin
          achou := True;
        end;


        if achou then
        begin
          dm.QryVendas.Post;
          //verifica se a query de adicionar saida esta aberta
          if not FrmCadSaidaEstoque.DataSource1.DataSet.Active then
          begin
            FrmCadSaidaEstoque.DataSource1.DataSet.Open;
          end;
          //termina de verificar

          //adiciona produto a venda
          FrmCadSaidaEstoque.DataSource1.DataSet.Insert;
          dm.QrySaidasquantidade.Value := 1;
          dm.QrySaidasvalor_total.Value := dm.QryProdutosvalor_venda.Value;
          dm.QrySaidasdata.Value := dm.QryVendasdata.Value;
          dm.QrySaidascod_cliente.Value := dm.QryVendascod_cliente.Value;
          dm.QrySaidasdesconto.Value := 0;
          dm.QrySaidasencargos.Value := 0;
          dm.QrySaidascod_produto.Value := cod_produto;
          dm.QrySaidas.Post;
          //termina de adicionar produto

          //vincula a saida a venda
          dm.QryVenda_Saida.Open;
          dm.QryVenda_Saida.Insert;
          dm.QryVenda_Saidacod_venda.Value := Dm.QryVendascod_venda.Value;
          dm.QryVenda_Saidacod_saida.Value := dm.QrySaidascod_saida.Value;
          dm.QryVenda_Saida.Post;
          dm.QryVenda_Saida.Close;
          //termina de vincular saida a venda

          dm.QrySaidas.Close;


          dm.QryVendas.Edit;

          AtualizaProdutosTotal(True);

          EdtCodProduto.Clear;
          EdtCodProduto.SetFocus;
        end
        else begin
          Application.MessageBox(´O Produto não foi encontrado!´,´Atenção´,
           MB_ICONEXCLAMATION+MB_OK);
          EdtCodProduto.Clear;
          EdtCodProduto.SetFocus;
        end;
      end
      else begin
        Application.MessageBox(´Por favor, digite o código do produto!´,´Atenção´,
         MB_ICONEXCLAMATION+MB_OK);
        EdtCodProduto.Clear;
        EdtCodProduto.SetFocus;
      end;


    end
    else begin Application.MessageBox(´Você deve preencher todos os campos antes de procurar um produto!´,
     ´Atenção´,MB_ICONEXCLAMATION+MB_OK);
    end;
  end;
  if dm.qryprodutos.active then
  begin
    dm.qryprodutos.Close;
  end;


Lembrando.. eu tenho uma tabela Vendas, outra Saidas e outra Venda_Saida

qnd eu leio o codigo de barras ele procura na tabela produtos o codigo, se existir ele cadastra uma saida do produto e vincula a saida com a venda e mostra no grid da venda o produto que foi vendido...

qualquer duvida adiciona ai raphael@infonetbr.com q eu posso te ajudar =)

Abraço..


GOSTEI 0
Osocram

Osocram

08/09/2009

Outro detalhe é que normalmente esses leitores de Codigo de Barra eles Leem e depois dão um ´Enter´ no final

Em vez de usar no OnChange tente usar no OnKeyDown
e pegar o vk_return la...

E para localizar o registro faria que nem o amigo Darkrme descreveu
usando
Locate



GOSTEI 0
Darkrme

Darkrme

08/09/2009

exatamente... no caso do meu sistema esta no OnKeyDown do form...

if Key = VK_Return then
begin
{codigos anteriores}
end;

e se o seu form tier mais de um keydown no Enter... pode fazer o seguinte

if ActiveControl = Edit1 then
begin
if key = vk_return then
begin

end;
end;

abraço ;)


GOSTEI 0
POSTAR