Accsess Tabelle zur Laufzeit um eine Spalte erweitern

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von Westerwälder.

    Accsess Tabelle zur Laufzeit um eine Spalte erweitern

    Guten Morgen,

    um Rechner im Heimnetz auf dem neusten Stand zu halten, habe ich ein Updateprogramm entwickelt. Dort können u.a. neue Datentabellen in die vorhandene Datenbank angelegt werden.

    Code - Tabellenanlage (funktioniert so):

    VB.NET-Quellcode

    1. Public Sub TabelleNeuanlage(ByVal Bankverbindung As String, ByVal Tabellennamen As String)
    2. Dim MeineDatenbank As New ADOX.Catalog
    3. Dim MeineVerbindung As New ADODB.Connection
    4. Dim MeineTabelle As New ADOX.Table
    5. Dim MeineSpalte As ADOX.Column
    6. Dim MeinIndex As New ADOX.Index
    7. Dim I As Integer = 0
    8. Try
    9. MeineVerbindung.ConnectionString = Bankverbindung
    10. MeineVerbindung.Open()
    11. MeineDatenbank.ActiveConnection = MeineVerbindung
    12. MeineTabelle.Name = Tabellennamen
    13. MeineSpalte = New Column
    14. With MeineSpalte
    15. .ParentCatalog = MeineDatenbank
    16. .Name = "ID"
    17. .Type = DataTypeEnum.adInteger
    18. .Properties("Nullable").Value = False
    19. .Properties("AutoIncrement").Value = True
    20. End With
    21. MeineTabelle.Columns.Append(MeineSpalte)
    22. With MeinIndex
    23. .Name = "PrimaryKey"
    24. .PrimaryKey = True
    25. .Columns.Append("ID", MeineTabelle.Columns("ID").Type, MeineTabelle.Columns("ID").DefinedSize)
    26. End With
    27. MeineTabelle.Indexes.Append(MeinIndex)
    28. For I = 0 To Me.TabellenNeuanlageSpaltenliste.Count - 1
    29. MeineSpalte = New Column
    30. With MeineSpalte
    31. .ParentCatalog = MeineDatenbank
    32. .Name = Me.TabellenNeuanlageSpaltenliste(I).Spaltennamen
    33. .Type = Me.TabellenNeuanlageSpaltenliste(I).Datentyp
    34. .DefinedSize = Me.TabellenNeuanlageSpaltenliste(I).MaxLaenge
    35. .Properties("Nullable").Value = Me.TabellenNeuanlageSpaltenliste(I).LeerwertErlaubt
    36. End With
    37. MeineTabelle.Columns.Append(MeineSpalte)
    38. Next
    39. MeineDatenbank.Tables.Append(MeineTabelle)
    40. Catch ex As Exception
    41. MessageBox.Show("Fehler Tabellen-Neuanlage." & vbNewLine &
    42. "Fehler:" & ex.Message, "Update", MessageBoxButtons.OK, MessageBoxIcon.Hand)
    43. End Try
    44. Me.TabellenNeuanlageSpaltenliste = New List(Of CTabellenliste)
    45. End Sub


    Nun möchte ich in einer bestehende Tabelle, eine Spalte hinzufügen.

    Code:

    VB.NET-Quellcode

    1. Public Sub TabellenErweiterung(ByVal Bankverbindung As String, ByVal Tabellennamen As String)
    2. Dim MeineDatenbank As New ADOX.Catalog
    3. Dim MeineVerbindung As New ADODB.Connection
    4. Dim MeineTabelle As New ADOX.Table
    5. Dim MeineSpalte As ADOX.Column
    6. Dim MeinIndex As New ADOX.Index
    7. Dim I As Integer = 0
    8. Try
    9. MeineVerbindung.ConnectionString = Bankverbindung
    10. MeineVerbindung.Open()
    11. MeineDatenbank.ActiveConnection = MeineVerbindung
    12. MeineTabelle.Name = Tabellennamen
    13. For I = 0 To Me.TabellenNeuanlageSpaltenliste.Count - 1
    14. MeineSpalte = New Column
    15. With MeineSpalte
    16. .ParentCatalog = MeineDatenbank
    17. .Name = Me.TabellenNeuanlageSpaltenliste(I).Spaltennamen
    18. .Type = Me.TabellenNeuanlageSpaltenliste(I).Datentyp
    19. .DefinedSize = Me.TabellenNeuanlageSpaltenliste(I).MaxLaenge
    20. .Properties("Nullable").Value = Me.TabellenNeuanlageSpaltenliste(I).LeerwertErlaubt
    21. End With
    22. MeineTabelle.Columns.Append(MeineSpalte)
    23. Next
    24. Catch ex As Exception
    25. MessageBox.Show("Fehler Tabellen-Erweiterung." & vbNewLine &
    26. "Fehler:" & ex.Message, "Update", MessageBoxButtons.OK, MessageBoxIcon.Hand)
    27. End Try
    28. Me.TabellenNeuanlageSpaltenliste = New List(Of CTabellenliste)
    29. End Sub


    Hier tut sich nichts. Tabelle wird nicht erweitert, es kommt auch keine Fehlermeldung.

    Hier der Aufruf für die Erweiterung:

    VB.NET-Quellcode

    1. Private Sub UPD_1006()
    2. ' Diese zwei Zeilen sind in jedem UPD_10.... erforderlich
    3. Me.AuftragBezeichnung = "(1006) - Modi Bildschirmschoner (Tabellenerweiterung) "
    4. If Rechner.IstHostrechner Then Exit Sub
    5. Daten.TabellenNeuanlageSpaltenliste = New List(Of MBC_Datenbank.CTabellenliste)
    6. Daten.TabellenNeuanlageSpaltenliste.Add(New MBC_Datenbank.CTabellenliste With {.Spaltennamen = "Bildschirmschoner",
    7. .Datentyp = ADOX.DataTypeEnum.adBoolean,
    8. .MaxLaenge = 1,
    9. .LeerwertErlaubt = False})
    10. Daten.TabellenErweiterung(Daten.Verbindungsstring_MBMEIN, "Modi")
    11. End Sub

    Gruß Markus

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Westerwälder“ ()

    Falls es jemanden interessiert, habe den Fehler gefunden.
    In der Sub Tabellenerweiterung, muss die Tabelle wie folgt zugeordnet werden:

    VB.NET-Quellcode

    1. MeineVerbindung.ConnectionString = Bankverbindung
    2. MeineVerbindung.Open()
    3. MeineDatenbank.ActiveConnection = MeineVerbindung
    4. ' Zuordnung der Tabelle
    5. MeineTabelle = MeineDatenbank.Tables(Tabellennamen)
    Gruß Markus