[OleDB] Datenanbindung zu MS Access

' Connection String für MS Access
Dim sConnectionString = sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=MyDatabase.mdb"

Dim DB_Conn As New System.Data.OleDb.OleDbConnection(sConnectionString)

DB_Conn.Open()

...

DB_Conn.Close()
DB_Conn.Dispose()
DB_Conn = Nothing

[ADODB] Datenzugriff

Dim DBRecordset As New ADODB.Recordset

DBRecordset.Open("Gebaeude", DBConnection, ADODB.CursorTypeEnum.adOpenKeyset, ADODB.LockTypeEnum.adLockOptimistic)

oder

With DBRecordset
     .ActiveConnection = DBConnection
     .CursorLocation = ADODB.CursorLocationEnum.adUseClient
     .LockType = ADODB.LockTypeEnum.adLockOptimistic
     .Open("SELECT ID, Bezeichnung FROM Gebaeude")
End With
  • allg. Zugriff auf Feldelemente
Dim h As Integer
h = DBRecordset.Fields!ID.Value 'unsauber
h = DBRecordset.Fields.Item(0).Value ' per Index
h = DBRecordset.Fields("ID").Value 'Spaltenname
  • Daten per Schleife aus dem DBRecordset auslesen
While (Not DBRecordset.EOF)
   sXMLResult = DBRecordset.Fields("ID").Value
   DBRecordset.MoveNext()
End While

oder
   
For i = 0 To DBRecordset.RecordCount - 1
   sXMLResult = DBRecordset.Fields("ID").Value
   DBRecordset.MoveNext()
Next i
  • und das Schließen des DBRecordset nicht vergessen
DBRecordset.Close()

[ADODB] Datenanbindung zu MS Access

  • ADODB Klassen zum Projekt hinzufügen durch Klick im Projektbaum->Verweise->Verweis hinzufügen …->.Net->adodb wählen
  • Connection herstellen:
Dim DBConnection As New ADODB.Connection

DBConnection.Open("Provider = Microsoft.Jet.OLEDB.4.0;Data Source = " & OpenFileDialog.FileName)
...
DBConnection.Close()

oder

With DBConnection
    .Mode = ADODB.ConnectModeEnum.adModeShareDenyNone
    .Provider = "Microsoft.Jet.OLEDB.4.0"
    .ConnectionString = "Data Source=" & sDBFileName
    .Open()
End With

Schließen eines Formulars abfangen

Private Sub frmMain_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
    Dim strMeldung As String = "Wollen Sie die Anwendung beenden?"
    Dim dr As DialogResult = MessageBox.Show(strMeldung, My.Application.Info.Title, MessageBoxButtons.YesNo)

    If dr = Windows.Forms.DialogResult.Yes Then
        e.Cancel = False
    Else
        e.Cancel = True
    End If
End Sub

Messageboxen anpassen

  • im Beispiel wird eine Messagebox mit individuellem Fragetext: “Objekt löschen?”
  • dem Anwendungsnamen: My.Application.Info.Title
  • entprechenden Buttons: MessageBoxButtons.YesNo
  • und einem Icon: MessageBoxIcon.Question
  • angezeigt und das Ergebnis abgefragt.
If MessageBox.Show("Objekt löschen?", My.Application.Info.Title, MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
   ...
End If

MDI Fenster suchen und anzeigen

  • im Codebeispiel wird anhand eines selber vergebenen Tag-Wertes (z.B. DB-Id-Wert [Primärschlüssel]) einer TreeViewNode ein MDI-Fenster gesucht und angezeigt
Private Sub miGraph_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles miGraph.Click
    Dim bNotFound As Boolean = True
    Dim FMonthData As frmMonth ' das gesuchte Formular

    If Not tvObjects.SelectedNode Is Nothing Then
        ' MDI-Child-Liste durchsuchen
        For i As Integer = 0 To frmMain.MdiChildren.Length - 1
            ' wenn die Tags übereinstimmen, dann ist das Fenster schonmal anhand der Tag_ID gefunden
            If frmMain.MdiChildren(i).Tag = tvObjects.SelectedNode.Tag Then
                ' auf den Typ FMonthData casten
                FMonthData = TryCast(frmMain.MdiChildren(i), frmMonth)
                If Not FMonthData Is Nothing Then
                    ' wenn der cast gültig, dann Fenster anzeigen
                    FMonthData.BringToFront()
                    bNotFound = False
                    Exit For
                End If
            End If
        Next

        If bNotFound Then
            ' wenn Fenster nicht in der MDI-Child-Liste vorhanden, dann neues erzeugen
            FMonthData = New frmMonth

            With FMonthData
                .MdiParent = frmMain
                ' Tag-Wert übergeben, für spätere Fenster-Suche
                .Tag = tvObjects.SelectedNode.Tag
                .Text = "Testfenster"
                .Show()
            End With
        End If
    End If
End Sub

MDI Basiswissen

MDI Basiswissen

  1. MDI-Mainform
    • Es muß immer ein MDI Hauptformular (MdiContainer) definiert werden
    • dazu muss die Eigenschaft des entsprechende Formulars gesetzt werden: IsMdiContainer = True
  2. MDI-Childs
    • Projektbaum rechtsklicken->Hinzufügen->Windows Form->Windows Form
    • Form nach eingenem Wunsch designen, benennen und speichern
  3. MDI-Childs anzeigen
  4. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        ' Fenster aus designter Fensterklasse erzeugen
        Dim FObjectTree As New frmObjectTree
        ' MdiParent-Zuweisung ist wichtig,
        ' da so FObjectTree zu einem MDI-Child wird
        ' durch die Zuweisung wird das Child-Formular
        ' automatisch im Hauptformular registriert
        FObjectTree.MdiParent = Me
        ' MDI-Fenster anzeigen
        FObjectTree.Show()
    End Sub
    
  5. Zugriff auf MDI-Childs
    • über MdiChildren-Liste des MDI-Hauptformulars
    For i As Integer = 0 To Me.MdiChildren.Length - 1
    ...   
    Next
    
    oder
    
    For i As Integer = Me.MdiChildren.Length - 1 To 0 Step - 1
        Me.MdiChildren(i).Close()
    Next
    
    • über aktives Fenster
    If Me.ActiveMdiChild IsNot Nothing Then
        ' das MDI-Child-Formular ist vom Typ SubForm
        Dim frm As SubForm = Me.ActiveMdiChild
        frm.textBox1.Text = "......."
    End If
    
  6. MDI Fenster anordnen
  7. Me.LayoutMdi(MdiLayout.Cascade)
    Me.LayoutMdi(MdiLayout.TileHorizontal)
    Me.LayoutMdi(MdiLayout.TileVertical)
    Me.LayoutMdi(MdiLayout.ArrangeIcons)