No se actualiza un campo en VB.NET

Tucki
11 de Abril del 2004
Hola a todos.
Estoy desarrollando un programa en Visual Basic.Net, en el cual tengo dos tablas relacionadas por un campo numérico (no autonumérico), el cual es la clave primaria de la tabla maestra. En el dataset he puesto el campo que relaciona ambas tablas como sigue:
autoincrement = true, seed = -1, step = -1.

Lo que me interesa es que a la hora de insertar una fila en la tabla maestra, coja el max(valor_campo) + 1 para la clave primaria, lo cual pensaba resolverlo mediante el evento RowUpdated. Al codificarlo, recupero el valor correcto de la base de datos y lo asigno a la clave primaria de la tabla en el dataset, lo cual aparentemente se hace bien, ya que el textbox pasa de tener el identificador temporal proporcionado por VB (-1, -2...) al que le correspondería en la base de datos. Pero si recupero los datos, en la base de datos no ha llegado a almacenarse el valor correcto, sino el temporal.

¿Alguien sabe cómo solucionar esto?

Gracias

Tras vincular varios textbox y un datagrid a los diferentes campos de las tablas, trato de insertar una fila de la tabla maestra. en esa

Tucki
11 de Abril del 2004
Más sencillo

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim nwindConn As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=c:etcdatos.mdb;")


' Use the DataAdapter to fill and update the DataSet.
Dim catDA As OleDbDataAdapter = New OleDbDataAdapter("SELECT num_bits, notas FROM bits ORDER BY num_bits", nwindConn)

catDA.InsertCommand = New OleDbCommand("INSERT INTO bits (notas) Values(?)", nwindConn)
catDA.InsertCommand.CommandType = CommandType.Text

catDA.InsertCommand.Parameters.Add("@notas", OleDbType.Char, 15, "notas")

nwindConn.Open()

' Fill the DataSet.
Dim catDS As DataSet = New DataSet()
catDA.Fill(catDS, "bits")

' Add a new row.
Dim newRow As DataRow = catDS.Tables("bits").NewRow()
newRow("notas") = "prueba"
catDS.Tables("bits").Rows.Add(newRow)

' Include an event to fill in the Autonumber value.
AddHandler catDA.RowUpdated, New OleDbRowUpdatedEventHandler(AddressOf OnRowUpdated)

' Update the DataSet.
catDA.Update(catDS, "bits")

nwindConn.Close()
MsgBox("ya")
End Sub

Private Sub OnRowUpdated(ByVal sender As Object, ByVal args As OleDbRowUpdatedEventArgs)
' Include a variable and a command to retrieve the identity value from the Access database.
Dim newID As Integer = 0
'Dim idCMD As OleDbCommand = New OleDbCommand("SELECT max(num_bits)+1 from bits", nwindConn)
MsgBox("dentro")
If args.StatementType = StatementType.Insert Then
' Retrieve the identity value and store it in the CategoryID column.
'newID = CInt(idCMD.ExecuteScalar())
args.Row("num_bits") = 100
End If
End Sub

Este programa debería grabar el valor 100 en el campo num_bits del nuevo registro de la tabla bits, pero no lo hace.

El código está copiado y pegado de un ejemplo de MS, y sólo he cambiado los nombres de los campos y las tablas.

¿Alguna sugerencia?