Hola a todos, tengo un problema para la actualización de registros sobre un Sql Server 2000.
Estoy realizando una aplicación Java utilizando como conexión al driver JDBC SP3 de Microsoft (la última versión que salió).
El problema está cuando quiero actualizar 2 campos de un resultset más de una vez, es decir, la primera vez que invoco al método updaterow() sobre un registro actualiza perfectamente pero si quiero volver a actualizar el mismo registro me devuelve una excepción "Row update failed".
Puedo por ejemplo actualizar varios registros sin problemas, pero cuando caigo sobre uno ya actualizado ahí me devuelve la excepción.
Para la conexión utilizo:
conexion.createStatement(ResultSet.TYPE_SCROLL_SEN SITIVE, ResultSet.CONCUR_UPDATABLE)
Y el query es el siguiente:
"SELECT nro_movil_requerido,nro_usuario_telefonista,(CONVE RT(varchar(10), fecha_hora_entrada, 103) + ' - ' + CONVERT(varchar(5), fecha_hora_entrada, 114)) AS 'fecha_hora_entrada',comentario,(CONVERT(varchar(1 0), fecha_hora_inicio_viaje, 103) + ' - ' + CONVERT(varchar(5), fecha_hora_inicio_viaje, 114)) AS 'fecha_hora_inicio_viaje',(CONVERT(varchar(10), fecha_hora_fin_viaje, 103) + ' - ' + CONVERT(varchar(5), fecha_hora_fin_viaje, 114)) AS 'Fecha y hora',cod_motivo_cancelacion,(CONVERT(varchar(5), fecha_hora_invitacion, 114)) AS 'hora_invitacion',(CONVERT(varchar(5), fecha_hora_resolucion, 114)) AS 'hora_resolucion',nro_movil_asignado AS 'Móvil',CONVERT(NUMERIC(8,2), importe_pactado) AS importe_pactado,nro_conductor AS 'Chofer',km_recorridos_libre,velocidad_maxima_libr e,km_recorridos_ocupado,velocidad_maxima_ocupado,m inutos_cobrados_espera,CONVERT(NUMERIC, nro_telefono) AS Cliente,(nombre_calle + ' ' + CONVERT(varchar(4), numero)) AS 'Salida',CONVERT(NUMERIC(8,2), importe) AS 'importe_formateado',nro_ctacte,DATEDIFF(mi, fecha_hora_inicio_viaje, fecha_hora_fin_viaje) AS 'duracion_viaje',importe,nro_viaje , * FROM dbo.VIAJES_HISTORICOS Where fecha_hora_inicio_viaje IS NOT NULL And fecha_hora_fin_viaje >= '21/09/2006 00:00' And fecha_hora_fin_viaje <= '19/12/2007 23:59:59' And cod_motivo_cancelacion = 0 Order by fecha_hora_fin_viaje"
Los campos que quiero modificar son importe y nro_ctacte de la siguiente manera:
rs.updateBigDecimal("importe", new BigDecimal(edit_importe.getText().trim()))
rs.updateInt("nro_ctacte", Integer.parseInt(edit_ctacte.getText().trim()))
Si vuelvo a ejecutar la consulta antes de tratar de modificar un registro ya modificado no tengo este problema:
rs = stmt.executeQuery(sql)
pero sería totalmente ineficiente ejecutar la consulta cada vez que quiero actualizar un registro.
Otra cosa que probé para tratar de solucionar esto es mediante PreparedStatement, ahí no hay problema pero al invocar al método de resultset refreshrow() para actualizarlo con respecto a la base no lo actualiza, tampoco me muestra una excepción.
Si alguien me puede ayudar con este tema estaría muy agradecido.