Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Property XYZ() As DataTable, Aufruf von anderer Klasse bringt Fehler

Frage Entwicklung Visual Studio

Mitglied: PCFJKG

PCFJKG (Level 1) - Jetzt verbinden

21.07.2013, aktualisiert 22.07.2013, 1561 Aufrufe, 10 Kommentare

In einer Klasse ABC wird eine Datatable erzeugt, welche in mehreren Formularen genutzt werden soll. Gefunden habe ich bisher, dass diese Aufgabe über eine Property gelöst werden kann. Trotz Recherche im Netz (und gefundenen Beispielen) fehlt mir als "VBA-Mensch" offensichtlich ein grundlegender Zugang zu OOP.
In einer Klasse (keine Form-Klasse) wird eine Tabelle erzeugt und als Property veröffentlicht wie folgt (DR("D4") = 8 dient zum Test:

Public Class C_ABC

Public DTL As DataTable
Property XYZ() As DataTable
Get
Return DTL
End Get
Set(ByVal value As DataTable)
DTL = value
End Set
End Property

Function DynamischeTabelle()
Dim DR As DataRow
Dim i As Byte
' --- Erzeugen einer dynamischen Tabelle
XYZ = New DataTable("Tabellenbezeichnung")
For i = 1 To 10
DTL.Columns.Add("D" & i, System.Type.GetType("System.Byte"))
Next i
For i = 1 To 2
DR = DTL.NewRow()
DR("D4") = 8
DTL.Rows.Add(DR)
Next i
DTL.Dispose()

END CLASS

Nun soll das Formular F_Start den Inhalt von XYZ nutzen, hier zur Anzeige von DT.Rows(1)("D4").

Public Class F_Start

Private Sub Btn_Datatable_Click(sender As System.Object, e As System.EventArgs) Handles Btn_Datatable.Click
Dim CA As New C_ABC
Dim DT As DataTable

DT = CA.DTL
MsgBox(DT.Rows(1)("D4").ToString)
End Sub

End Class

Fehler: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

Wenn ich aber
CA.DynamischeTabelle () in einer Zeile vor DT = CA.DTL ausführe, funktioniert es.
Wo liegt das Problem ?

Vielen Dank für jede Hilfe

PCFJKG
Mitglied: colinardo
21.07.2013, aktualisiert um 11:26 Uhr
Hallo PCFJKG,
Das Problem ist bei deiner Klasse folgendes: wenn du ein Objekt deiner Klasse erzeugst ist die Datatable in deiner Klasse noch gar nicht erzeugt worden. Du musst also im Initializer(Public Sub New) deiner Klasse das Datatable-Objekt erzeugen damit es bei jedem erstellen eines neuen Objektes dieser Klasse automatisch erzeugt wird.

01.
Public Sub New() 
02.
   DynamischeTabelle() 
03.
End Sub
Grüße Uwe
Bitte warten ..
Mitglied: PCFJKG
21.07.2013 um 11:52 Uhr
Hallo Uwe,
erst einmal danke für die schnelle Antwort. Die dynamische Tabelle wird beim Start des Projektes mit dem Aufruf --> CA.DynamischeTabelle () erzeugt.
Erst danach clicke ich auf den Btn_Datatable im Formular. Es sollte doch dann auf die Tabelleninhalte der Datatable DTL - erzeugt in der Klasse C_ABC - ein Zugriff möglich sein oder ?

Viele Grüße

PCFJKG
Bitte warten ..
Mitglied: colinardo
21.07.2013 um 12:04 Uhr
Du kannst der Property mit dieser Zeile keine Datatable zuweisen:
01.
XYZ = New DataTable("Tabellenbezeichnung")
Schreib stattdessen
01.
DTL = New DataTable("Tabellenbezeichnung")
Du gibst die Public Variable DTL ja schon im GET Handler der Property zurück.
Bitte warten ..
Mitglied: PCFJKG
21.07.2013 um 12:17 Uhr
Hallo Uwe, das habe ich verstanden, geändert und kann die Änderung ohne Fehler in C_ABC debuggen, Jetzt bleibt nur noch die Frage, warum der Aufruf von DTL aus dem Startformular (Public Class F_Start) noch immer den Fehler: ... Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt ... bringt.
Viele Grüße
PCFJKG
Bitte warten ..
Mitglied: colinardo
21.07.2013 um 12:46 Uhr
Das habe ich doch oben schon geschrieben ; wenn du schon im Initialize Handler der Klasse C_ABC deine Datatable erzeugst brauchst du in deiner Form das Datatable-Objekt nicht erst mit CA.DynamischeTabelle() erzeugen, da es dann schon beim erstellen eines Objektes der Klasse C_ABC automatisch mit erzeugt wird.
Bitte warten ..
Mitglied: PCFJKG
21.07.2013 um 13:00 Uhr
Hallo Uwe, erst einmal danke für Deine Geduld und vor allem Deine schnellen Antworten. Vermutlich habe ich mich auch nicht ganz klar ausgedrückt, denn die DTL wird in der Form nicht erzeugt (nach meinem Verständnis), sondern lediglich ein Verweis (ist das der richtige Begriff ?) für den Zugriff auf die bereits in der der Klasse C_ABC erstellte Tabelle . Im Form selbst steht nur

Private Sub Btn_Datatable_Click(sender As System.Object, e As System.EventArgs) Handles Btn_Datatable.Click

Dim CA As New C_ABC
Dim DT As DataTable

DT = CA.DTL

erstellt, um dann die Testausgabe mit

MsgBox(DT.Rows(1)("D4").ToString)

End sub

aufzurufen. Dann kommt halt leider die Fehlermeldung ...

Vielleich hast Du trotzdem Lust, noch einmal zu antworten, auf jeden fall ist Deine schnelle Hilfe super.

Viele Grüße
PCFJKG
Bitte warten ..
Mitglied: colinardo
21.07.2013, aktualisiert um 13:28 Uhr
Code sagt mehr als 1000 Worte ...
In deiner Klasse liegt doch einiges im Argen. Schreib das ganze so um dann klappt das auch:

Deine Klasse C_ABC
01.
Public Class C_ABC 
02.
    Private DTL As DataTable 
03.
 
04.
    Public Sub New() 
05.
        DynamischeTabelle() 
06.
    End Sub 
07.
 
08.
   Public Property XYZ() As DataTable 
09.
        Get 
10.
            Return DTL 
11.
        End Get 
12.
        Set(ByVal value As DataTable) 
13.
            DTL = value 
14.
        End Set 
15.
    End Property 
16.
 
17.
    Private Sub DynamischeTabelle() 
18.
        Dim DR As DataRow 
19.
        Dim i As Byte 
20.
        ' --- Erzeugen einer dynamischen Tabelle 
21.
        DTL = New DataTable("Tabellenbezeichnung") 
22.
        For i = 1 To 10 
23.
            DTL.Columns.Add("D" & i, System.Type.GetType("System.Byte")) 
24.
        Next i 
25.
        For i = 1 To 2 
26.
            DR = DTL.NewRow() 
27.
            DR("D4") = 8 
28.
            DTL.Rows.Add(DR) 
29.
        Next i 
30.
    End Sub 
31.
End Class
und in deiner Form schreibst du folgendes:

01.
   Private Sub Btn_Datatable_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btn_Datatable.Click 
02.
        Dim CA As New C_ABC 
03.
        Dim DT As DataTable 
04.
        DT = CA.XYZ 
05.
        MsgBox(DT.Rows(1)("D4").ToString) 
06.
    End Sub
Wenn du den Code durchsiehst wird der Aha-Effekt schon kommen...

p.s. Bitte verwende in Zukunft Tags für das Posten von Programm-Code, merci..

Sonnigen Sonntag noch
Uwe
Bitte warten ..
Mitglied: PCFJKG
21.07.2013 um 13:37 Uhr
Hallo Uwe, es hat sofort funktioniert. Was soll ich sagen außer noch einmal vielen Dank ! Auch Dir einen schönen Sonn- und weitere schöne tage.
Herzliche Grüße
PCFJKG
Bitte warten ..
Mitglied: colinardo
22.07.2013 um 09:18 Uhr
noch bitte als gelöst markieren. Merci.
Bitte warten ..
Mitglied: PCFJKG
22.07.2013 um 12:26 Uhr
Ist soeben erfolgt, sorry. Nochmals vielen Dank und Grüße von
PCFJKG
Bitte warten ..
Ähnliche Inhalte
Visual Studio
Aufrufe von Klassen untereinander
gelöst Frage von MarcoBornVisual Studio7 Kommentare

Hallo Forum, in meinem Projekt habe ich folgendes Konstrukt: Eine Klasse "Import" besitzt eine Funktion "StatusfensterNeu", die ein Formular ...

Datenbanken
SQL restore bringt Fehler
Frage von franksigDatenbanken2 Kommentare

ch habe noch eine kleine Frage zum wochenende ich habe hier beim restore eine Fehlermeldung und bitte um hilfe. ...

Windows 7
GPRESULT bringt mir einen Fehler der nichts aussagt
Frage von Susie1703Windows 722 Kommentare

Hi an alle, ich habe folgendes Problem: wenn ich auf meinem PC ein GPresult mache bekomme ich einen Fehler, ...

Visual Studio
Sortierung von DataTable nach Select aufgelöst
Frage von ForgottenRealmVisual Studio1 Kommentar

Moinmoin, ich habe mehrere DataTables die ich beim Programmstart lade und die Daten im Hintergrund halte, um später darauf ...

Neue Wissensbeiträge
Batch & Shell

Open Object Rexx: Eine mittlerweile fast vergessene Skriptsprache aus dem Mainframebereich

Information von Penny.Cilin vor 21 StundenBatch & Shell9 Kommentare

Ich kann mich noch sehr gut an diese Skriptsprache erinnern und nutze diese auch heute ab und an noch. ...

Humor (lol)

"gimme gimme gimme": Automatischer Test stolpert über Easter Egg im man-Tool

Information von Penny.Cilin vor 23 StundenHumor (lol)6 Kommentare

Interessant, was man so alles als Easter Egg implementiert. Ist schon wieder Ostern? "gimme gimme gimme": Automatischer Test stolpert ...

MikroTik RouterOS

Mikrotik - Lets Encrypt Zertifikate mit MetaROUTER Instanz auf dem Router erzeugen

Anleitung von colinardo vor 1 TagMikroTik RouterOS8 Kommentare

Einleitung Folgende Anleitung ist aus der Lage heraus entstanden das ein Kunde auf seinem Mikrotik sein Hotspot Captive Portal ...

Sicherheit

Sicherheitslücke in HP-Druckern - Firmware-Updates stehen bereit

Information von BassFishFox vor 1 TagSicherheit1 Kommentar

Ein weiterer Grund, dass Drucker keinerlei Verbindung nach "auswaerts" haben sollen. Unter Verwendung spezieller Malware können Angreifer aus der ...

Heiß diskutierte Inhalte
Windows 10
Bitlocker nach Verschlüsselung nicht mehr aufrufbar!
gelöst Frage von alexlazaWindows 1013 Kommentare

Hallo, ich besitze ein HP ZBook 17 G4 mit einem Windows 10 Pro Betriebssystem. Bei diesem Problem handelt sich, ...

Off Topic
Fachkräftemangel in Deutschland? - Talentschmiede schreibt alle 2 Tage die gleichen Stellen aus
Frage von Penny.CilinOff Topic12 Kommentare

Hallo, haben wir in Deutschland Fachkräftemangel? Die Talentschmiede schreibt gefühlt alle zwei Tage dieselben Stellen aus. Und das schon ...

Windows Server
Sichere Remote Desktop Verbindung wie?
gelöst Frage von nuss33Windows Server11 Kommentare

Hallo zusammen, eins vorweg: Ich besitze einen privaten Windows Server 2008 R2 zu Hause im Netzwerk er wird nicht ...

Windows 10
Windows 10 GPO Powershell Skript Registry bearbeiten
Frage von potshockWindows 1010 Kommentare

Hi Admins, Gegeben ist ein Windows 2012 R2 Server an welchen ich Gpos für Windows 10 Clients bereitstelle. U.a. ...