Visual Basic - error al modificar registro

Life is soft - evento anual de software empresarial
 
Vista:

error al modificar registro

Publicado por afede19 (9 intervenciones) el 21/04/2023 14:58:17
Buen día les consulto a los que saben.
Estoy generando una consulta y guardando valores en el registro.
Cuando se le da de alta como nuevo registro, anda bien
Cuando el registro ya existe, me da un error al modificar los registros.
"No se puede encontrar la fila para su actualización: algunos valores han cambiado desde la última vez que se leyó.

Mil gracias

'------------------------------

'el valorInicial es el numero de documento de la persona a buscar

Set adoTermporalesRS = New Recordset
adoTermporalesRS.Open "select * from personas where nrodoc = '" & ValorInicial & "'", db, adOpenStatic, adLockOptimistic
If adoTermporalesRS.RecordCount = 0 Then
adoTermporalesRS.AddNew 'AGREGA UN NUEVO REGISTROS
adoTermporalesRS.Fields(1) = ValorInicial 'DocumentoNro
adoTermporalesRS.Fields(2) = valorApellidoNombre 'ApellidoNombre
adoTermporalesRS.Fields(9) = Format(Date, "dd/mm/yyyy") 'FechaAlta
adoTermporalesRS.MoveLast
adoTermporalesRS.MoveFirst
adoTermporalesRS.MoveLast
Else
adoTermporalesRS.Fields(1) = ValorInicial 'NroExamen
adoTermporalesRS.Fields(2) = valorApellidoNombre 'ApellidoNombre
adoTermporalesRS.Fields(10) = Format(Date, "dd/mm/yyyy") 'Fecha modificado
adoTermporalesRS.Update
End If
adoTermporalesRS.Close
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

error al modificar registro

Publicado por codigomalicioso (1 intervención) el 21/04/2023 15:59:45
Si nrodoc es el PK, no debería fallar.

Pero esto que estás haciendo de

adoTermporalesRS.MoveLast
adoTermporalesRS.MoveFirst
adoTermporalesRS.MoveLast

Mueve el cursor sobre otro registro, si es que llegó a capturar varias filas.

Verifica que devuelva solo un registro, lo otro es que la forma en que lo estás haciendo no es la más óptima, pues está empleando bloqueo dinámico (adLockOptimistic) y eso bloquea todo al punto que ningún otro usuario puede hacer algo sobre ese registro, y peor aún lo que haces de:

select * from personas where nrodoc = '" & ValorInicial & "'"

La anterior instrucción te trae todas las columnas, cuando debería traer solo las requeridas en la actualización, con el agravante de que al pasarle el ValorInicial como lo haces te pueden clavar sql injection
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

error al modificar registro

Publicado por optmizar (1 intervención) el 21/04/2023 18:32:34
La recomendación es que emplees mejor un procedimiento almacenado, que es más seguro y eficiente.

Los cursores actualizables son muy costosos en términos de rendimiento, y peor aún con desplazamiento hacia atrás, esos si que ponen de rodillas cualquier servidor.

Una aplicación bien construida, debe optar por emplear cursores de solo lectura (ReadOnly) y de recorrido solo hacia adelante.

Pero es decisión tuya hacerlo así, y lo que ya te mencionaban del SQL Injection, con PA estás más a salvo de ello.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar