Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

DonaZefinha

Problemas com Classe e Coleção no VB.Net

Recommended Posts

Olá pessoal estou com grandes problemas ao programar classe e coleção no Visual Basic.Net.

Foram criadas duas classes:

- Classe: CLS_Produto;

- Coleção: COL_Produtos;

- Módulo: CaixaBranca (O CaixaBranca é utilizado para testar os códigos).

Ao realizar o teste no Caixa Branca o mesmo está me retornando a seguinte mensagem de erro:

 

"Expression is of type 'Automoveis.COL_Produtos', which is not a collection type."

 

Segue abaixo o código:

 

- Classe:

Option Explicit On

 

Public Class CLS_Produto

 

Private mvarIdProduto As Long

Private mvarNome As String

Private mvarIdFabricante As Long

Private mvarIdCor As Long

Private mvarChassi As String

Private mvarDataFabricacao As Date

Private mvarQtdePortas As Integer

Private mvarFabricante As CLS_Fabricante

Private mvarCor As CLS_Cor

 

Public Property id_produto() As Long

 

Get

 

id_produto = mvarIdProduto

 

End Get

 

Set(ByVal vData As Long)

 

mvarIdProduto = vData

 

End Set

 

End Property

 

Public Property nome() As String

 

Get

 

nome = mvarNome

 

End Get

 

Set(ByVal vData As String)

 

mvarNome = vData

 

End Set

 

End Property

 

Public Property id_fabricante() As Long

 

Get

 

id_fabricante = mvarIdFabricante

 

End Get

 

Set(ByVal vData As Long)

 

mvarIdFabricante = vData

 

End Set

 

End Property

 

Public Property id_cor() As Long

 

Get

 

id_cor = mvarIdCor

 

End Get

 

Set(ByVal vData As Long)

 

mvarIdCor = vData

 

End Set

 

End Property

 

Public Property chassi() As String

 

Get

 

chassi = mvarChassi

 

End Get

 

Set(ByVal vData As String)

 

mvarChassi = vData

 

End Set

 

End Property

 

Public Property data_fabricacao() As Date

 

Get

 

data_fabricacao = mvarDataFabricacao

 

End Get

 

Set(ByVal vData As Date)

 

mvarDataFabricacao = vData

 

End Set

 

End Property

 

Public Property quantidade_portas() As Integer

 

Get

 

quantidade_portas = mvarQtdePortas

 

End Get

 

Set(ByVal vData As Integer)

 

mvarQtdePortas = vData

 

End Set

 

End Property

 

Public Property Fabricante() As CLS_Fabricante

 

Get

 

If mvarFabricante Is Nothing Then

 

mvarFabricante = New CLS_Fabricante

 

mvarFabricante.obterRegistro(Me.id_fabricante)

 

Fabricante = mvarFabricante

 

End If

 

End Get

 

Set(ByVal vData As CLS_Fabricante)

 

mvarFabricante = vData

 

End Set

 

End Property

 

Public Property Cor() As CLS_Cor

 

Get

 

If mvarCor Is Nothing Then

 

mvarCor = New CLS_Cor

 

mvarCor.obterRegistro(Me.id_cor)

 

Cor = mvarCor

 

End If

 

End Get

 

Set(ByVal vData As CLS_Cor)

 

mvarCor = vData

 

End Set

 

End Property

 

Public Sub lerRegistro(ByVal prmDados As Object)

 

id_produto = prmDados("idProduto")

 

nome = prmDados("Nome")

 

id_fabricante = prmDados("idFabricante")

 

id_cor = prmDados("idCor")

 

chassi = prmDados("chassi")

 

data_fabricacao = prmDados("dataFabricacao")

 

quantidade_portas = prmDados("qtdePortas")

 

End Sub

 

Public Function obterRegistro(ByVal prmIdentificador As Long)

 

AbreConexao()

 

Dim vlCmd As System.Data.OleDb.OleDbCommand

 

Dim vlRs As System.Data.OleDb.OleDbDataReader

 

vlCmd = New System.Data.OleDb.OleDbCommand("SELECT * FROM Produtos WHERE idProduto =" & prmIdentificador, vgCon)

 

vlRs = vlCmd.ExecuteReader()

 

vlRs.Read()

 

lerRegistro(vlRs)

 

vlRs.Close()

 

vlRs = Nothing

 

FechaConexao()

 

End Function

 

End Class

 

 

- Coleção:

Option Explicit On

Public Class COL_Produtos

 

Private mCol As New System.Collections.Hashtable

 

Public Function Add(ByVal prmProduto As CLS_Produto) As CLS_Produto

 

Dim objNewMember As CLS_Produto

 

objNewMember = New CLS_Produto

 

objNewMember = prmProduto

 

mCol.Add(CStr(prmProduto.id_produto), objNewMember)

 

Add = objNewMember

 

objNewMember = Nothing

 

End Function

 

Public Function obterColecaoRegistros()

 

AbreConexao()

 

Dim clsProduto As CLS_Produto

 

Dim vlCmd As System.Data.OleDb.OleDbCommand

 

Dim vlRs As System.Data.OleDb.OleDbDataReader

 

vlCmd = New System.Data.OleDb.OleDbCommand("SELECT * FROM Produtos", vgCon)

 

vlRs = vlCmd.ExecuteReader()

 

Do While vlRs.Read

 

clsProduto = New CLS_Produto

 

clsProduto.lerRegistro(vlRs)

 

Me.Add(clsProduto)

 

Loop

 

vlRs.Close()

 

vlRs = Nothing

 

FechaConexao()

 

End Function

 

End Class

 

 

- CaixaBranca:

Option Explicit On

 

Module CaixaBranca

 

Sub Main()

 

Dim vlTeste As CLS_Produto

 

Dim vlTestes As COL_Produtos

 

Dim i As Long

 

vlTeste = New CLS_Produto

 

vlTestes = New COL_Produtos

 

vlTestes.obterColecaoRegistros()

 

For Each vlTeste In vlTestes --------------> "O erro acontece aqui na coleção."

 

Debug.WriteLine(vlTeste.id_produto & " - " & vlTeste.nome & " - " & _

 

vlTeste.Fabricante.nome & " - " & vlTeste.Cor.nome & " - " & _

 

vlTeste.chassi & " - " & vlTeste.data_fabricacao & " - " & _

 

vlTeste.quantidade_portas)

 

Next

 

vlTeste = Nothing

 

vlTestes = Nothing

 

End Sub

 

End Module

 

Sem mais,

Aguardo respostas.

 

Alex.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você deveria implementar a interface ICollection na classe que é uma coleção, não?Abraços,Graymalkin

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você deveria implementar a interface ICollection na classe que é uma coleção, não?

 

Abraços,

 

Graymalkin

 

Eu cheguei a implementar a Interface ICollection mas ele está apresentando a seguinte mensagem de erro:

 

Option Explicit On

 

Public Class COL_Produtos implements System.Collections.ICollection

 

END OF STATEMENT EXPECTED

 

Aguardo respostas!

 

Abraços

 

Alex - DonaZefinha

Compartilhar este post


Link para o post
Compartilhar em outros sites

A linha do Implements é embaixo da linha do Class, e não na mesma linha.

 

Public Class COL_Produtos 	Implements System.Collections.ICollectionEnd Class
Abraços,

 

Graymalkin

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.