Hallo zusammen,
zu Lernzwecken baue ich oft Programme aus dem Forum bzw. meiner Lektüren nach. Nun hänge ich schon zweit Tage ein einem Problem mit dem DataAdapter und .update.
Der Code schien mir einfach und verständlich, leider tut er nicht das was er soll.
Vom Ablauf her habe ich es so verstanden:
DataSet füllen -> Quelle ändern -> DataSet ändern -> upDaten und dadurch Fehler erzeugen die ausgewertet werden können ... und an der Stelle hängt es.
Eigentlich sollte doch, da DataSet und DB nicht gleich sind ein Fehler auftauchen. Passiert aber nicht. Die DB wird aktualisiert und gut ist. die vorher in der Quelle durchgeführte Änderung wird überschrieben.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles cmdTestUpdate.Click
Dim con As OleDbConnection = New OleDbConnection()
con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; " & " & _
"Data Source = " & Verz & "\data\sst.mdb"
Dim cmd As OleDbCommand = New OleDbCommand()
cmd.CommandText = "select strFehlerKennung, strMaschine," & _
"strMontageNummer, strFehler from tblFehler " & _
"where strMontageNummer = " & Chr(34) & "1234" & Chr( _
34)
cmd.Connection = con
Dim ds As DataSet = New DataSet()
Dim da As New OleDbDataAdapter(cmd.CommandText, con)
' Einlesen Dataset
con.Open()
da.FillSchema(ds, SchemaType.Source)
da.Fill(ds)
con.Close()
' Änderung in Quelle
cmd.CommandText = "UPDATE tblFehler SET strFehler = 'geändert in" & _
"Quelle' WHERE strMontageNummer='1234'"
con.Open()
cmd.ExecuteNonQuery()
con.Close()
' Änderung in Dataset
ds.Tables(0).Select("strMontageNummer=1234")(0)("strFehler") = _
"geändert über Dataset"
' updaten
da.UpdateCommand = CreateUpdateCommand(con)
' True oder False bringt keinen Unterschied
da.ContinueUpdateOnError = False
da.Update(ds)
' ds.HasErrors müsste jetzt doch eigentlich auf True stehen ???
If ds.HasErrors Then
MsgBox("Fehler")
End If
End Sub
Function CreateUpdateCommand(ByVal con As OleDbConnection) As DbCommand
Dim cmd As DbCommand = New OleDbCommand()
cmd.CommandText = "UPDATE tblFehler " & _
"SET strFehlerKennung = @fhlKng, strMontageNummer=@mtgNr," & _
"strMaschine=@masch, strFehler=@fehler " & _
"WHERE strMontageNummer=@mtgKng"
cmd.Connection = con
Dim col As DbParameterCollection = cmd.Parameters
col.Add(New OleDbParameter("@fhlKng", OleDb.OleDbType.VarChar, 256, _
"strFehlerKennung"))
col.Add(New OleDbParameter("@mtgNr", OleDb.OleDbType.VarChar, 256, _
"strMontageNummer"))
col.Add(New OleDbParameter("@masch", OleDb.OleDbType.VarChar, 256, _
"strMaschine"))
col.Add(New OleDbParameter("@fehler", OleDb.OleDbType.VarChar, 256, _
"strFehler"))
Dim param As OleDbParameter = New OleDbParameter("@mtgKng", _
OleDb.OleDbType.VarChar, 256, "strMontageNummer")
col.Add(param)
param.SourceVersion = DataRowVersion.Original
Return cmd
End Function Normalerweise wünscht man sich keine Paralellitästverletzung, aber hier hätte ich das gerne verstanden.
Für jede Hilfe dankbar.
Gru? asam |