Foros del Web » Programación para mayores de 30 ;) » .NET »

Problema con una transacción "Actualmente este elemento está bloqueado"

Estas en el tema de Problema con una transacción "Actualmente este elemento está bloqueado" en el foro de .NET en Foros del Web. Hola amigos, Estoy trabajando con transacciones ahora por primera vez y tengo un pequeño problema, el cual parecen no ayudarme para nada ni los tutoriales ...
  #1 (permalink)  
Antiguo 10/10/2006, 02:29
Avatar de SuperPinwi  
Fecha de Ingreso: septiembre-2005
Mensajes: 317
Antigüedad: 18 años, 7 meses
Puntos: 1
Problema con una transacción "Actualmente este elemento está bloqueado"

Hola amigos,

Estoy trabajando con transacciones ahora por primera vez y tengo un pequeño problema, el cual parecen no ayudarme para nada ni los tutoriales sobre transacciones ni la información que he podido encontrar a través de la red.

El caso es que el problema viene a la hora de actualizar una base de datos. Lo hacía perfectamente antes de incluir transacciones pero ahora ya no lo hace porque salta una excepción con este error:

"No se puede actualizar; actualmente este elemento está bloqueado"

¿Sabéis alguna posible causa?

Gracias anticipadas

Pd: Aquí os dejo un fragmento del código por si sirve de ayuda:

Código:
'HILO ACTUALIZA BASE DE DATOS
    'descripción: se encarga de actualizar la base de datos cada cierto
    'tiempo, según un valor introducido por un usuario en un campo de 
    'texto
    Public Shared Sub EjecutaHiloActualizaBD()
        'Objeto que inicia la conexión a la base de datos
        Dim objConn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\SuperPinwi\Mis documentos\Mis bases de datos\numeros\numeros.mdb")
        'Objeto que permite realizar conexiones con la base de datos
        Dim objAcciones As New OleDbCommand
        'Tabla de datos en la cual se almacenarán los datos de la base de datos
        Dim dt As DataTable
        'Objeto adaptador entre el código y la base de datos
        Dim objAdapter As OleDbDataAdapter = New OleDbDataAdapter
        'Objeto que permite actualizar la base de datos
        Dim OleDbUpdateCommand As OleDbCommand = New OleDbCommand
        'Variable que permite establecer datos
        Dim miDataSet As New DataSet
        'Variable de bucle
        Dim i As Integer
        'Para conocer el número de filas
        Dim n As Integer
        'Cadenas temporales para nombre y numero
        Dim sNombre As String
        Dim nNumero As Integer
        Dim idN As Integer
        'Variable temporal para el almacenamiento de filas de la base de datos
        Dim dr As DataRow
        'Variable de bucle que recorre las filas
        Dim fila As Integer
        'Variable temporal en la que se almacena el valor con el cual se ha de actualizar la base de datos
        Dim porcentaje2 As Integer
        'Variable utilizada para pasar a la fila siguiente de la base de datos
        Dim identificador As Integer
        'Variable de manejo de la transacción
        Dim Transaccion As OleDbTransaction
        'Dim Transaccion2 As OleDbTransaction

        Try
            'Se abre la conexión
            objConn.Open()
            objAdapter = New OleDbDataAdapter("SELECT * FROM numeros ORDER BY numero", objConn)
            'Se asigna un manejador al objeto de acciones y al objeto adaptador
            objAcciones.Connection = objConn
            'Inicio de la transacción
            Transaccion = objConn.BeginTransaction()
            OleDbUpdateCommand.Connection = objConn
            OleDbUpdateCommand.Transaction = Transaccion
            objAcciones.Transaction = Transaccion
            'Transaccion = objConn.BeginTransaction()
            'OleDbUpdateCommand.Connection = objConn
            objAdapter.UpdateCommand = OleDbUpdateCommand
            objAdapter.UpdateCommand.Transaction = Transaccion
            objAdapter.SelectCommand.Transaction = Transaccion
            dt = New DataTable
            objAdapter.Fill(dt)
            'Se guarda el número de filas de la base de datos en n
            n = dt.Rows.Count
            If n = 0 Then
                MessageBox.Show("No se ha encontrado ningún registro que coincida con la selección")
            Else
                'Controla que el valor que se ha introducido en el campo de texto sea numérico
                If IsNumeric(TxtBxPorcentaje.Text) = True Then
                    For Each dr In dt.Rows                        
                        idN = dr("ID")
                        'obtenemos el valor que se haya en el campo número de la fila actual de la base de datos
                        nNumero = dr("numero")
                        'hallamos el valor por el que se ha de sustituir lo que se encuentra en la fila actual
                        porcentaje2 = nNumero + TxtBxPorcentaje.Text
                        'Ejecutamos la consulta SQL de actualización de la base de datos
                        OleDbUpdateCommand.CommandText = "UPDATE Numeros SET numero = " & porcentaje2 & " WHERE ID = " & idN
                        OleDbUpdateCommand.ExecuteNonQuery() -- ERROR
                    Next
                Else
                    MessageBox.Show("El valor que ha introducido para actualizar la base de datos no es válido, recuerde que debe ser de tipo númerico", "Aviso")
                End If
                Transaccion.Commit()
                MessageBox.Show("BD Actualizada con éxito")
            End If
        Catch dcbx As DBConcurrencyException
            MessageBox.Show("Error de concurrencia " & Err.Description, "Información del sistema")
        Catch ex As Exception
            'en el caso de que haya algún problema, se muestra un aviso con la información del error
            Transaccion.Rollback()
            MessageBox.Show(Err.Description, "Información del sistema")
        Finally
            'Cierra la conexión
            objConn.Close()
        End Try
    End Sub
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:30.