DUVIDA DATAREADER

XICOBUTIA 13/04/2011 21:54:16
#371275
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

JONATHANSTECKER 13/04/2011 23:24:32
#371280
Resposta escolhida
Tente assim.:
        While dr.Read()
If (dr(0).ToString().Trim() <> [Ô][Ô]) And (dr(1).ToString().Trim() <> [Ô][Ô]) Then
MessageBox.Show([Ô]registro duplucado[Ô])
End If
End While
MITSUEDA 14/04/2011 08:24:04
#371285
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
XICOBUTIA 14/04/2011 17:38:39
#371351
Muito obrigado pela força rapaziada!

vou testar

abraço!
JONATHANSTECKER 15/04/2011 23:40:16
#371518
E ai... Conseguiu?
XICOBUTIA 18/04/2011 08:47:13
#371634

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 ?
JONATHANSTECKER 18/04/2011 09:09:32
#371642
Tente assim.:
If dr.Rows.Count > 0 Then
Return True
End If
XICOBUTIA 18/04/2011 09:58:05
#371655
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]

JONATHANSTECKER 18/04/2011 10:02:11
#371658
Realmente não funcionará!
O método Rows é para um DataTable.

Assim é o correto.
If dr.Read Then
Return True
End If
XICOBUTIA 18/04/2011 10:28:39
#371669
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