I need to link an access database to my visual vasic express 2008 class i have made (as been set an object orientated project) but am struggling to link the database and get it to show the information from the database through the class to the product form.

I'll attach what code i have done (i have 2 different lots as one i tried to follow another one on the internet, but just ended up confusing myself (as im a fairly basic amateur))

The one i have tried myself looks as follows:

Public Class clsItems

    Dim cn As New ADODB.Connection
    Dim RS As New ADODB.Recordset
    
    Private xProduct_id As Integer
    Private xName As String
    Private xDescription As String
    Private xPrice As Integer
    Private xCategory As String
    Private xMake As String

    Public Sub SetProduct_id(ByVal xProduct As Integer)

        xProduct_id = xProduct

    End Sub

    Public Function GetProduct_id() As Integer

        GetProduct_id = xProduct_id

    End Function

    Public Sub SetName(ByVal xNew As String)

        xName = xNew
    End Sub

    Public Function GetName() As String

        GetName = xName

    End Function

    Public Sub SetDescription(ByVal xDesc As String)

        xDescription = xDesc
    End Sub

    Public Function GetDescription() As String

        GetDescription = xDescription

    End Function

    Public Sub SetPrice(ByVal xPri As Integer)

        xPrice = xPri
    End Sub

    Public Function Getprice() As Integer

        Getprice = xPrice
    End Function

    Public Sub SetCategory(ByVal xCat As String)

        xCategory = xCat

    End Sub

    Public Function Getcategory() As String

        Getcategory = xCategory

    End Function

    Public Sub SetMake(ByVal xMa As String)

        xMake = xMa
    End Sub

    Public Function Getmake() As String
        Getmake = xMake
    End Function

    Public Function FetchData() As Object

        ' GetProduct_id = RS.Fields("Product_id").Value



    End Function

End Class

For some reason we were shown to do the set and get methods like that, but don't quite see what they do.. I get to the point with the fetchdata and just end up with an error 'Expression is a value and therefore cannot be a target of an assignment'

The other attempt i have made (by following an example):

Public Class Class1

    Dim cn As New ADODB.Connection
    Dim RS As New ADODB.Recordset

    Private xName As String
    Private xDescription As String
    Private xPrice As Integer
    Private xCategory As String
    Private xMake As String

    Public Property Name() As String
        Get

            Name = xName


        End Get

        Set(ByVal Value As String)


            xName = Value
        End Set
    End Property

    Public Property Description() As String
        Get

            Description = xDescription

        End Get
        Set(ByVal value As String)

            xDescription = value

        End Set
    End Property

    Public Property Price() As String
        Get
            Price = xPrice
        End Get
        Set(ByVal value As String)

            xPrice = value

        End Set
    End Property

    Public Property Category() As String
        Get
            Category = xCategory

        End Get
        Set(ByVal value As String)

            xCategory = value

        End Set
    End Property

    Public Property Make() As String
        Get
            Make = xMake
        End Get
        Set(ByVal value As String)

            xMake = value

        End Set
    End Property

    Public Function FetchData() As Object

        Name = RS.Fields("Name").Value
        Description = RS.Fields("Description").Value
        Price = RS.Fields("Price").Value
        Category = RS.Fields("Category").Value
        Make = RS.Fields("Make").Value

    End Function

    Private Sub Class_Initialise()

        cn = New ADODB.Connection

        RS = New ADODB.Recordset

        cn.Provider = "Microsoft.Jet.OLEDB.3.51"

        cn.ConnectionString = My.Application.Info.DirectoryPath & "\products.mdb"

        cn.Open()

        RS.Open("select * from [tbl_products]", cn, ADODB.CursorTypeEnum.adOpenDynamic, ADODB.LockTypeEnum.adLockBatchOptimistic)


    End Sub

    Public Sub New()
        MyBase.New()
        Class_Initialise()
    End Sub

    Private Sub Class_Terminate()

        cn.Close()
        RS.Close()

    End Sub

    Protected Overrides Sub Finalize()
        Class_Terminate()
        MyBase.Finalize()
    End Sub


This one seems to work slightly more succesfully with the program only saying 'use sub finalize to free resources' (this is what i thought the bit below class terminate did)??

The form im trying to link it to so far comnprises of;

Public x As New Class1



    Private Sub Label3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)


        x.FetchData()
        txtname.Text = x.Name
        txtdes.Text = x.Description
        txtprice.Text = x.Price
        txtprod.Text = x.Name
        txtmake.Text = x.Make

Where i thought making the text boxes on the form equal to the coinciding bits of the class would work..

If anybody can see where the problems occur or ways in which to solve them then that would be excellent and much appreciated as currently im getting very stressed trying to work this program out

Thanks

Bob

p.s. there is probably a better way to show the code on here, and i understand my codeing is probably very messy but as i say im an amateur, any advice is thankfully received

Edited 5 Years Ago by __avd: Added [code] tags.

The bit vb 2008 highlights when i attempt to run it is

cn.ConnectionString = My.Application.Info.DirectoryPath & "\products.mdb"

cn.Open()

Could this be down to the path im telling it to open is wrong? how can i tell

Sorry didn't realise the code was better inside these coce brackets, so have done that for you now


My try:

Public Class clsItems

Dim cn As New ADODB.Connection
Dim RS As New ADODB.Recordset

Private xProduct_id As Integer
Private xName As String
Private xDescription As String
Private xPrice As Integer
Private xCategory As String
Private xMake As String

Public Sub SetProduct_id(ByVal xProduct As Integer)

xProduct_id = xProduct

End Sub

Public Function GetProduct_id() As Integer

GetProduct_id = xProduct_id

End Function

Public Sub SetName(ByVal xNew As String)

xName = xNew
End Sub

Public Function GetName() As String

GetName = xName

End Function

Public Sub SetDescription(ByVal xDesc As String)

xDescription = xDesc
End Sub

Public Function GetDescription() As String

GetDescription = xDescription

End Function

Public Sub SetPrice(ByVal xPri As Integer)

xPrice = xPri
End Sub

Public Function Getprice() As Integer

Getprice = xPrice
End Function

Public Sub SetCategory(ByVal xCat As String)

xCategory = xCat

End Sub

Public Function Getcategory() As String

Getcategory = xCategory

End Function

Public Sub SetMake(ByVal xMa As String)

xMake = xMa
End Sub

Public Function Getmake() As String
Getmake = xMake
End Function

Public Function FetchData() As Object

' GetProduct_id = RS.Fields("Product_id").Value



End Function

End Class

My 2nd attempt:

Public Class Class1

Dim cn As New ADODB.Connection
Dim RS As New ADODB.Recordset

Private xName As String
Private xDescription As String
Private xPrice As Integer
Private xCategory As String
Private xMake As String

Public Property Name() As String
Get

Name = xName


End Get

Set(ByVal Value As String)


xName = Value
End Set
End Property

Public Property Description() As String
Get

Description = xDescription

End Get
Set(ByVal value As String)

xDescription = value

End Set
End Property

Public Property Price() As String
Get
Price = xPrice
End Get
Set(ByVal value As String)

xPrice = value

End Set
End Property

Public Property Category() As String
Get
Category = xCategory

End Get
Set(ByVal value As String)

xCategory = value

End Set
End Property

Public Property Make() As String
Get
Make = xMake
End Get
Set(ByVal value As String)

xMake = value

End Set
End Property

Public Function FetchData() As Object

Name = RS.Fields("Name").Value
Description = RS.Fields("Description").Value
Price = RS.Fields("Price").Value
Category = RS.Fields("Category").Value
Make = RS.Fields("Make").Value

End Function

Private Sub Class_Initialise()

cn = New ADODB.Connection

RS = New ADODB.Recordset

cn.Provider = "Microsoft.Jet.OLEDB.3.51"

cn.ConnectionString = My.Application.Info.DirectoryPath & "\products.mdb"

cn.Open()

RS.Open("select * from [tbl_products]", cn, ADODB.CursorTypeEnum.adOpenDynamic, ADODB.LockTypeEnum.adLockBatchOptimistic)


End Sub

Public Sub New()
MyBase.New()
Class_Initialise()
End Sub

Private Sub Class_Terminate()

cn.Close()
RS.Close()

End Sub

Protected Overrides Sub Finalize()
Class_Terminate()
MyBase.Finalize()
End Sub

The form im trying to link to: think i need to include a collection but not sure

Public x As New Class1



Private Sub Label3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)


x.FetchData()
txtname.Text = x.Name
txtdes.Text = x.Description
txtprice.Text = x.Price
txtprod.Text = x.Name
txtmake.Text = x.Make
This article has been dead for over six months. Start a new discussion instead.