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:
So hab ich es davor gemacht und so funktionierts:
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:
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:
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
- For Each Control As Control In Me.Controls
- If TypeOf Control Is ComboBox Then
- If Control.Text <> "Bitte Prozess angeben" Then
- Connection = Catalog.ActiveConnection
- Tabelle.Name = Control.Text
- Tabelle.Columns.Append("Checkpunkte", ADOX.DataTypeEnum.adVarWChar,)
- Tabelle.Columns.Append("Ja", ADOX.DataTypeEnum.adBoolean,)
- Tabelle.Columns.Append("Nein", ADOX.DataTypeEnum.adBoolean,)
- Catalog.Tables.Append(Tabelle)
- Dim ConnectionOLE2 As New OleDb.OleDbConnection("Provider = Microsoft.ACE.OLEDB.12.0;Data Source=xyz\Documents\Linien\" & DatabaseName & ".accdb")
- Dim da As New OleDb.OleDbDataAdapter("SELECT * FROM Fragekatalog WHERE (" & Control.Text & " = TRUE)", ConnectionOLE)
- TabelleName = Control.Text
- da.InsertCommand = New OleDb.OleDbCommand("INSERT INTO " & TabelleName & " (Checkpunkte,Ja,Nein) VALUES (@Checkpunkte, @Ja, @Nein)", ConnectionOLE2)
- da.InsertCommand.Parameters.Add("@Checkpunkte", OleDb.OleDbType.VarChar, 50, "Checkpunkte")
- da.InsertCommand.Parameters.Add("@Ja", OleDb.OleDbType.Boolean, 8, "Ja")
- da.InsertCommand.Parameters.Add("@Nein", OleDb.OleDbType.Boolean, 8, "Nein")
- da.AcceptChangesDuringFill = False
- da.Fill(dt)
- Dim Button As New ToolStripButton
- Button.Text = Control.Text
- Form6.FragenAllgemeinToolStrip.Items.Add(Button)
- Button.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text
- Button.ImageTransparentColor = System.Drawing.Color.Magenta
- Button.Name = "Button"
- Button.Size = New System.Drawing.Size(60, 29)
- Dim dt1 As New DataSet
- Dim Fr As New OleDb.OleDbDataAdapter("SELECT * FROM Fragekatalog WHERE (" & Control.Text & "=True)", ConnectionOLE)
- Fr.Fill(dt1)
- Form6.DataGridView2.DataSource = dt1.Tables(0)
- AddHandler Button.Click, AddressOf HandleDynamicButtonClick
- da.Update(dt)
- Else
- End If
- End If
- Next
So hab ich es davor gemacht und so funktionierts:
VB.NET-Quellcode
- If Prozess1.Text <> "Bitte Prozess angeben" Then
- Connection = Catalog.ActiveConnection
- Tabelle.Name = Prozess1.Text
- Tabelle.Columns.Append("Checkpunkte", ADOX.DataTypeEnum.adVarWChar,)
- Tabelle.Columns.Append("Ja", ADOX.DataTypeEnum.adBoolean,)
- Tabelle.Columns.Append("Nein", ADOX.DataTypeEnum.adBoolean,)
- Catalog.Tables.Append(Tabelle)
- Dim ConnectionOLE2 As New OleDb.OleDbConnection("Provider = Microsoft.ACE.OLEDB.12.0;Data Source=xyz\Documents\Linien\" & DatabaseName & ".accdb")
- Dim da As New OleDb.OleDbDataAdapter("SELECT * FROM Fragekatalog WHERE (" & Prozess1.Text & " = TRUE)", ConnectionOLE)
- TabelleName = Prozess1.Text
- da.InsertCommand = New OleDb.OleDbCommand("INSERT INTO " & TabelleName & " (Checkpunkte,Ja,Nein) VALUES (@Checkpunkte, @Ja, @Nein)", ConnectionOLE2)
- da.InsertCommand.Parameters.Add("@Checkpunkte", OleDb.OleDbType.VarChar, 50, "Checkpunkte")
- da.InsertCommand.Parameters.Add("@Ja", OleDb.OleDbType.Boolean, 8, "Ja")
- da.InsertCommand.Parameters.Add("@Nein", OleDb.OleDbType.Boolean, 8, "Nein")
- da.AcceptChangesDuringFill = False
- da.Fill(dt)
- Dim Button As New ToolStripButton
- Button.Text = Prozess1.Text
- Form6.FragenAllgemeinToolStrip.Items.Add(Button)
- Button.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text
- Button.ImageTransparentColor = System.Drawing.Color.Magenta
- Button.Name = "Button"
- Button.Size = New System.Drawing.Size(60, 29)
- Dim dt1 As New DataSet
- Dim Fr As New OleDb.OleDbDataAdapter("SELECT * FROM Fragekatalog WHERE (" & Prozess1.Text & "=True)", ConnectionOLE)
- Fr.Fill(dt1)
- Form6.DataGridView2.DataSource = dt1.Tables(0)
- AddHandler Button.Click, AddressOf HandleDynamicButtonClick
- da.Update(dt)
- Else
- 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
- Dim Button As New ToolStripButton
- Button.Text = Prozess1.Text
- Form6.FragenAllgemeinToolStrip.Items.Add(Button)
- Button.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text
- Button.ImageTransparentColor = System.Drawing.Color.Magenta
- Button.Name = "Button"
- Button.Size = New System.Drawing.Size(60, 29)
- Dim dt1 As New DataSet
- Dim Fr As New OleDb.OleDbDataAdapter("SELECT * FROM Fragekatalog WHERE (" & Prozess1.Text & "=True)", ConnectionOLE)
- Fr.Fill(dt1)
- Form6.DataGridView2.DataSource = dt1.Tables(0)
- AddHandler Button.Click, AddressOf HandleDynamicButtonClick
- Else
- EndIf
- Private Sub HandleDynamicButtonClick(ByVal sender As Object, ByVal e As EventArgs)
- Dim Button As ToolStripButton = DirectCast(sender, ToolStripButton)
- Form6.DataGridView2.Show()
- 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
- Dim Connection As ADODB.Connection
- Dim Tabelle As ADOX.Table
- Dim TabelleName As String
- Dim ProzessName1 As String
- Connection = New ADODB.Connection
- Catalog = New ADOX.Catalog
- Tabelle = New ADOX.Table
- ProzessName1 = Me.Prozess1.Text
- DatabaseName = Form1.TextBox5.Text
- Catalog.Create("Provider = Microsoft.ACE.OLEDB.12.0;Data Source=xyz\Linien\" & DatabaseName & ".accdb")
- If Prozess1.Text <> "Bitte Prozess angeben" Then
- Connection = Catalog.ActiveConnection
- Tabelle.Name = Prozess1.Text
- Tabelle.Columns.Append("Checkpunkte", ADOX.DataTypeEnum.adVarWChar,)
- Tabelle.Columns.Append("Ja", ADOX.DataTypeEnum.adBoolean,)
- Tabelle.Columns.Append("Nein", ADOX.DataTypeEnum.adBoolean,)
- Catalog.Tables.Append(Tabelle)
- Dim ConnectionOLE2 As New OleDb.OleDbConnection("Provider = Microsoft.ACE.OLEDB.12.0;Data Source=xyz\Documents\Linien\" & DatabaseName & ".accdb")
- Dim da As New OleDb.OleDbDataAdapter("SELECT * FROM Fragekatalog WHERE (" & Prozess1.Text & " = TRUE)", ConnectionOLE)
- TabelleName = Prozess1.Text
- da.InsertCommand = New OleDb.OleDbCommand("INSERT INTO " & TabelleName & " (Checkpunkte,Ja,Nein) VALUES (@Checkpunkte, @Ja, @Nein)", ConnectionOLE2)
- da.InsertCommand.Parameters.Add("@Checkpunkte", OleDb.OleDbType.VarChar, 50, "Checkpunkte")
- da.InsertCommand.Parameters.Add("@Ja", OleDb.OleDbType.Boolean, 8, "Ja")
- da.InsertCommand.Parameters.Add("@Nein", OleDb.OleDbType.Boolean, 8, "Nein")
- da.AcceptChangesDuringFill = False
- da.Fill(dt)
- Dim Button As New ToolStripButton
- Button.Text = Prozess1.Text
- Form6.FragenAllgemeinToolStrip.Items.Add(Button)
- Button.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text
- Button.ImageTransparentColor = System.Drawing.Color.Magenta
- Button.Name = "Button"
- Button.Size = New System.Drawing.Size(60, 29)
- Dim dt1 As New DataSet
- Dim Fr As New OleDb.OleDbDataAdapter("SELECT * FROM Fragekatalog WHERE (" & Prozess1.Text & "=True)", ConnectionOLE)
- Fr.Fill(dt1)
- Form6.DataGridView2.DataSource = dt1.Tables(0)
- AddHandler Button.Click, AddressOf HandleDynamicButtonClick
- da.Update(dt)
- Else
- End If
- Private Sub HandleDynamicButtonClick(ByVal sender As Object, ByVal e As EventArgs)
- Dim Button As ToolStripButton = DirectCast(sender, ToolStripButton)
- Form6.DataGridView2.Show()
- End Sub
Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „SerkanLives“ ()