vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevDataGrid - Gönnen Sie Ihrem SQL-Kommando diesen krönenden Abschluß!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
collection - was ist falsch 
Autor: mikeb69
Datum: 17.10.06 21:26

hallo,

hab mal wieder ein verständnisproblem

'aufbau der elemente eines frage-antwort paares in der datenbank
    Private Structure strDBItem
        Private bFlag As Boolean
        Shared sQuestion As String
        Shared sAnswer As String
        Shared iLengthOfAnswer As Integer
    End Structure
    'die datenbank als collection
    Private colDBItems As Collection    'the database itself
 
Public Function AddNewDBItem(ByVal sQuestion As String, ByVal sAnswer As _
  String) As Boolean
        strDBItem.sQuestion = sQuestion
        strDBItem.sAnswer = sAnswer
        strDBItem.iLengthOfAnswer = sAnswer.Length
 
        colDBItems.Add(strDBItem)
    End Function
bei

 
d(strDBItem)
/code]

gibt es einen fehler:

is a type and can not be used as an expression !!!!!

ich möchte die ganze struktur als collection element hinzufügen
was mache ich falsch ?

danke

mikeb69
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: collection - was ist falsch 
Autor: ModeratorDaveS (Moderator)
Datum: 18.10.06 08:56

Erstens hast du die Variablen als Shared deklariert. Das bedeutet, es gibt nur eine einzelne Instanz davon im ganzen Programm, und diese Instanz gehört der Klasse strDBItem. Du solltest deine Structure deswegen so deklarieren:
    Private Structure strDBItem
        Public bFlag As Boolean
        Public sQuestion As String
        Public sAnswer As String
        Public iLengthOfAnswer As Integer
    End Structure
(Was du mit bFlag machen willst weiss ich nicht, aber als Private kannst du das gar nicht benutzen, wie die Structiure jetzt deklariert ist).
Den Code musst du entsprechend auch ändern und eine Instanz von strDBItem verwenden:
    Public Function AddNewDBItem(ByVal sQuestion As String, ByVal sAnswer As _
      String) As Boolean
       Dim dbi As strDBItem
        dbi.sQuestion = sQuestion
        dbi.sAnswer = sAnswer
        dbi.iLengthOfAnswer = sAnswer.Length
        colDBItems.Add(dbi)
    End Function
Drittens mit VB.Net solltest du Collection besser nicht benutzen, es gibt bessere Framework Klassen, und mit VB2005 kannst du die generischen Collections benutzen, die wesentlcih effizienter sind (u.a.) wenn es um Werte wie Structures geht:
Private colDBItems As New List(Of strDBItem)
(Und du brauchst eventuell "New" auch in deinem Code).

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: collection - was ist falsch 
Autor: mikeb69
Datum: 18.10.06 19:18

hallo daves,

danke für deine hilfe - ich stand gestern abend echt auf dem schlauch !!!!
bin heute in der arbeit draufgekommen. (beim nebenbei nachdenken)

du hast recht die boolsche variable macht keinen sinn - vb wollte aber das ich eine nicht shared variable in der struktur habe. deshalb hab ich sie eingeführt.

habs jetzt wie folgt gemacht:
'aufbau der elemente eines frage-antwort paares in der datenbank
    Private Structure strDBItem
        Public sQuestion As String
        Public sAnswer As String
        Public iLengthOfAnswer As Integer
    End Structure
 
    'die datenbank als collection
    Private colDBItems As New Collections.Generic.List(Of strDBItem)    'the 
    ' database itself
was mich jedoch noch stutzig macht ist folgendes

so funktioniert es - ich will aber eine List(Of strDBItem) als value haben.
nur dann meckert vb

Public Property Item(ByVal iPosInDB As Integer) As List(Of String)
        Get
            Dim s As New List(Of String)
            s.Add(colDBItems.Item(iPosInDB).sQuestion)
            s.Add(colDBItems.Item(iPosInDB).sAnswer)
            s.Add(colDBItems.Item(iPosInDB).iLengthOfAnswer.ToString)
            Return s
        End Get
        Set(ByVal value As List(Of String))
            Dim s As New strDBItem
            s.sQuestion = value.Item(0)
            s.sAnswer = value.Item(1)
            s.iLengthOfAnswer = CInt(value.Item(2))
            colDBItems.Item(iPosInDB) = s
        End Set
    End Property
hier kommt das gemeckere - warum ?
hab doch colDBItem als List(Of strDBItem) declariert

Public Property Item(ByVal iPosInDB As Integer) As List(Of strDBItem) 
        Get
            Dim s As New List(Of strDBItem) 
            s = colDBItems.Item(iPosInDB)          <- das hier ist falsch
            Return s
        End Get
wäre nett wenn mir das einer erklären kann

danke

mikeb69
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: collection - was ist falsch 
Autor: ModeratorDaveS (Moderator)
Datum: 18.10.06 19:34

Ich muss gestehen, dass ich keine Ahnung habe was du da machen willst. Was sind diese ganzen List(Of ) Objekte als Parameter?

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: collection - was ist falsch 
Autor: mikeb69
Datum: 18.10.06 19:53

hallo daves

eigentlich will ich nur eines der vielen

strDBItem's

aus der

colDBItems

zurückgeben. wenn ich aber
Public Property Item(ByVal iPosInDB As Integer) As strDBItem
schreibe gibt es einen fehler

"item can not expose type strDBItem in namespace xxx through class clsDB

gruss

mikeb69
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: collection - was ist falsch 
Autor: ModeratorDaveS (Moderator)
Datum: 18.10.06 19:56

Du musst die Structure als Public deklarieren.

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: collection - was ist falsch 
Autor: mikeb69
Datum: 18.10.06 20:14

hallo daves

aber dann kann ich ja von außen direkt auf die struktur zugreifen.
eigentlich wollte ich alle "variablen" private lassen.

aber gut

danke für den tip

mikeb69
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: collection - was ist falsch 
Autor: ModeratorDaveS (Moderator)
Datum: 18.10.06 22:13

Entweder willst du von aussen darauf zugreifen, dann muss das Public sein, oder nicht. Aber wenn nicht kannst du diese Structure nicht als Rückgabewert einer Public Methode haben.

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel