No se actualiza un campo en VB.NET
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
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
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?
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?