Los foros del Guille

Ya está a la venta Novedades de Visual Basic 9.0

Si no encuentras respuesta, puedes buscar en el sitio del Guille

Google
 
Selecciona el foro y pulsa en mostrar:     Mostrar 
De tu interés (algunos de los avisos publicados)

12/ago/2006
Leete esto, http://www.di.uniovi.es/~cernuda/noprog.html, no tiene desperdicio y sabrás como nos sentimos algunos a los que "suelen" preguntarnos dudas, je, je.

  Foro: ADO.NET.General Cantidad:  Desde:   Hasta:    Aplicar   Responder 
Respuestas a: 57821 - Concurrencia con sentencia UPDATE
IDAsuntoFechaNick 
57821 Concurrencia con sentencia UPDATE15/01/15 23:50Micas   
Hola, tengo una duda, trabajo en modo desconectado con dataset, VB.NET y base de datos access.
La duda es en un entorno multiusuario, donde por ejemplo, PC1, antes de ejecutar una sentencia sql UPDATE para actualizar muchos registros, necesita saber si PC2 hizo algun cambio mientras la PC1 trabajaba con el dataset de manera desconectada, y en caso de haber sucedido esto, PC1 cancela la actualizacion, informa que alguno de los registros fueron modificados y vuelve a actualzar el dataset con la informacion nueva. como se implementaria en la practica esto?? Gracias
IDAsuntoFechaNick 
57822 Re: Concurrencia con sentencia UPDATE (Resp: 57821)19/01/15 11:37Pipe[hgjfkdls]   
Hola Micas,

Efectivamente, cuando trabajamos con una estructura tipo ADO.NET debemos tener en cuenta que los bloqueos se establecen y mantienen solo mientras accedemos a los datos, los datos siempre estarán disponibles, excepto durante el momento donde se está actualizando.
¿Cómo hacemos esto?, lo más simple es, en aquel momento donde queremos realizar una actualización, se compara la versión original de una fila modificada con la fila existente en la base de datos. Si las dos son diferentes, la actualización no se realiza debido a un error de concurrencia.
Ejemplo:
UPDATE Table1 Set Col1 = @NuevoValorCol1,
              Set Col2 = @NuevoValorCol2,
              Set Col3 = @NuevoValorCol3
WHERE Col1 = @AntiguoValorCol1 AND
      Col2 = @AntiguoValorCol2 AND
      Col3 = @AntiguoValorCol3
Si es posible actualizar el o los datos, no existe error de concurrencia. Si no es posible generar esta actualización, significa que otro usuario actualizo antes.
Ahora bien, desde el momento en que sabes que un usuario ha actualizado con anterioridad a tu intento de actualización, es de tu responsabilidad generar una lógica que solucione el problema.

Saludos,

Pipe [hgjfkdls]


Si esta respuesta resuelve tu duda, por favor pulsa en la de este mensaje. Gracias.
IDAsuntoFechaNick 
57823 Re: Concurrencia con sentencia UPDATE (Resp: 57821)20/01/15 07:01Micas   
Hola, eso mismo intente hacer pero surgen errores. Uso access, sera por eso?? uso este codigo y aparece el error que dice:"El parametro @apellido no tiene un valor predeterminado",
@apellido tendria que tomar el valor del campo de la base de datos de access no es asi?

tambien digo que si invierto el orden de las siguiente sentencia pasa lo mismo.

adapter.UpdateCommand = New OleDbCommand("UPDATE tabla2 set nombre=@nombre, apellido=@apellido WHERE nombre = @oldnombre AND apellido = @oldapellido", connection)

adapter.UpdateCommand.Parameters.Add("@nombre", OleDbType.Char, 255).Value = txtID.Text
parameter = adapter.UpdateCommand.Parameters.Add("@oldnombre", OleDbType.Char, 255, "nombre")
parameter.SourceVersion = DataRowVersion.Original

adapter.UpdateCommand.Parameters.Add("@apellido", OleDbType.Char, 255).Value = txtCharData.Text
parameter = adapter.UpdateCommand.Parameters.Add("@oldapellido", OleDbType.Char, 255, "apellido")
parameter.SourceVersion = DataRowVersion.Original

adapter.UpdateCommand.ExecuteNonQuery()
[Editado: Micas, 20/01/2015 07:02:14]


Si esta respuesta resuelve tu duda, por favor pulsa en la de este mensaje. Gracias.

 
(c) Guillermo 'guille' Som, 2005-2017  - foros.elGuille v1.0.5.3 (23/Mar/2009 14:50 GMT +1)  - (ASP.NET 2.0 v2.0.50727.8762)
 
Usuarios activos: 29 - App. iniciada: 21/11/2017 10:44:15 GMT - La hora GMT del servidor es: 21/11/2017 12:03:58 GMT