Hallo.
Ich habe mir ein kleines Programm geschrieben, dass einen Access Datensatz lädt. Man kann die Werte dann in einem DataGrid anschauen, und mit Hilfe von ein paar Button durchscrollen, sowie die Werte in Text Boxen verändern und abspeichern. Hat auch alles wunderbar geklappt. Hier der Code:
Private Sub save()
Dim strConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;" _
& _
"Data Source=D:\Eigene Dateien\Access Datenbanken\Galileo.mdb"
Dim connection As OleDb.OleDbConnection = New OleDb.OleDbConnection( _
strConnectionString)
connection.Open()
Dim dataAdapter = New OleDb.OleDbDataAdapter("SELECT * FROM t_Kunden", _
connection)
Dim commandBuilder As New OleDb.OleDbCommandBuilder(dataAdapter)
Try
dataAdapter.Update(dataSet, "t_Kunden")
Catch ex As Exception
MessageBox.Show(ex.Message, "Fehler", _
MessageBoxButtons.OK, _
MessageBoxIcon.Error)
End Try
connection.Close()
End Sub So jetzt hab ich mir gedacht ich generalisier das etwas und zwar wie folgt:
Es gibt ein main form in dem die Datenbank angezeigt wird, dann kann man auf einen kleinen Button 'Edit' klicken und man erhält ein neues Form, indem der aktuell ausgewählte Datensatz angezeigt wird. DataView ist in beiden Forms global als Public gespeichert, DataSet im ersten ebenfalls - damit die beiden wieder übergeben werden können, also wenn ich das edit fenster öffne, dann frmEditCustomers = new frmEditCustomers
frmEditCustomers.dataViewCustomers = Me.dataViewCustomers
frmEditCustomers.Visible = True Eben dieses Edit Fenster besitzt auch einen speicher button, der wie folgt aufgerufen wird:
Private Sub butSave_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles butSave.Click
Call clsDataBase.save(frmMain.strDatabase, frmMain.dataSetCustomers, _
"t_Customers")
End Sub Das frmMain.dataSetCustomers verändert sich offensichtlich übrigens mit, wenn ich etwas ändere, deswegen wars auch nicht nötig das nochmal im frmEditCustomers zu definieren
Die clsDataBase.save sieht so aus:
Public Sub save(ByVal strDatabase As String, _
ByVal dataSet As DataSet, _
ByVal strTable As String)
Dim strConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;" _
& _
"Data Source=" & strDatabase
Dim connection As OleDb.OleDbConnection = _
New OleDb.OleDbConnection(strConnectionString)
connection.Open()
Dim dataAdapter = _
New OleDb.OleDbDataAdapter("SELECT * FROM " & strTable, connection)
Dim commandBuilder As New OleDb.OleDbCommandBuilder(dataAdapter)
Try
dataAdapter.Update(dataSet, strTable)
Catch ex As Exception
MessageBox.Show(ex.Message, "Fehler", _
MessageBoxButtons.OK, _
MessageBoxIcon.Error)
End Try
connection.Close()
End Sub Also im Prinzip genau so wie die Methode die ich in dem anderen Programm benutzt habe(siehe oben) nur dass eben gewisse Werte mit übergeben werden.
Und jedes mal wenn ich diese Methode aufrufe bekomme ich den fehler "Für mindestens einen erforderlichen Parameter wurde kein Wert angegeben"
und gezeigt wird auf die Zeile dataAdapter.Update(dataSet, strTable) Die open Methode, die fast genauso ausschaut (nur dass da dataset und dataview als ref übergeben werden und die keinen update sonder eben einen fill command hat) funktioniert tadellos!
Weiß jemand wo das Problem ist? |