ToolstripButton Datenbank Verknüpfung on Runtime

  • Access

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von SerkanLives.

    ToolstripButton Datenbank Verknüpfung on Runtime

    Hallo zusammen,

    ich verfolge das Forum seit einer längeren Zeit, super hilfsbereite und aktive Community! Ich habe ein Problem bezüglich meiner Datenbank Einbindung in mein VBA Programm.

    Bevor ich gesteinigt werde: Mir ist bewusst, dass es nicht sauber ist, dass es wahrscheinlich 1000 mal einfacher geht. Das sind alles codes, die von 1000 Foreneinträgen zusammengesucht wurden, von einem Kerl mit Ehrgeiz aber 0 Programmiererfahrung.

    Zunächst eine Erklärung, was mein Programm tun soll(da es mittlerweile sehr komplex geworden ist):

    1. Meine Windows "Form2" beinhaltet mehrere Comboboxen, diese sind alle mit einer Datenbank verbunden und wird durch diese befüllt(funktioniert auch)
    2. Mit dem Buttonklick auf "Weiter" soll nun, je nach Inhalt der Combobox, eine weitere Datenbank erstellt werden,jeweils eine Tabelle pro Combobox. (Funktioniert, aber umständlich)
    3. In diese Tabellen sollen von einer separaten Datenbank Inhalte befüllt werden ("Checkpunkte"). (Funktioniert)
    4. Für jede erstellte Tabelle soll dann auf der nächsten Seite (Form6) ein Toolstripbutton erstellt und jeweils zu den Tabellen zugeordnet werden. (Funktioniert nicht)
    5. Durch den Klick auf eines der Toolstripbutton's soll nun unser Datagridview angezeigt werden. (Funktioniert)


    Jetzt habe ich ein paar Dinge, die nicht funktionieren, bzw. die ich gerne in eine Schleife einbringen würde:
    1. Ich habe 33 Comboboxen in meiner Windows Form2, wenn ich alle einzelnd anspreche funktioniert es, jedoch würde ich es gerne so machen, dass alle comboboxen im Windows Form angesprochen werden. Ganz unten befindet sich der gesamte Code. Wenn ich eine For Each Schleife hinzufüge passiert garnichts.
    Mein Versuch:

    VB.NET-Quellcode

    1. For Each Control As Control In Me.Controls
    2. If TypeOf Control Is ComboBox Then
    3. If Control.Text <> "Bitte Prozess angeben" Then
    4. Connection = Catalog.ActiveConnection
    5. Tabelle.Name = Control.Text
    6. Tabelle.Columns.Append("Checkpunkte", ADOX.DataTypeEnum.adVarWChar,)
    7. Tabelle.Columns.Append("Ja", ADOX.DataTypeEnum.adBoolean,)
    8. Tabelle.Columns.Append("Nein", ADOX.DataTypeEnum.adBoolean,)
    9. Catalog.Tables.Append(Tabelle)
    10. Dim ConnectionOLE2 As New OleDb.OleDbConnection("Provider = Microsoft.ACE.OLEDB.12.0;Data Source=xyz\Documents\Linien\" & DatabaseName & ".accdb")
    11. Dim da As New OleDb.OleDbDataAdapter("SELECT * FROM Fragekatalog WHERE (" & Control.Text & " = TRUE)", ConnectionOLE)
    12. TabelleName = Control.Text
    13. da.InsertCommand = New OleDb.OleDbCommand("INSERT INTO " & TabelleName & " (Checkpunkte,Ja,Nein) VALUES (@Checkpunkte, @Ja, @Nein)", ConnectionOLE2)
    14. da.InsertCommand.Parameters.Add("@Checkpunkte", OleDb.OleDbType.VarChar, 50, "Checkpunkte")
    15. da.InsertCommand.Parameters.Add("@Ja", OleDb.OleDbType.Boolean, 8, "Ja")
    16. da.InsertCommand.Parameters.Add("@Nein", OleDb.OleDbType.Boolean, 8, "Nein")
    17. da.AcceptChangesDuringFill = False
    18. da.Fill(dt)
    19. Dim Button As New ToolStripButton
    20. Button.Text = Control.Text
    21. Form6.FragenAllgemeinToolStrip.Items.Add(Button)
    22. Button.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text
    23. Button.ImageTransparentColor = System.Drawing.Color.Magenta
    24. Button.Name = "Button"
    25. Button.Size = New System.Drawing.Size(60, 29)
    26. Dim dt1 As New DataSet
    27. Dim Fr As New OleDb.OleDbDataAdapter("SELECT * FROM Fragekatalog WHERE (" & Control.Text & "=True)", ConnectionOLE)
    28. Fr.Fill(dt1)
    29. Form6.DataGridView2.DataSource = dt1.Tables(0)
    30. AddHandler Button.Click, AddressOf HandleDynamicButtonClick
    31. da.Update(dt)
    32. Else
    33. End If
    34. End If
    35. Next



    So hab ich es davor gemacht und so funktionierts:

    VB.NET-Quellcode

    1. If Prozess1.Text <> "Bitte Prozess angeben" Then
    2. Connection = Catalog.ActiveConnection
    3. Tabelle.Name = Prozess1.Text
    4. Tabelle.Columns.Append("Checkpunkte", ADOX.DataTypeEnum.adVarWChar,)
    5. Tabelle.Columns.Append("Ja", ADOX.DataTypeEnum.adBoolean,)
    6. Tabelle.Columns.Append("Nein", ADOX.DataTypeEnum.adBoolean,)
    7. Catalog.Tables.Append(Tabelle)
    8. Dim ConnectionOLE2 As New OleDb.OleDbConnection("Provider = Microsoft.ACE.OLEDB.12.0;Data Source=xyz\Documents\Linien\" & DatabaseName & ".accdb")
    9. Dim da As New OleDb.OleDbDataAdapter("SELECT * FROM Fragekatalog WHERE (" & Prozess1.Text & " = TRUE)", ConnectionOLE)
    10. TabelleName = Prozess1.Text
    11. da.InsertCommand = New OleDb.OleDbCommand("INSERT INTO " & TabelleName & " (Checkpunkte,Ja,Nein) VALUES (@Checkpunkte, @Ja, @Nein)", ConnectionOLE2)
    12. da.InsertCommand.Parameters.Add("@Checkpunkte", OleDb.OleDbType.VarChar, 50, "Checkpunkte")
    13. da.InsertCommand.Parameters.Add("@Ja", OleDb.OleDbType.Boolean, 8, "Ja")
    14. da.InsertCommand.Parameters.Add("@Nein", OleDb.OleDbType.Boolean, 8, "Nein")
    15. da.AcceptChangesDuringFill = False
    16. da.Fill(dt)
    17. Dim Button As New ToolStripButton
    18. Button.Text = Prozess1.Text
    19. Form6.FragenAllgemeinToolStrip.Items.Add(Button)
    20. Button.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text
    21. Button.ImageTransparentColor = System.Drawing.Color.Magenta
    22. Button.Name = "Button"
    23. Button.Size = New System.Drawing.Size(60, 29)
    24. Dim dt1 As New DataSet
    25. Dim Fr As New OleDb.OleDbDataAdapter("SELECT * FROM Fragekatalog WHERE (" & Prozess1.Text & "=True)", ConnectionOLE)
    26. Fr.Fill(dt1)
    27. Form6.DataGridView2.DataSource = dt1.Tables(0)
    28. AddHandler Button.Click, AddressOf HandleDynamicButtonClick
    29. da.Update(dt)
    30. Else
    31. End If


    2. Ich würde gerne für jede erstellte Tabelle einen Toolstripbutton für die Toolstripleiste "Fragenallgemeintoolstrip" erstellen. Zudem sollen die einzelnen Buttons on Runtime den jeweiligen Tabellen zugeordnet werden. Hier funktioniert es auch für einen angesprochenen Button, dies soll jedoch auch in einer Schleife laufen. Zudem soll die Zuordnung anders gestaltet sein, aktuell wird es mit Button.Text=Prozess.Text gelöst, aber die Buttons sollen später anders heißen, wodurch bei dieser Lösung die Verknüpfung flöten geht.

    Mein Versuch:

    VB.NET-Quellcode

    1. Dim Button As New ToolStripButton
    2. Button.Text = Prozess1.Text
    3. Form6.FragenAllgemeinToolStrip.Items.Add(Button)
    4. Button.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text
    5. Button.ImageTransparentColor = System.Drawing.Color.Magenta
    6. Button.Name = "Button"
    7. Button.Size = New System.Drawing.Size(60, 29)
    8. Dim dt1 As New DataSet
    9. Dim Fr As New OleDb.OleDbDataAdapter("SELECT * FROM Fragekatalog WHERE (" & Prozess1.Text & "=True)", ConnectionOLE)
    10. Fr.Fill(dt1)
    11. Form6.DataGridView2.DataSource = dt1.Tables(0)
    12. AddHandler Button.Click, AddressOf HandleDynamicButtonClick
    13. Else
    14. EndIf
    15. Private Sub HandleDynamicButtonClick(ByVal sender As Object, ByVal e As EventArgs)
    16. Dim Button As ToolStripButton = DirectCast(sender, ToolStripButton)
    17. Form6.DataGridView2.Show()
    18. End Sub


    3. Habe ich derzeit keine Lösung, wie ich die DataSets abspeichere. Als ich die Datenbanken über die VBA Nutzeroberfläche verknüpft hatte (also nicht im Runtime), hatte ich es irgendwie hinbekommen, dass die Datenbanken live verbunden und geupdated wurden, durch BindingSources evtl.? Wenn ja, wie erstelle ich bzw. verknüpfe ich sowas mit meinem DataSet in Runtime?

    Ich bedanke mich im Voraus für jede Antwort

    Hier ist der gesamte Code:


    VB.NET-Quellcode

    1. Dim Connection As ADODB.Connection
    2. Dim Tabelle As ADOX.Table
    3. Dim TabelleName As String
    4. Dim ProzessName1 As String
    5. Connection = New ADODB.Connection
    6. Catalog = New ADOX.Catalog
    7. Tabelle = New ADOX.Table
    8. ProzessName1 = Me.Prozess1.Text
    9. DatabaseName = Form1.TextBox5.Text
    10. Catalog.Create("Provider = Microsoft.ACE.OLEDB.12.0;Data Source=xyz\Linien\" & DatabaseName & ".accdb")
    11. If Prozess1.Text <> "Bitte Prozess angeben" Then
    12. Connection = Catalog.ActiveConnection
    13. Tabelle.Name = Prozess1.Text
    14. Tabelle.Columns.Append("Checkpunkte", ADOX.DataTypeEnum.adVarWChar,)
    15. Tabelle.Columns.Append("Ja", ADOX.DataTypeEnum.adBoolean,)
    16. Tabelle.Columns.Append("Nein", ADOX.DataTypeEnum.adBoolean,)
    17. Catalog.Tables.Append(Tabelle)
    18. Dim ConnectionOLE2 As New OleDb.OleDbConnection("Provider = Microsoft.ACE.OLEDB.12.0;Data Source=xyz\Documents\Linien\" & DatabaseName & ".accdb")
    19. Dim da As New OleDb.OleDbDataAdapter("SELECT * FROM Fragekatalog WHERE (" & Prozess1.Text & " = TRUE)", ConnectionOLE)
    20. TabelleName = Prozess1.Text
    21. da.InsertCommand = New OleDb.OleDbCommand("INSERT INTO " & TabelleName & " (Checkpunkte,Ja,Nein) VALUES (@Checkpunkte, @Ja, @Nein)", ConnectionOLE2)
    22. da.InsertCommand.Parameters.Add("@Checkpunkte", OleDb.OleDbType.VarChar, 50, "Checkpunkte")
    23. da.InsertCommand.Parameters.Add("@Ja", OleDb.OleDbType.Boolean, 8, "Ja")
    24. da.InsertCommand.Parameters.Add("@Nein", OleDb.OleDbType.Boolean, 8, "Nein")
    25. da.AcceptChangesDuringFill = False
    26. da.Fill(dt)
    27. Dim Button As New ToolStripButton
    28. Button.Text = Prozess1.Text
    29. Form6.FragenAllgemeinToolStrip.Items.Add(Button)
    30. Button.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text
    31. Button.ImageTransparentColor = System.Drawing.Color.Magenta
    32. Button.Name = "Button"
    33. Button.Size = New System.Drawing.Size(60, 29)
    34. Dim dt1 As New DataSet
    35. Dim Fr As New OleDb.OleDbDataAdapter("SELECT * FROM Fragekatalog WHERE (" & Prozess1.Text & "=True)", ConnectionOLE)
    36. Fr.Fill(dt1)
    37. Form6.DataGridView2.DataSource = dt1.Tables(0)
    38. AddHandler Button.Click, AddressOf HandleDynamicButtonClick
    39. da.Update(dt)
    40. Else
    41. End If
    42. Private Sub HandleDynamicButtonClick(ByVal sender As Object, ByVal e As EventArgs)
    43. Dim Button As ToolStripButton = DirectCast(sender, ToolStripButton)
    44. Form6.DataGridView2.Show()
    45. End Sub

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „SerkanLives“ ()

    Willkommen im Forum.

    Viel zu tun, aber zuerst zu den Problemen.

    SerkanLives schrieb:

    So hab ich es davor gemacht und so funktionierts:
    Da ist kein auf Anhieb ins Auge stechender Bezug zu einer ComboBox. Schwierig zu sagen, warum es da klappt, wenn der Bezug fehlt.

    SerkanLives schrieb:

    Wenn ich eine For Each Schleife hinzufüge passiert garnichts.
    Unwirksam, wenn die ComboBoxen nicht auf dem Form direkt liegen, sondern in einem Container (Panel, TabControl, GroupBox, ...; Da gehören dann zu Me.Controls nur die Container, aber die ComboBoxen gehören zu den Controls des entsprechenden Containers.

    SerkanLives schrieb:

    Habe ich derzeit keine Lösung, wie ich die DataSets abspeichere. Als ich die Datenbanken über die VBA Nutzeroberfläche verknüpft hatte (also nicht im Runtime), hatte ich es irgendwie hinbekommen, dass die Datenbanken live verbunden und geupdated wurden, durch BindingSources evtl.? Wenn ja, wie erstelle ich bzw. verknüpfe ich sowas mit meinem DataSet in Runtime?

    DataSets sind (mächtige und umfangreiche) Klassen. Die werden nicht gespeichert. Ein DataSet beinhaltet DataTables und die enthalten Daten und diese Daten kann man abspeichern. Das Verknüpfen von BijndingSource und DataSet/DataTable ist sehr einfach. Aber dafür ist viel zu viel Code gepostet, um da eine für Dich passende Lösung anbieten zu können. Grundsätzlich: BindingSource.DataSource = DeinDataSet: BindingSource.DataMember = "NameDeinerDataTable"

    Literaturempfehlung und Co.:
    Wenn Du in Visual Studio unterwegs bist, dann geht es nicht um VBA, sondern um VB.Net. VBA sind Makros in Word, Excel und Co. DGV, DataSet und AddHandler sind VB.Net.
    Kümmer Dich um eine saubere Benennung Deiner CEs und Forms. Form6? DataGridView2? Da blickt doch keiner durch.
    Dialoge richtig instanziieren
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    Hey VaporiZed,

    danke dir für deine Antwort und ja, wie gesagt, man kann es sauberer machen, das wird auch alles sauberer gemacht.


    VaporiZed schrieb:

    Da ist kein auf Anhieb ins Auge stechender Bezug zu einer ComboBox. Schwierig zu sagen, warum es da klappt, wenn der Bezug fehlt.


    Die Combobox heißt Prozess1, demnach

    VB.NET-Quellcode

    1. If Prozess1.Text <> "xyz" Then
    .
    Bezug ist vorhanden durch

    VB.NET-Quellcode

    1. Dim Fr As New OleDb.OleDbDataAdapter("SELECT * FROM Fragekatalog WHERE (" & Prozess1.Text & "=True)", ConnectionOLE)
    . In der Tabelle Fragekatalog sind die Prozesse nochmal in Spalten vorhanden, die durch ne Checkbox auf TRUE oder FALSE gesetzt werden können und sind so den jeweiligen Fragen zugeordnet.



    VaporiZed schrieb:

    Unwirksam, wenn die ComboBoxen nicht auf dem Form direkt liegen, sondern in einem Container (Panel, TabControl, GroupBox, ...; Da gehören dann zu Me.Controls nur die Container, aber die ComboBoxen gehören zu den Controls des entsprechenden Containers.


    Ich hab jetzt versucht, die Me.Controls Funktion zu umgehen & hab jetzt eine Liste von Comboboxen erstellt, und diese dann in eine Schleife eingepackt, was auch funktioniert

    VB.NET-Quellcode

    1. Dim Combobox As New List(Of ComboBox)
    2. Combobox.Add(Prozess1)
    3. Combobox.Add(Prozess2)
    4. Combobox.Add(Prozess3)
    5. Combobox.Add(Prozess4)
    6. Combobox.Add(Prozess5)
    7. Combobox.Add(Prozess6)
    8. Combobox.Add(Prozess7)
    9. Combobox.Add(Prozess8)
    10. Combobox.Add(Prozess9)
    11. Combobox.Add(Prozess10)
    12. Combobox.Add(Prozess11)
    13. Combobox.Add(Prozess12)
    14. Combobox.Add(Prozess13)
    15. Combobox.Add(Prozess14)
    16. Combobox.Add(Prozess15)
    17. Combobox.Add(Prozess16)
    18. Combobox.Add(Prozess17)
    19. Combobox.Add(Prozess18)
    20. Combobox.Add(Prozess19)
    21. Combobox.Add(Prozess20)
    22. Combobox.Add(Prozess21)
    23. Combobox.Add(Prozess22)
    24. Combobox.Add(Prozess23)
    25. Combobox.Add(Prozess24)
    26. Combobox.Add(Prozess25)
    27. Combobox.Add(Prozess26)
    28. Combobox.Add(Prozess27)
    29. Combobox.Add(Prozess28)
    30. Combobox.Add(Prozess29)
    31. Combobox.Add(Prozess30)
    32. Combobox.Add(Prozess31)
    33. For Each Prozess As ComboBox In Combobox
    34. If Prozess.Text <> "Bitte Prozess angeben" Then
    35. Dim Tabelle As ADOX.Table
    36. Tabelle = New ADOX.Table
    37. Connection = Catalog.ActiveConnection
    38. Tabelle.Name = AG1.Text + Name1.Text
    39. Tabelle.Columns.Append("Checkpunkte", ADOX.DataTypeEnum.adVarWChar,)
    40. Tabelle.Columns.Append("Ja", ADOX.DataTypeEnum.adBoolean,)
    41. Tabelle.Columns.Append("Nein", ADOX.DataTypeEnum.adBoolean,)
    42. Catalog.Tables.Append(Tabelle)
    43. Dim ConnectionOLE2 As New OleDb.OleDbConnection("Provider = Microsoft.ACE.OLEDB.12.0;Data Source=\\xyz\Documents\Linien\" & DatabaseName & ".accdb")
    44. Dim da As New OleDb.OleDbDataAdapter("SELECT * FROM Fragekatalog WHERE (" & Prozess.Text & " = TRUE)", ConnectionOLE)
    45. TabelleName = AG1.Text + Name1.Text
    46. da.InsertCommand = New OleDb.OleDbCommand("INSERT INTO " & TabelleName & " (Checkpunkte,Ja,Nein) VALUES (@Checkpunkte, @Ja, @Nein)", ConnectionOLE2)
    47. da.InsertCommand.Parameters.Add("@Checkpunkte", OleDb.OleDbType.VarChar, 50, "Checkpunkte")
    48. da.InsertCommand.Parameters.Add("@Ja", OleDb.OleDbType.Boolean, 8, "Ja")
    49. da.InsertCommand.Parameters.Add("@Nein", OleDb.OleDbType.Boolean, 8, "Nein")
    50. da.AcceptChangesDuringFill = False
    51. da.Fill(dt)
    52. Dim Button As New ToolStripButton
    53. Button.Text = Prozess.Text
    54. Form6.FragenAllgemeinToolStrip.Items.Add(Button)
    55. Button.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text
    56. Button.ImageTransparentColor = System.Drawing.Color.Magenta
    57. Button.Name = "Button"
    58. Button.Size = New System.Drawing.Size(60, 29)
    59. Dim dt1 As New DataSet
    60. Dim Fr As New OleDb.OleDbDataAdapter("SELECT * FROM Fragekatalog WHERE (" & Prozess.Text & "=True)", ConnectionOLE)
    61. Fr.Fill(dt1)
    62. Form6.DataGridView2.DataSource = dt1.Tables(0)
    63. AddHandler Button.Click, AddressOf HandleDynamicButtonClick
    64. da.Update(dt)
    65. Tabelle = Nothing
    66. End If
    67. Next

    Jetzt ist halt noch die Sache, dass die Tabellennamen

    VB.NET-Quellcode

    1. Tabelle.Name = AG1.Text + Name1.Text
    auch in eine Schleife sollen und den Comboboxen zugeordnet werden sollen --> Für Prozess1 -> Ag1 + Name1, Für Prozess2 -> Ag2 + Name2 usw., nur habe ich keinen blassen Schimmer wie das funktionieren soll.

    EDIT:

    Ich hab es jetzt folgendermaßen versucht, jedoch spuckt er mir den Fehler: "Table ID is invalid" aus..

    VB.NET-Quellcode

    1. Dim Connection As ADODB.Connection
    2. Dim TabelleName As String
    3. Connection = New ADODB.Connection
    4. Combobox.Add(Prozess1)
    5. Combobox.Add(Prozess2)
    6. Combobox.Add(Prozess3)
    7. Combobox.Add(Prozess4)
    8. Combobox.Add(Prozess5)
    9. Combobox.Add(Prozess6)
    10. Combobox.Add(Prozess7)
    11. Combobox.Add(Prozess8)
    12. Combobox.Add(Prozess9)
    13. Combobox.Add(Prozess10)
    14. Combobox.Add(Prozess11)
    15. Combobox.Add(Prozess12)
    16. Combobox.Add(Prozess13)
    17. Combobox.Add(Prozess14)
    18. Combobox.Add(Prozess15)
    19. Combobox.Add(Prozess16)
    20. Combobox.Add(Prozess17)
    21. Combobox.Add(Prozess18)
    22. Combobox.Add(Prozess19)
    23. Combobox.Add(Prozess20)
    24. Combobox.Add(Prozess21)
    25. Combobox.Add(Prozess22)
    26. Combobox.Add(Prozess23)
    27. Combobox.Add(Prozess24)
    28. Combobox.Add(Prozess25)
    29. Combobox.Add(Prozess26)
    30. Combobox.Add(Prozess27)
    31. Combobox.Add(Prozess28)
    32. Combobox.Add(Prozess29)
    33. Combobox.Add(Prozess30)
    34. Combobox.Add(Prozess31)
    35. Combobox.Add(Prozess32)
    36. Dim Name As New List(Of String)
    37. Name.Add(Name1.Text)
    38. Name.Add(Name2.Text)
    39. Name.Add(Name3.Text)
    40. Name.Add(Name4.Text)
    41. Name.Add(Name5.Text)
    42. Name.Add(Name6.Text)
    43. Name.Add(Name7.Text)
    44. Name.Add(Name8.Text)
    45. Name.Add(Name9.Text)
    46. Name.Add(Name10.Text)
    47. Name.Add(Name11.Text)
    48. Name.Add(Name12.Text)
    49. Name.Add(Name13.Text)
    50. Name.Add(Name14.Text)
    51. Name.Add(Name15.Text)
    52. Name.Add(Name16.Text)
    53. Name.Add(Name17.Text)
    54. Name.Add(Name18.Text)
    55. Name.Add(Name19.Text)
    56. Name.Add(Name20.Text)
    57. Name.Add(Name21.Text)
    58. Name.Add(Name22.Text)
    59. Name.Add(Name23.Text)
    60. Name.Add(Name24.Text)
    61. Name.Add(Name25.Text)
    62. Name.Add(Name26.Text)
    63. Name.Add(Name27.Text)
    64. Name.Add(Name28.Text)
    65. Name.Add(Name29.Text)
    66. Name.Add(Name30.Text)
    67. Name.Add(Name31.Text)
    68. Name.Add(Name32.Text)
    69. For Each Prozess As ComboBox In Combobox
    70. If Prozess.Text <> "Bitte Prozess angeben" Then
    71. For i = 0 To 31
    72. 'Tabelle erstellen
    73. Dim Tabelle As ADOX.Table
    74. Tabelle = New ADOX.Table
    75. Connection = Form1.Catalog.ActiveConnection
    76. Tabelle.Columns.Append("Checkpunkte", ADOX.DataTypeEnum.adVarWChar,)
    77. Tabelle.Columns.Append("Ja", ADOX.DataTypeEnum.adBoolean,)
    78. Tabelle.Columns.Append("Nein", ADOX.DataTypeEnum.adBoolean,)
    79. Form1.Catalog.Tables.Append(Tabelle)
    80. 'Tabelle mit Fragen füllen
    81. Dim ConnectionOLE2 As New OleDb.OleDbConnection("Provider = Microsoft.ACE.OLEDB.12.0;Data Source=xyz\Documents\Linien\" & DatabaseName & ".accdb")
    82. Dim da As New OleDb.OleDbDataAdapter("SELECT * FROM Fragekatalog WHERE (" & Prozess.Text & " = TRUE)", ConnectionOLE)
    83. TabelleName = Name.Item(i)
    84. da.InsertCommand = New OleDb.OleDbCommand("INSERT INTO " & TabelleName & " (Checkpunkte,Ja,Nein) VALUES (@Checkpunkte, @Ja, @Nein)", ConnectionOLE2)
    85. da.InsertCommand.Parameters.Add("@Checkpunkte", OleDb.OleDbType.VarChar, 50, "Checkpunkte")
    86. da.InsertCommand.Parameters.Add("@Ja", OleDb.OleDbType.Boolean, 8, "Ja")
    87. da.InsertCommand.Parameters.Add("@Nein", OleDb.OleDbType.Boolean, 8, "Nein")
    88. da.AcceptChangesDuringFill = False
    89. da.Fill(dt)
    90. 'Button für die Tabelle erstellen
    91. Dim Button As New ToolStripButton
    92. Button.Text = Name.Item(i)
    93. Fragebogen.FragenAllgemeinToolStrip.Items.Add(Button)
    94. Button.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text
    95. Button.ImageTransparentColor = System.Drawing.Color.Magenta
    96. Button.Name = "Button"
    97. Button.Size = New System.Drawing.Size(60, 29)
    98. 'Button mit der Tabelle verknüpfen
    99. Dim Fr As New OleDb.OleDbDataAdapter("SELECT * FROM Fragekatalog WHERE (" & Prozess.Text & "=True)", ConnectionOLE)
    100. Fr.Fill(dt1)
    101. AddHandler Button.Click, AddressOf HandleDynamicButtonClick
    102. Tabelle = Nothing
    103. Next
    104. Else
    105. End If
    106. Next


    Die Bindingsource zum live Updaten der Datenbank (wenn das überhaupt so funktioniert, hab ich noch nicht kontrollieren können) ist jetzt in die nächste Form Fragebogen gewandert:

    VB.NET-Quellcode

    1. Private Sub Fragebogen_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. Dim Binding As New BindingSource
    3. Binding.DataSource = Form2.dt1
    4. Me.DataGridView2.DataSource = Binding
    5. End Sub


    Ich danke nochmal für die Unterstützung!

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „SerkanLives“ ()