COMO LEIO CARTAO MAGNETICO??
Colegas,
Alguém já fez algo para leitura de cartão magnético?
Explico: quando passo o cartão pela leitora, ela me dá os valores em texto, exemplo:
%00046907:
ç00046907:
O valor 00046907 é o campo que foi codificado, é ele que preciso captar.
% - significa trilha 1
ç - significa trilha 2
: - significa final do código
Mas já tentei camptar estes valor pelos eventos keypreress, keydown, change e nada, estes eventos não ocorrem, ou seja, como é que posso pegar apenas o valor 00046907 para fazer uma busca no meu banco?
Toda ajuda ou idéia será bem vinda.
Grata,
Vanessa
Alguém já fez algo para leitura de cartão magnético?
Explico: quando passo o cartão pela leitora, ela me dá os valores em texto, exemplo:
%00046907:
ç00046907:
O valor 00046907 é o campo que foi codificado, é ele que preciso captar.
% - significa trilha 1
ç - significa trilha 2
: - significa final do código
Mas já tentei camptar estes valor pelos eventos keypreress, keydown, change e nada, estes eventos não ocorrem, ou seja, como é que posso pegar apenas o valor 00046907 para fazer uma busca no meu banco?
Toda ajuda ou idéia será bem vinda.
Grata,
Vanessa
De que forma você RECEBE a informação da LEITORA? Como ocorre?
Explique com detalhes este processo.
Explique com detalhes este processo.
Citação:TECLA escreveu:
De que forma você RECEBE a informação da LEITORA? Como ocorre?
Explique com detalhes este processo.
Grata, Tecla
Simples, a leitora está conectada na interface USB; somente posiciono a cursor no campo e passo o cartão magnético; é gerado um número que está codificado no cartão.
Toda vez que passava o cartão o sistema era abortado, tendo em vista que a leitora joga caracteres que não são esperados.
Aà fiz o seguinte, coloquei o código abaixo no evento keypress. Agora ela passou a mostrar os números corretamente no campo.
O campo em que passo o cartão tem o index = 0.
If Index = 0 Then
If Chr(KeyAscii) = [Ô]%[Ô] Then KeyAscii = 0
If Chr(KeyAscii) = [Ô]ç[Ô] Then KeyAscii = 0
If Chr(KeyAscii) = [Ô]Ç[Ô] Then KeyAscii = 0
If Chr(KeyAscii) = [Ô]:[Ô] Then KeyAscii = 0
If KeyAscii = 13 Then KeyAscii = 0
If KeyAscii = 10 Then KeyAscii = 0
End If
Aà tive outra idéia, coloquei o código para carregar os dados no evento change(), desta forma:
If Len(txt_campo(Index).Text) = txt_campo(Index).MaxLength
Call carregaDadoss([Ô]IDfuncionario=[Ô] & txt_campo(0).Text
end if
Mesmo assim o sistema é abortado pois está sendo gerado um código estranho em alguns campos.
Curioso é que se tento depurar o sistema é abortado.
Creio que só poderei fazer algo lendo a API do Windows, mas como faço isso?
Grata,
Vanessa
Você utiliza alguma DLL para se comunicar com o LEITOR?
Já tentou CONVERTER os caracteres para STRING, além de fazer um REPLACE antes de PROCESSAR na aplicação?
Já tentou CONVERTER os caracteres para STRING, além de fazer um REPLACE antes de PROCESSAR na aplicação?
Citação:TECLA escreveu:
Você utiliza alguma DLL para se comunicar com o LEITOR?
Já tentou CONVERTER os caracteres para STRING, além de fazer um REPLACE antes de PROCESSAR na aplicação?
Grata,
Não utilizo nenhuma DLL. A leitora já me retorna os caracteres, os números.
Sai exatamente assim: %00046907:
ç00046907:
Que fazer?
Vanessa
eu não sei exatamente o que é sistema abortado mas o que você pode tentar é o seguinte
tentar carregar os dados no evento lostfocus do campos.
tentar carregar os dados no evento lostfocus do campos.
Citação:MARCELO-TREZE escreveu:
eu não sei exatamente o que é sistema abortado mas o que você pode tentar é o seguinte
tentar carregar os dados no evento lostfocus do campos.
Grata, Marcelo
Significa que ao passar o cartão ocore uma pane e o sistema é encerrado; saÃda inesperada (abortado).
Outra, o código que coloquei no Keypress não permite que ocorra o evento LostFocus, mas coloquei a chamada para carregamento dos dados no evento Change e ocorre o erro já citado acima.
Eis parte do código do evento KeyPress:
If Index = 0 Then
If Chr(KeyAscii) = [Ô]%[Ô] Then KeyAscii = 0
If Chr(KeyAscii) = [Ô]ç[Ô] Then KeyAscii = 0
If Chr(KeyAscii) = [Ô]Ç[Ô] Then KeyAscii = 0
If Chr(KeyAscii) = [Ô]:[Ô] Then KeyAscii = 0
If KeyAscii = 13 Then KeyAscii = 0
If KeyAscii = 10 Then KeyAscii = 0
End If
Eis o código do evento Change:
If Len(txt_campo(Index).Text) = txt_campo(Index).MaxLength
Call carregaDadoss([Ô]IDfuncionario=[Ô] & txt_campo(0).Text
end if
Vanessa
Poste o código do procedimento carregaDados.
Citação:TECLA escreveu:
Poste o código do procedimento carregaDados.
Tecla,
O código de carregamento não pode ser aberto aqui no fórum; posso enviar para seu e-mail, pode ser?
Mas não há problema algum nesta parte, pois sempre funcionou. Inclusive com o leitor de código de barras funciona perfeitamente, os problemas passaram a ocorrer nos teste de leitor magnético.
Me passe seu e-mail que te envio o código.
Meu e-mail é vanessa.tagli@yahoo.com.br
Vanessa
Bom, se o problema não está no procedimento, experimenta fazer um BLOCO DE TRATAMENTO DE ERRO.
Experimente adicionar as linhas abaixo no DOIS EVENTOS do TEXTBOX (KeyPress e Change).
Quando ocorrer o erro, deve aparecer um MSGBOX com a DESCRIÇÃO DO ERRO.
Poste aqui!
Experimente adicionar as linhas abaixo no DOIS EVENTOS do TEXTBOX (KeyPress e Change).
On Error GoTo erro
[txt-color=#0B6138][ô] Seu código aqui[/txt-color]
Exit Sub
erro:
Msgbox Err.Description
Quando ocorrer o erro, deve aparecer um MSGBOX com a DESCRIÇÃO DO ERRO.
Poste aqui!
Caros,
Resolvi o problema!
Vejam, a leitura de cartão é um processo muito rápido, vc passa o cartão e o número é gerado, desta forma não tem como vc depurar, pois neste modo, a velocidade de processamento é menor (pelo que vi).
Assim, eu gerei o executável com a minha lógica e deu certo (executável é mais rápido).
Vejam a solução (o trecho que posso tornar público), no evento KeyPress:
If Index = 0 Then [ô]refere-se ao meu campo em que a leitora gera o número
If Chr(KeyAscii) = [Ô]%[Ô] Then KeyAscii = 0
If Chr(KeyAscii) = [Ô]ç[Ô] Then KeyAscii = 0
If Chr(KeyAscii) = [Ô]Ç[Ô] Then KeyAscii = 0
If Chr(KeyAscii) = [Ô]:[Ô] Then KeyAscii = 0
If KeyAscii = 10 Then KeyAscii = 0
If vcont = 0 Then [ô] vcont é uma variável de escopo de formulário, claro.
If KeyAscii = 13 Then
KeyAscii = 0
let vcont = 2
End If
End If
End If
Vanessa
Resolvi o problema!
Vejam, a leitura de cartão é um processo muito rápido, vc passa o cartão e o número é gerado, desta forma não tem como vc depurar, pois neste modo, a velocidade de processamento é menor (pelo que vi).
Assim, eu gerei o executável com a minha lógica e deu certo (executável é mais rápido).
Vejam a solução (o trecho que posso tornar público), no evento KeyPress:
If Index = 0 Then [ô]refere-se ao meu campo em que a leitora gera o número
If Chr(KeyAscii) = [Ô]%[Ô] Then KeyAscii = 0
If Chr(KeyAscii) = [Ô]ç[Ô] Then KeyAscii = 0
If Chr(KeyAscii) = [Ô]Ç[Ô] Then KeyAscii = 0
If Chr(KeyAscii) = [Ô]:[Ô] Then KeyAscii = 0
If KeyAscii = 10 Then KeyAscii = 0
If vcont = 0 Then [ô] vcont é uma variável de escopo de formulário, claro.
If KeyAscii = 13 Then
KeyAscii = 0
let vcont = 2
End If
End If
End If
Vanessa
Tópico encerrado , respostas não são mais permitidas