CONSULTA SQL / VB.NET

SANROMAN 09/05/2014 17:40:36
#438048
Olá amigos,

Tenho um campo texto que, ao perder foco, deve verificar através de um consulta sql se o número inserido é válido. Esse número está em duas colunas da tabela, coluna NumeroInicial e coluna NumeroFinal. O código que estou usando segue abaixo:

Private Sub txtNumeroCheque_LostFocus(sender As Object, e As EventArgs) Handles txtNumeroCheque.LostFocus

Dim numCheque As Integer = Val(txtNumeroCheque.Text)
Dim sqlCon As New SqlConnection(strCmd)
Dim strSql As String = [Ô]SELECT Numerofinal FROM TB_TalaoCheques WHERE NumeroFinal <= [ô][Ô] & numCheque & [Ô][ô][Ô]
Dim sqlCmd As New SqlCommand(strSql, sqlCon)
Dim dr As SqlDataReader

Try

sqlCmd.Connection.Open()
dr = sqlCmd.ExecuteReader

If dr.HasRows Then

dr.Read()

If numCheque > dr([Ô]NumeroFinal[Ô]).ToString Then

MsgBox([Ô]Essa numeração não faz parte dos TALÕES HABILITADOS.[Ô] + _
vbCrLf + [Ô]HABILITE o TALÃO para continuar a cadastrar.[Ô], vbInformation, [Ô]ATENÇAO[Ô])

txtNumeroCheque.Focus()
txtNumeroCheque.Text = String.Empty

dr.Close()

End If

End If

Catch ex As Exception

End Try

If txtNumeroCheque.Text <= 0 Then

MsgBox([Ô]O NUMERO DO CHEQUE não pode ser igual ou menor que zero[Ô], vbInformation, [Ô]ATENÇÃO[Ô])
txtNumeroCheque.Focus()
txtNumeroCheque.Text = String.Empty

End If

End Sub

Funciona em parte. Ao inserir um número, no textbox, maior que o número contido na coluna NumeroFinal aciona uma Mensagem, até ai tudo bem.

Não consigo inserir uma consulta que também leve em conta o menor número da coluna NumeroInicial e também de uma coluna Habilitado no sql que e Sim ou Não.

Gostaria de construir uma consulta que levasse em conta ao inserir o número na textbox:

1 - Se o número for menor que o menor número da coluna NumeroInicial disparasse a Mensagem;

2 - Se o numero for maior que o maior número da coluna NumeroFinal disparasse a Mensagem, e

3 - Se a Coluna Habilitado estiver em [Ô]Não[Ô] disparasse a mensagem.

Desde já agradeço a ajuda.

NILSONTRES 09/05/2014 23:16:53
#438049
A pesquisa deve ser de outra forma:
Mas vamos la.
[Ô]SELECT Colunas FROM TB_TalaoCheques WHERE NumeroInicial >= [Ô] & numCheque & [Ô] And NumeroFinal <= [Ô] & numCheque & [Ô] And Habilitado=True[Ô]
Se os campos NumeroInicial e NumeroFinal forem numericos, retire os apostrofes, como no meu exemplo, se eles não são, deveriam ser,
se não, a Sql não ira funcionar no critério > e < .
como vc colocou apostrofes, fiquei na duvida agora.


SANROMAN 11/05/2014 14:04:12
#438085
Olá NILSONTRES


Montei a consulta como você me indicou e não deu resultado, aceita qualquer número.

Os dois campos são numéricos. O campo Habilitado e texto. Sim ou Não

Tirei o código de LostFocus e criei um private. Ficou assim:

Private Sub validaCheque()

Dim numCheque As Integer = Val(txtNumeroCheque.Text)
Dim sqlCon As New SqlConnection(strCmd)
Dim strSql As String = [Ô]SELECT NumeroInicial, NumeroFinal, Habilitado FROM TB_TalaoCheques WHERE Habilitado = [ô]Sim[ô][Ô]
Dim sqlCmd As New SqlCommand(strSql, sqlCon)
Dim dr As SqlDataReader

Try

sqlCmd.Connection.Open()
dr = sqlCmd.ExecuteReader

If dr.HasRows Then

dr.Read()

If numCheque.ToString < dr([Ô]NumeroInicial[Ô]).ToString Then

MsgBox([Ô]Essa numeração não faz parte dos TALÕES HABILITADOS.[Ô] + _
vbCrLf + [Ô]HABILITE o TALÃO para continuar a cadastrar1.[Ô], vbInformation, [Ô]ATENÇAO[Ô])

txtNumeroCheque.Focus()
txtNumeroCheque.Text = String.Empty


ElseIf numCheque.ToString > dr([Ô]NumeroFinal[Ô]).ToString Then

MsgBox([Ô]Essa numeração não faz parte dos TALÕES HABILITADOS.[Ô] + _
vbCrLf + [Ô]HABILITE o TALÃO para continuar a cadastrar2.[Ô], vbInformation, [Ô]ATENÇAO[Ô])

txtNumeroCheque.Focus()
txtNumeroCheque.Text = String.Empty

End If

dr.Close()

End If

sqlCon.Close()

Catch ex As Exception

End Try

If txtNumeroCheque.Text <= 0 Then

MsgBox([Ô]O NUMERO DO CHEQUE não pode ser igual ou menor que zero[Ô], vbInformation, [Ô]ATENÇÃO[Ô])

txtNumeroCheque.Focus()
txtNumeroCheque.Text = String.Empty

End If

sqlCon.Close()

End Sub

Está acontecendo o seguinte:

Se tenho só uma linha com o Campo Habilitado = Sim funciona perfeitamente.

Se tenho mais de uma linha com o campo Habilitado = Sim só pega o Numero Inicial e o Número final da primeira linha com o campo Habilitado = Sim.

Como posso resolver isso.

Feliz dia das mães.


SANROMAN 23/05/2014 13:36:18
#438449
Boa Tarde.

Consegui resolver.

ficou assim:

Private Sub txtNumeroCheque_LostFocus(sender As Object, e As EventArgs) Handles txtNumeroCheque.LostFocus

Dim numcheque As Double = txtNumeroCheque.Text
Dim nomeBanco As String = cbBancoCheque.Text
Dim habilitado As String = cbCompensadoCheque.Text
Dim sqlCon As New SqlConnection(strCmd)
Dim strSql As String = [Ô]SELECT * FROM TB_TalaoCheques where Banco = [ô][Ô] & nomeBanco & [Ô][ô] and Habilitado <> [ô][Ô] & habilitado & [Ô][ô] and NUmeroInicial <= [Ô] & numcheque & [Ô] and NUmeroFinal >= [Ô] & numcheque & [Ô][Ô]
Dim sqlCmd As New SqlCommand(strSql, sqlCon)
Dim dr As SqlDataReader
Dim ds As New DataSet

Try

sqlCmd.Connection.Open()
dr = sqlCmd.ExecuteReader

dr.Read()

If dr.HasRows = True Then

TextBox1.Text = dr([Ô]NumeroInicial[Ô]).ToString
TextBox2.Text = dr([Ô]NumeroFinal[Ô]).ToString

End If

dr.Close()

Catch ex As Exception

End Try

If TextBox1.Text = [Ô][Ô] Then

MsgBox([Ô]Esse NÚMERO DE CHEQUE não tem relação com a numeração de TALÕES HABILITADOS.[Ô] + vbCrLf _
+ vbCrLf + [Ô]Habilite o TALÃO DE CHEQUES para continuar a cadastrar com essa numeração.[Ô], vbInformation, [Ô]TALÃO NÃO HABILITADO[Ô])

txtNumeroCheque.Focus()

ElseIf numcheque < TextBox1.Text Or numcheque > TextBox2.Text Then

MsgBox([Ô]Esse NÚMERO DE CHEQUE não tem relação com a numeração de TALÕES HABILITADOS.[Ô] + vbCrLf _
+ vbCrLf + [Ô]Habilite o TALÃO DE CHEQUES para continuar a cadastrar com essa numeração.[Ô], vbInformation, [Ô]TALÃO NÃO HABILITADO[Ô])

txtNumeroCheque.Focus()

End If

sqlCon.Close()

End Sub

Valeu pela ajuda.
Tópico encerrado , respostas não são mais permitidas