Archief - [PROG][VB.NET] Data ophalen via andere class

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Neuskeutel

Legacy Member
Stel, ik heb een form waar ik in een tekstveld data uit een Access database wil laten verschijnen. De data moet echter opgehaald worden via een andere klasse zodat ook andere forms hier gebruik kunnen van maken.

frmKlanten is de form waar de data moet komen in een textbox (txtKLID)
Hier mijn code in frmKlanten:
Code:
Imports System.Data.oledb

Public Class frmKlanten
    Inherits System.Windows.Forms.Form


#Region " Windows Form Designer generated code "


    Private Sub frmKlanten_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim MycKlant As New cKlant
        MycKlant.SELECT_Klant()

        Me.txtKLID.DataBindings.Add(New System.Windows.Forms.Binding("Text", Me.ds, "Klant.KLID"))

    End Sub
End Class

Hier dan de code die aangeroepen wordt uit de eerste form. Deze staat in de klasse cKlant :
Code:
Imports System.Data.OleDb

Public Class cKlant
    

    Public Shared Function SELECT_Klant()
        

        Dim cnDatabase As OleDbConnection
        Dim ODBcmd As OleDbCommand
        Dim sSQL As String
        Dim ds As DataSet

        cnDatabase = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Database.mdb;Persist Security Info=False")

        Dim ODBDA As New OleDbDataAdapter
        ODBDA.TableMappings.Add("Klant", "Klant")

        cnDatabase.Open()

        sSQL = "SELECT * FROM Klant ORDER BY KLID"
        ODBcmd = New OleDbCommand(sSQL, cnDatabase)

        ODBDA.SelectCommand = ODBcmd
        ds = New DataSet("Klant")


        ODBDA.Fill(ds)
        cnDatabase.Close()
        Return ds

    End Function

End Class


Ik krijg als error 'ds' is not a member of 'Beheer_Winkelgegevens.frmKlanten' en weet niet echt wat er aan te doen.
Het zal wel iets te maken hebben met het feit dat de dataset aangemaakt werd in cKlanten en dat daarom frmKlanten die niet wil aanvaarden ofzo, aangezien er een blauw lijntje staat onder me.ds uit de laatste regel code in frmKlanten.

Om de code overzichtelijk te houden heb ik het hier beperkt tot één textbox, normaal zijn er wel wat meer.

Wie kan helpen?
Alvast bedankt!

Kn0t

Legacy Member
in cKlant:

Public Shared Function SELECT_Klant() as DataSet

De dataset moet teruggegeven worden vanuit die methode.

In je form:

Dim ds As DataSet = MycKlant.SELECT_Klant()

Je hoeft ook geen instantie aan te maken van cKlant, aangezien die methode Shared is. Je kan gewoon cKlant.SELECT_Klant() doen.

Neuskeutel

Legacy Member
Merci! Zo werkt het inderdaad.
Nu heb ik enkel het probleem wanneer ik door de data wil navigeren via een knop next, dan krijg ik deze error:

An unhandled exception of type 'System.ArgumentException' occurred in system.windows.forms.dll

Additional information: Cannot create a child list for field Klant.


Deze code staat in m'n form:
Code:
Private Sub btnKlantNext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnKlantNext.Click

        BindingContext(ds, "Klant").Position = BindingContext(ds, "Klant").Position + 1

    End Sub
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan