none
Problem Klassenzugriff - Module geht aber RRS feed

  • Frage

  • Hallo zusammen,

    ich habe ein kleines Problem und hoffe ihr könnt helfen.

    Vorneweg..im Modul funktioniert es, als Klassenlösung bekomme ich es nicht gebacken.

    Ich habe eine Klasse Grunddaten und eine Klasse Detaildaten.

    Ich fülle jetzt aus einer Form die Klassenfelder in Grunddaten und Detaildaten. Funktioniert auch.

    Jetzt will ich in einem dritten Schritt für ein LINQ Befehl die Daten aus den zwei Klassen abrufen.

    Irgendwie geht nicht...übersehe ich was?

    Public Class clsVertragGrunddaten
    
        Dim _AG_Name1 As String
        Public Property AG_Name1 As String
            Get
                Return _AG_Name1
            End Get
            Set(value As String)
                _AG_Name1 = value
            End Set
        End Property
    
    End Class
    
    Public Class clsDetaildaten
    
        Dim _Vertragsnummer As Integer
        Public Property Vertragsnummer As Integer
            Get
                Return _Vertragsnummer
            End Get
            Set(value As Integer)
                _Vertragsnummer = value
            End Set
        End Property
    
    End Class
    
    ' Prozedur beim Klick im Formular
    
        Private Sub Vertrag_Neu()
            Try
    
                modGrunddaten.AG_Name1 = tbName1.Text
    
                With _cGrund
                    .AG_Name2 = tbName2.Text
                End With
    
                _cVertrag.Vertrag_Neu()
    
                MsgBox("Gespeichert")
    
            Catch ex As Exception
                DevExpress.XtraEditors.XtraMessageBox.Show(ex.Message, "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End Try
    
        End Sub
    
    ' LINQ
        Dim _cGD As clsVertragGrunddaten
        '
        ' Neuer Eintrag
        Public Sub Vertrag_Neu()
    
            Dim _L2S As New L2VertragDataContext
            Dim _Eintrag As New  tbl####
            Dim _Dat As Date = Now
    
            With _Eintrag
                .AG_Name1 = modGrunddaten.AG_Name1 ' funktioniert
                .AG_Name1 = _cGD.AG_Name1 ' funktioniert nicht - Wert wird nicht übergeben
                .ErstelltAm = _Dat
            End With
    
            _L2S.tbl####.InsertOnSubmit(_Eintrag)
            _L2S.SubmitChanges()
    
        End Sub

    Vielleicht könnt ihr helfen?

    Danke schonmal. Gruß Daniel


    • Bearbeitet Stefan FalzModerator Mittwoch, 21. September 2022 08:46 Code über Code Button eingefügt
    Mittwoch, 21. September 2022 08:21

Antworten

  • Ich habs jetzt so gelöst:

    Ich weise den Klassen die Werte zu und übergebe an die LINQ Prozedur die Klasse

        Private _cGrund As New clsVertragGrunddaten
        Private _cDetail As New clsDetaildaten
    
        Private Sub Vertrag_Neu()
            Try
    
                With _cGrund
                    .AG_Name1 = tbName1.Text
                    .AG_Name2 = tbName2.Text
                End With
    
                With _cDetail
                    .Laufzeit_Jahre = tbLaufzeit.Text
                End With
    
                _cVertrag.LINQ_Eintrag_Neu(_cGrund, _cDetail)
    
                MsgBox("Gespeichert")
    
            Catch ex As Exception
                DevExpress.XtraEditors.XtraMessageBox.Show(ex.Message, "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End Try
    
        End Sub
    
        Public Sub LINQ_Eintrag_Neu(_GD As clsVertragGrunddaten, _DT As clsDetaildaten)
    
            Dim _Eintrag As New tbl_####
            Dim _Dat As Date = Now
    
            With _Eintrag
                .AG_Name1 = _GD.AG_Name1
                .AG_Name2 = _GD.AG_Name2
                .Laufzeit_Jahre = _DT.Laufzeit_Jahre
                .ErstelltAm = _Dat
            End With
    
            'L.tbl_###.InsertOnSubmit(_Eintrag)
            'L.SubmitChanges()
    
        End Sub


    • Bearbeitet Stefan FalzModerator Mittwoch, 21. September 2022 11:07 Code über Code Button eingefügt
    • Als Antwort vorgeschlagen Stefan FalzModerator Mittwoch, 21. September 2022 14:02
    • Als Antwort markiert DanWe1 Donnerstag, 22. September 2022 08:26
    Mittwoch, 21. September 2022 09:40

Alle Antworten

  • Hallo Daniel,

    in einem Module ist alles statisch, man kanndas also bspw. über

    <NameDesModules>.<NameDerEigenschaft>

    ansprechen. Bei einer Klasse geht das so nicht, da brauchst Du eine Istanz der Klasse.

    Dim _cGD AS New clsVertragsGrunddaten()

    würde da bspw. helfen.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport


    Mittwoch, 21. September 2022 08:49
    Moderator
  • Hallo Stefan,

    danke für die Antwort.

    Aber wo muss ich die neue Klasse instanzieren?

    Ich brauch ja eine Instanz schon im Formular das ich die Werte in die Klasse schreiben kann. Und dann will ich in der Klasse, sagen wir clsVerarbeitung in der Prozedur VertragNeu auf die Werte in der Klasse clsVertragGrunddaten zugreifen -die ich zuvor reingeschrieben habe

    Gruß Daniel

    Mittwoch, 21. September 2022 08:59
  • Ich habs jetzt so gelöst:

    Ich weise den Klassen die Werte zu und übergebe an die LINQ Prozedur die Klasse

        Private _cGrund As New clsVertragGrunddaten
        Private _cDetail As New clsDetaildaten
    
        Private Sub Vertrag_Neu()
            Try
    
                With _cGrund
                    .AG_Name1 = tbName1.Text
                    .AG_Name2 = tbName2.Text
                End With
    
                With _cDetail
                    .Laufzeit_Jahre = tbLaufzeit.Text
                End With
    
                _cVertrag.LINQ_Eintrag_Neu(_cGrund, _cDetail)
    
                MsgBox("Gespeichert")
    
            Catch ex As Exception
                DevExpress.XtraEditors.XtraMessageBox.Show(ex.Message, "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End Try
    
        End Sub
    
        Public Sub LINQ_Eintrag_Neu(_GD As clsVertragGrunddaten, _DT As clsDetaildaten)
    
            Dim _Eintrag As New tbl_####
            Dim _Dat As Date = Now
    
            With _Eintrag
                .AG_Name1 = _GD.AG_Name1
                .AG_Name2 = _GD.AG_Name2
                .Laufzeit_Jahre = _DT.Laufzeit_Jahre
                .ErstelltAm = _Dat
            End With
    
            'L.tbl_###.InsertOnSubmit(_Eintrag)
            'L.SubmitChanges()
    
        End Sub


    • Bearbeitet Stefan FalzModerator Mittwoch, 21. September 2022 11:07 Code über Code Button eingefügt
    • Als Antwort vorgeschlagen Stefan FalzModerator Mittwoch, 21. September 2022 14:02
    • Als Antwort markiert DanWe1 Donnerstag, 22. September 2022 08:26
    Mittwoch, 21. September 2022 09:40
  • Ich habs jetzt so gelöst:

    Ich weise den Klassen die Werte zu und übergebe an die LINQ Prozedur die Klasse

    Ja, das meinte ich mit dem kleinen Codebeispiel.

    Prima, dass es jetzt klappt.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Mittwoch, 21. September 2022 14:02
    Moderator