CONSULTA SQL / VB.NET
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.
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.
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.
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.
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.
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.
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.
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