tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
4
ZUGRIFFE
3602
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    embi embi ist offline Rookie
    Registriert seit
    Nov 2003
    Beiträge
    7
    Hallo liebes Tutorials.de-Forum!

    Ich hab bei mir die Visual Studio 2010 Ultimate Demo laufen um mal ein bisschen in die Anwendungsentwicklung reinzuschnuppern (es gibt doch aber auch ne kostenlose Visual Studio Version, oder?). Bisher war ich recht intensiv mit PHP und MySQL unterwegs.

    Eines Tages hab ich mir eine kleine "Bibliothek" in PHP geschrieben, in der ich meine ganzen BluRays eingetragen habe (mit Filminformationen und anzeige, ob und an wen ich den Film verliehen hab usw.).
    Das ganze lief dann für mich allein auf meinem Webserver.

    Nun hatte ich bei einer der Buch-Aktionen ein C++ Buch gewählt und bin nun auf den Trichter gekommen, mir diese Bibliothek noch mal neu als Windows Anwendung zu schreiben.
    Da C++ aber vielleicht noch etwas sehr fremd für mich ist und ich schon bei mir auf Arbeit ein bisschen mit Excel/VBA zu tun hatte, dachte ich mir ich probiers in VS2010 mal mit Visual Basic.

    (puh, soweit zur Vorgeschichte :-D)

    Habe mich jetzt mal mit der Studio Benutzeroberfläche vertraut gemacht und ein bisschen herumgespielt. Nun wollte ich herausfinden, wie ich das mit der Datenbank anstellen könnte.
    Nach ner weile Google habe ich dann auch die "Lokale Datenbank" gefunden und denke, dass das das Richtige für mich ist, oder? (Hab das da so verstanden, dass ich eine Anwendungseigene Datenbank habe wo ich beliebig Datensätze einfügen, abrufen und löschen kann, zu der ich eigentlich nichts installiert haben muss ausser halt das .net Framework für die Anwendung selber).

    Ich bin schonmal soweit, dass ich das Dataset im Designer offen habe, dort meine Tabelle drin habe und auch ein TableAdapter mit dabei ist.
    Nachdem ich aus "Datenquellen" meine Tabelle in die Form ge"drag'n'droped" hab, sind da die Label mit den Spaltennamen, die Eingabefelder für neue Einträge bzw. zum Anzeigen der Tabelleninhalte und oben ist der BindingNavigator.

    Soweit so gut zum Probieren.

    Nun habe ich mir vorgestellt dass ich die Bibliothek im Stile des Explorer-Formulars darstelle:
    In der Linken spalte eine Auflistung der einzelnen Filme (Sammelboxen sind quasi ein Ordner mit untergeordneten Einträgen der beinhalteten Filme). Wenn ich dann einen Film anklicke, kann ich in der rechten Spalte dann die Filminfos sehen bzw. bearbeiten.

    Und endlich kommen wir zum Problem:
    Ich weiss nicht, wie ich meine Filme auflisten lassen kann

    Im Code des Explorerformulars isses ja aktuell so
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
        Private Sub LoadTree()
            ' TODO: Code zum Hinzufügen von Elementen in der Strukturansicht hinzufügen
     
            Dim tvRoot As TreeNode
            Dim tvNode As TreeNode
     
            tvRoot = Me.TreeView.Nodes.Add("Root")
            tvNode = tvRoot.Nodes.Add("TreeItem1")
            tvNode = tvRoot.Nodes.Add("TreeItem2")
            tvNode = tvRoot.Nodes.Add("TreeItem3")
        End Sub

    Wär das ganze PHP, hätte ich das so gemacht (grob zusammengefasst):

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
        Private Sub LoadTree()
            ' TODO: Code zum Hinzufügen von Elementen in der Strukturansicht hinzufügen
     
            Dim tvRoot As TreeNode
            Dim tvNode As TreeNode
            
            select * from movies where ID
            while list results ID each {
            if produkt = sammelbox{     
            
            tvRoot = Me.TreeView.Nodes.Add("SAMMELBOXNAME")
            
            }elseif produkt = film{
      
           tvNode = tvRoot.Nodes.Add("FILMNAME")
          } }
     
       End Sub

    Also dass die Abfrage gemacht wird und er jeden Eintrag einzeln bearbeitet und je nachdem was in der Spalte "Produkt" steht er den Filmnamen als Ordner (Sammelbox) oder Datei (eiznelner Film) darstellt und alles auflistet.

    Konnte man das soweit gut verstehen? Wie mach ichn das?
    Also wie verbinde ich zu meiner Datenbank und wie lautet der richtige code für diese while schleife?
    Hat da einer Lust mir das zu erklären/zeigen?

    Vielen Dank schonmal im Vorraus!

    Gruß,
    Maik
     

  2. #2
    Avatar von Shakie
    Shakie Shakie ist offline Mitglied Diamant
    Registriert seit
    May 2004
    Ort
    Europa
    Beiträge
    2.048
    Ja es gibt kostenloste IDEs von Microsoft, die heißen dann "Microsoft Visual Basic Express" oder "Microsoft Visual C# Express". Siehe hier.
    Zur While-Schleife:
    Ich kann kein PHP, die Where- und Results-Ausdrücke verstehe ich nicht.
    Aber du willst vermutlich etwas in dieser Art machen:
    Code csharp:
    1
    2
    3
    4
    5
    6
    7
    
    foreach (MovieType item in movies.Where<Deine PHP-Bedingung in C#-Syntax>)
    {
        if (item.Product == "sammelbox")
        {Me.TreeView.Nodes.Add("SAMMELBOXNAME");}
        else if (item.Product == "film")
        {tvNode = tvRoot.Nodes.Add("FILMNAME");}
    }
    Das funktioniert natürlich nur, wenn movies ein Type ist, der IEnumerable<MovieType> implementiert (eine List<> tut das zum Beispiel) und wenn MovieType der Type ist der deine Objekte darstellt.
    Geändert von Shakie (14.12.10 um 12:35 Uhr)
     
    hihi = -h²

  3. #3
    embi embi ist offline Rookie
    Registriert seit
    Nov 2003
    Beiträge
    7
    Ah das sieht wirklich so aus wie ich das brauche. Das heisst ich deklariere vorher noch dass movietype eine liste ist.
    ausserdem muss ich sicher auch noch angeben dass diese liste eine liste der Ergebnisse der SQL abfrage meines Adapters ist, oder? Wie muss das aussehen? Und wie sag ich ihm,dass er meinen Adapter ansprechen soll? (Schreiben mit dem Handy ist echt ******** )
     

  4. #4
    Avatar von Shakie
    Shakie Shakie ist offline Mitglied Diamant
    Registriert seit
    May 2004
    Ort
    Europa
    Beiträge
    2.048
    Der Code in meinem vorherigen Post war C#. Ich hoffe das hat dich nicht verwirrt.
    Zitat Zitat von embi Beitrag anzeigen
    Das heisst ich deklariere vorher noch dass movietype eine liste hat.
    Nein. Du deklarierst movies als Liste, wobei die Liste Elemente vom Typ movietype ist. Was movietype ist, musst du natürlich auch noch definieren. Zum Beispiel so:
    Code vbnet:
    1
    2
    3
    4
    
    Public Class movietype
    Public Product As String
    Public WasWeißIch As Integer
    End Class
    Code vbnet:
    1
    
    Dim movies As List(Of movietype)
    Zitat Zitat von embi Beitrag anzeigen
    ausserdem muss ich sicher auch noch angeben dass diese liste eine liste der Ergebnisse der SQL abfrage meines Adapters ist, oder?
    Ja. Hab' aber keine Ahnung von SQL in .Net
     
    hihi = -h²

  5. #5
    embi embi ist offline Rookie
    Registriert seit
    Nov 2003
    Beiträge
    7
    Okay, vielen Dank Shakie!

    Ich habe jetz VB2010 Express und werd von nun an damit weiterarbeiten.
    Das Where ist SQL und besagt in der Zeile, dass alle Daten ausgelesen werden sollen wo ein Wert in der Spalte ID steht. Man hätte auch noch WHERE ID = 12 nehmen können, dann hätter den Datensatz ausgelesen, der in der ID eine 12 zu stehen hat

    Das while list results blabla heisst, dass er in der while-schleife die Resultate der Abfrage je ID auflistet.

    Ok... bin nebenbei auch dabei, mir die Galilio Computing Sachen reinzuziehen (Werd mir das auch Bestellen, denk ich)
    Da gibts ja nun auch ein gutes (sehr gutes) Beispiel für ne lokale Datenbank. Die ist aber aus Access. Soweit ich das ausm Code rauslese, wird ja da auber auch nur die mdf Datei eingelesen. So wirds doch bei der Lokalen Datenbank die ich in VB 2010 express erstellen kann auch nur gemacht, oder?

    Gibts denn da im Code für die Verbindung große Unterschiede zwischen der Access und der SQL Compact DB? Ich hab das Gefühl dass nur der Provider anders heisst. Also statt OleDB SQL oder sowas.. kann mir da einer Hintergrundinfo geben? Das wär echt klasse und ich denke, auch mein Durchbruch endlich weiter zu kommen

    Edit:
    Aaahh okay.. ich hab ein bisschen rumgespielt und raus gekommen ist, dass das Beispiel in dem Galileo Buch nahezu 1 zu 1 funktioniert. Lediglich der Provider muss geändert werden: Statt "Provider=Microsoft.Jet.OLEDB.4.0;" also "Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5;" so, ich hoffe damit, dass ich nun erstmal allein weiterkomm. Das buch müsste übermorgen auch bei mir eintreffen Vielleicht wird ja aus meinem Projekt ein kleines Tutorial
    Wenns klappt, poste ich morgen Abschliessend mal den Explorer-Code um den Thread abzuschliessen.

    Edit2:

    So und hier der Code. So funktionierts aktuell bei mir, wie ich es mir vorgestellt hatte. Aber ich glaube ich werde für das Projekt dann doch ein schöneres Design wählen

    Ganz ganz oben im Code der Form:
    Code vbnet:
    1
    
    Imports System.Data.OleDb

    Und später dann:
    Code vbnet:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    
        Private Sub LoadTree()
            ' TODO: Code zum Hinzufügen von Elementen in der Strukturansicht hinzufügen
     
            Dim tvRoot As TreeNode
            Dim tvNode As TreeNode
            Dim con As New OleDbConnection
            Dim cmd As New OleDbCommand
            Dim cmd2 As New OleDbCommand
            Dim reader As OleDbDataReader
            Dim reader2 As OleDbDataReader
            con.ConnectionString =
                "Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5;" &
                "Data Source=movies.sdf"
            cmd.Connection = con
            cmd2.Connection = con
            cmd.CommandText = "select * from filme"
            Try
                con.Open()
                reader = cmd.ExecuteReader()
                Do While reader.Read()
                    If (reader("Produkt") = "Sammelbox") Then
                        tvRoot = Me.TreeView.Nodes.Add(reader("name"))
                        cmd2.CommandText = "select * from filme where Gruppe = '" & reader("Gruppe") & "' AND Produkt = 'Sammelboxfilm'"
                        Try
     
                            reader2 = cmd2.ExecuteReader()
                            Do While reader2.Read()
                                tvNode = tvRoot.Nodes.Add(reader2("name"))
                            Loop
                            reader2.Close()
     
                        Catch ex2 As Exception
                            MessageBox.Show(ex2.Message)
                        End Try
                    ElseIf (reader("Produkt") = "Einzelfilm") Then
                        tvNode = Me.TreeView.Nodes.Add(reader("Name"))
                    End If
                Loop
                reader.Close()
                con.Close()
            Catch ex As Exception
                MessageBox.Show(ex.Message)
     
            End Try
        End Sub

    Dankeschön und bis bald
    Geändert von embi (16.12.10 um 15:50 Uhr) Grund: Lösung gefunden
     

Ähnliche Themen

  1. Webservice: Visual Studio 2008 vs Visual Studio 2010 Express for Windwos Phone
    Von Johannes7146 im Forum .NET Web und Kommunikation
    Antworten: 4
    Letzter Beitrag: 27.09.10, 23:06
  2. Visual Studio 2010 & VB reload einer Internetseite
    Von warng im Forum Visual Basic 6.0
    Antworten: 0
    Letzter Beitrag: 13.08.10, 19:40
  3. qt4 und Visual Studio 2010
    Von countryqt30 im Forum C/C++
    Antworten: 7
    Letzter Beitrag: 18.07.10, 10:59
  4. Visual Studio 2010 Ultimate Deutsches Sprachpaket
    Von Danielku15 im Forum Coders Talk
    Antworten: 0
    Letzter Beitrag: 25.05.10, 10:46