DUVIDA DATAREADER
bom dia a todos
Estou iniciando agora na programação VB.NET, migrando do Delphi na verdade e estou com algumas duvidas referentes ao datareader
estou tentando verificar antes de inserir um registro se o mesmo ja consta no banco de dados, no caso impedir a duplicidade segue abaixo como esotu fazendo:
Private Sub verDuplicidade()
strSQL = [Ô]SELECT descricao,situacao[Ô]
strSQL = strSQL & [Ô] FROM Cliente [Ô]
strSQL = strSQL & [Ô] where codCliente=[Ô] & Me.txtCodigo.Text
Dim dr As IDataReader = conexao.ReturnDataReader(strSQL)
dr.Read()
If ((dr([Ô]descricao[Ô]).ToString().Trim() <> [Ô][Ô]) And (txtCodigo.Text <> dr([Ô]codigo[Ô]).ToString().Trim())) = [Ô][Ô] Then
MessageBox.Show([Ô]registro duplucado[Ô])
End If
End Sub
da o seguinte erro Tentativa inválida de leitura quando não existem dados.
outro problema que gostaria de verifiar e se algum registro foi encontrado no delphi eu fazia cds.RecordCount até pesquisei sobre uma funcao hasRows mais nao funcionou, tenho que importar alguma biblioteca para utiliza-la?
desde de ja agradeço a quem poder ajudar
abraço
Estou iniciando agora na programação VB.NET, migrando do Delphi na verdade e estou com algumas duvidas referentes ao datareader
estou tentando verificar antes de inserir um registro se o mesmo ja consta no banco de dados, no caso impedir a duplicidade segue abaixo como esotu fazendo:
Private Sub verDuplicidade()
strSQL = [Ô]SELECT descricao,situacao[Ô]
strSQL = strSQL & [Ô] FROM Cliente [Ô]
strSQL = strSQL & [Ô] where codCliente=[Ô] & Me.txtCodigo.Text
Dim dr As IDataReader = conexao.ReturnDataReader(strSQL)
dr.Read()
If ((dr([Ô]descricao[Ô]).ToString().Trim() <> [Ô][Ô]) And (txtCodigo.Text <> dr([Ô]codigo[Ô]).ToString().Trim())) = [Ô][Ô] Then
MessageBox.Show([Ô]registro duplucado[Ô])
End If
End Sub
da o seguinte erro Tentativa inválida de leitura quando não existem dados.
outro problema que gostaria de verifiar e se algum registro foi encontrado no delphi eu fazia cds.RecordCount até pesquisei sobre uma funcao hasRows mais nao funcionou, tenho que importar alguma biblioteca para utiliza-la?
desde de ja agradeço a quem poder ajudar
abraço
Tente assim.:
While dr.Read()
If (dr(0).ToString().Trim() <> [Ô][Ô]) And (dr(1).ToString().Trim() <> [Ô][Ô]) Then
MessageBox.Show([Ô]registro duplucado[Ô])
End If
End While
Para não duplicar eu costumo utilizar um Select na tabela e verificar se ela me trouxe algum registro.
Veja exemplo em Aceess
[ô]Definindo uma consulta
Dim sql As String = ([Ô]SELECT Codigo FROM tbl_TmpVendas WHERE Codigo=?[Ô])
Dim cmd As OleDbCommand = New OleDbCommand(sql, conn)
[ô]Carregando o parametro da consulta
cmd.Parameters.Add(New OleDb.OleDbParameter([Ô]Codigo[Ô], lngCodigo))
[ô]Definindo o DataAdapter
Dim da As OleDbDataAdapter = New OleDbDataAdapter(cmd)
[ô]Definindo o DataTable
Dim dt As DataTable = New DataTable
[ô]Populando o DataTable
da.Fill(dt)
[ô]Se a consulta me trouxer registros o item existe!
If dt.Rows.Count > 0 Then
If (MsgBox([Ô]O produto [Ô] & strProdut & [Ô] [Ô] & strClasse & [Ô], já está cadastrado para essa venda![Ô] & vbCrLf & _
[Ô]Deseja substituir o item lançado?[Ô], MsgBoxStyle.YesNo + MsgBoxStyle.Information) = MsgBoxResult.Yes) Then
EditItemVendaTmp(lngCodigo, strProdut, strClasse, lngQtd, dblVlrUni, dblVlrTot)
End If
Else
AddItemVendaTmp(lngCodigo, strProdut, strClasse, lngQtd, dblVlrUni, dblVlrTot)
End If
Acho que isso tb responde em parte a sua segunda pergunta.
Abraço
Veja exemplo em Aceess
[ô]Definindo uma consulta
Dim sql As String = ([Ô]SELECT Codigo FROM tbl_TmpVendas WHERE Codigo=?[Ô])
Dim cmd As OleDbCommand = New OleDbCommand(sql, conn)
[ô]Carregando o parametro da consulta
cmd.Parameters.Add(New OleDb.OleDbParameter([Ô]Codigo[Ô], lngCodigo))
[ô]Definindo o DataAdapter
Dim da As OleDbDataAdapter = New OleDbDataAdapter(cmd)
[ô]Definindo o DataTable
Dim dt As DataTable = New DataTable
[ô]Populando o DataTable
da.Fill(dt)
[ô]Se a consulta me trouxer registros o item existe!
If dt.Rows.Count > 0 Then
If (MsgBox([Ô]O produto [Ô] & strProdut & [Ô] [Ô] & strClasse & [Ô], já está cadastrado para essa venda![Ô] & vbCrLf & _
[Ô]Deseja substituir o item lançado?[Ô], MsgBoxStyle.YesNo + MsgBoxStyle.Information) = MsgBoxResult.Yes) Then
EditItemVendaTmp(lngCodigo, strProdut, strClasse, lngQtd, dblVlrUni, dblVlrTot)
End If
Else
AddItemVendaTmp(lngCodigo, strProdut, strClasse, lngQtd, dblVlrUni, dblVlrTot)
End If
Acho que isso tb responde em parte a sua segunda pergunta.
Abraço
Muito obrigado pela força rapaziada!
vou testar
abraço!
vou testar
abraço!
E ai... Conseguiu?
Citação::
E ai... Conseguiu?
Function verDuplicidade(ByVal id As Integer) As Boolean
strSQL = [Ô]SELECT cdCliente,descricao[Ô] & Chr(13) & Chr(10)
strSQL = strSQL & [Ô] FROM Cliente [Ô] & Chr(13) & Chr(10)
strSQL = strSQL & [Ô] where Cliente.descricao = [Ô] & txtDescricao.Text & Chr(13) & Chr(10)
Dim dr As IDataReader = conexao.ReturnDataReader(strSQL)
Dim cont As Integer = 0
dr.Read()
While dr.Read()
If (dr(0).ToString().Trim() <> [Ô][Ô]) And (dr(1).ToString().Trim() <> [Ô][Ô]) Then
Return True
End If
End While
Jonathan até consegui só que está acontecendo o seguiente, só esta acusando duplicidade quando tem dois registros incluso, por exemplo se eu tenho cadastrado
[txt-color=#007100]cd_cliente = 1
descricao = teste [/txt-color]
e tento incluir outro registro
[txt-color=#007100]cd_cliente = 2
descricao = teste [/txt-color]
o registro é incluÃdo normalmente, só quando eu vou incluir o 3o registro que acusa duplicidade.
[txt-color=#007100]cd_cliente = 3
descricao = teste[/txt-color]
sabe me dizer o que pode ser ? ou o que eu posso fazer ?
Tente assim.:
If dr.Rows.Count > 0 Then
Return True
End If
Citação::
Tente assim.:If dr.Rows.Count > 0 Then
Return True
End If
Jonathan, aparece esse erro
[txt-color=#007100][Ô]Rows is not a member if [ô]System.Data.IDataReader[ô] [/txt-color]
Realmente não funcionará!
O método Rows é para um DataTable.
Assim é o correto.
O método Rows é para um DataTable.
Assim é o correto.
If dr.Read Then
Return True
End If
Citação::
Realmente não funcionará!
O método Rows é para um DataTable.
Assim é o correto.If dr.Read Then
Return True
End If
huashuashu, deu certo
Muito Obrigado pela atenção Jonathan
Tópico encerrado , respostas não são mais permitidas