COMO LEIO CARTAO MAGNETICO??

VANESSATAGLI 10/10/2009 18:40:02
#324995
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
TECLA 10/10/2009 19:07:51
#324996
Resposta escolhida
De que forma você RECEBE a informação da LEITORA? Como ocorre?
Explique com detalhes este processo.
VANESSATAGLI 10/10/2009 19:56:53
#324998
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

TECLA 11/10/2009 10:52:25
#325014
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?
VANESSATAGLI 11/10/2009 16:09:09
#325044
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

MARCELO.TREZE 11/10/2009 16:21:06
#325045
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.
VANESSATAGLI 11/10/2009 17:35:36
#325048
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
TECLA 11/10/2009 17:43:52
#325049
Poste o código do procedimento carregaDados.
VANESSATAGLI 11/10/2009 20:50:03
#325063
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


TECLA 11/10/2009 21:27:08
#325064
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).
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!
VANESSATAGLI 14/10/2009 10:01:00
#325253
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
Página 1 de 2 [11 registro(s)]
Tópico encerrado , respostas não são mais permitidas