LER TEXT BOX E ESCREVER NO SQL

ROGERIOAZEVEDO 25/07/2012 15:39:18
#406576
Boa Tarde

Pessoal, estou criando uma aplicação que faz a leitura de uma porta COM. Nessa porta com está conectada uma leitora de cartão de acesso. Ao aproximar um cartão da leitora 2 linhas são escritas na textbox. Sempre que um cartão é apresentado à uma leitora, são acrescidos na texbox 2 linhas, uma linha indicando que o acesso foi permitido ao usuário e outra linha indicando que o acesso a porta foi permitido.

2012/07/25 15:13 System Area Access granted on door User Code 4
2012/07/25 15:13 System Area Access granted on door Door 2

Já criei a conexão com a base de dados que contem 5 colunas, eu fiz alguns testes de conexão, com um botão para inserir os dados, apenas para testar a conexão, que está OK. No teste que eu fiz, ao clicar no botão todas as informações que existem na texbox é inserida no banco de dados, eu gostaria de colocar no evento TEXT CHANGE, mas apenas as ultimas 2 linhas deveriam ser inseridas, e não todas presentes na TEXBOX.

Data Hora Descricao Usuario Porta
2012/07/25 15:13 Access granted on door User Code 4 Door 2

Se possível, a partir das 2 linhas apresentadas acima, eu gostaria de escrever os dados das 2 linhas conforme as 5 colunas acima, sempre que um cartão for apresentado a leitoras, 2 linhas serão acrescidas na leitura da COM, o código precisa ler as 2 linhas e escrever os dados conforme apresentado acima em 5 colunas. Mandei um print da aplicação.

Desde já agradeço a colaboração. Um forte abraço.
ROGERIOAZEVEDO 25/07/2012 15:45:09
#406578
Abaixo o código que fiz os testes de insersão no banco de dados, mas inclui tudo que estiver na TEXTBOX em apenas uma coluna. Coloque no evento Click apenas para testar.

Private Sub btnSQL_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSQL.Click


[ô]CRIA CONEXÃO COM O BANCO DE DADOS
Dim Sqlconn As New SqlConnection
Sqlconn.ConnectionString = [Ô]Server = serverbd; Database = GSNDATA; integrated security = true[Ô]

Try
Sqlconn.Open()
Catch ex As Exception
MessageBox.Show(ex.Message, [Ô]Falha na conexão SQL[Ô])

End Try
If Sqlconn.State = 1 Then
Me.Text = [Ô]Sistema Conectado ao DB GSNDATA[Ô]
Me.BackColor = Color.CadetBlue()
End If

[ô]DECLARANDO STRING PARA INSERIR OS DADOS
Dim sql As String = [Ô]INSERT INTO _Ponto_GSN(Data) VALUES (@data)[Ô]

Dim cmd As New SqlCommand(sql, sqlconn)

cmd.Parameters.Add(New SqlParameter([Ô]@data[Ô], rtbReceived.Text))

Try
cmd.ExecuteNonQuery() [ô]Executa o Insert
MessageBox.Show([Ô]Nome inserido como sucesso ![Ô]) [ô] Inseriu como sucesso !
Catch ex As Exception
MessageBox.Show(ex.Message, [Ô]erro[Ô])
[ô]Se de algum erro será exibida uma mensagem
Finally
Sqlconn.Close() [ô]Fechando a Conexão com o banco de dados
End Try
End Sub
KERPLUNK 25/07/2012 15:47:15
#406579
Quando os dados vêm da leitora, os campos estão separados por <tab>?
ROGERIOAZEVEDO 25/07/2012 15:55:18
#406580
EU não saberia lhe informar se é um TAB ou um simples espaço. A leitora na verdade é parte integrante de um sistema de controle de acesso, eu criei uma placa eletrônica, que conectado na controladora de acesso me libera na serial os dados que vão para o software de controle de acesso, os dados simplesmente vem pela serial, eu não conseguiria confirmar

De qualquer forma, se você tiver uma solução para o caso de estarem separados por TAB, me mande que eu testo. Muito obrigado.
KERPLUNK 25/07/2012 16:08:38
#406581
Bem, pelo que entendi, [Ô]2012/07/25 15:13 System Area Access granted on door User Code 4 [Ô] é o que a placa envia para a aplicação, correto?
ROGERIOAZEVEDO 25/07/2012 16:11:32
#406582
Pensei em fazer um SPLIT por espaço, mas não sei como inserir esses resultados em um GRID.
KERPLUNK 25/07/2012 16:14:40
#406583
O Split, era justamente o que tinha em mente, mas ele funciona melhor quando existe um caracter que separa os [Ô]campos[Ô], no caso, o TAB... mas pelo que estou vendo, o que você recebe, é texto com espaçamento fixo então o melhor é usar substrings.
ROGERIOAZEVEDO 25/07/2012 16:22:18
#406584
E se o espaçamento for fixo em um espaço? Estou pesquisando na net um exemplo de split com espaço. Olhe abaixo o código que eu estava pesquisando. De qualquer forma eu sou amador, e sinceramente não entendo muito de string o que vc me disser ser a melhor solução acatarei de imediato.

Private Sub btnAplicarSplit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAplicarSplit.Click
[ô] Vamos separar esta string
Dim str As String = txtStringEntrada.Text

[ô] Separa string baseado em spaços
Dim palavras As String() = str.Split(New Char() {[Ô] [Ô]c})

[ô] Percorremos as palavras da strings separadas exibindo-as no ListBox
Dim palavra As String
For Each palavra In palavras
lstResultado.Items.Add(palavra)
Next
End Sub
ROGERIOAZEVEDO 25/07/2012 16:35:15
#406586
é ficou meio zuado, pois existe mais de uma espaço em uma das sentenças, e ainda a descrição há palavras que são separadas por espaço. Coloquei os resultados em uma list box para testar.

Não teria problema para mim se eu conseguisse pegar as informações do PRINT e jogar dentro do GRID da seguinte forma:

Data Hora Descricao Usuario Porta
2012/07/25 15:13 Granted 4 2
KERPLUNK 25/07/2012 16:37:21
#406587
Uma coisa que você poderia fazer, é verificar todas as respostas da placa, se o número de espaços é o mesmo entre os campos.
ROGERIOAZEVEDO 25/07/2012 16:39:32
#406588
Sim no geral a resposta vai ser sempre essa:

2012/07/25 15:13 System Area Access granted on door User Code 4
2012/07/25 15:13 System Area Access granted on door Door 2

Será que da pra fazer o Split pelo Length, a unida coisa que mudará ó o final, tipo Door 5 ou User Code 15
Página 1 de 3 [29 registro(s)]
Tópico encerrado , respostas não são mais permitidas