Problemas para actualizar registros con VB 6.0 y Access 2003. Cuando quiero simplemente actualizar un registro de una base de datos en access desde un software hecho en VB6 me duplica el registro y no actualiza el existente. Muchas gracias por tu ayuda. Uso el comendo rs.update y con esto me duplica el registro con el cambio incluido, por lo cual me genera un registro nuevo cuando yo en ningún momento le di la instrucción rs. Addnew.
Seguramente no tienes una clave primaria en la tabla y por eso te duplica los registros.
La base en access tiene la clave principal, igualmente para guardar un cambio en un registro me crea otro igual pero con el cambio incorporado Te paso el código del botón guardar Private Sub guardar_Click() '&H8000& rojo '&H00C0FFFF& amarillo 'On Error Resume Next Dim proformatotal, realtotal As Double Dim fecha1, fecha2, control As Variant rs.Fields(0) = nombrebuque.Text rs.Fields(1) = puerto.Text rs.Fields(2) = Format(fechaarribo.Text, "dd-mm-yy") rs.Fields(3) = Format(fechasalida.Text, "dd-mm-yy") rs.Fields(4) = Carga.Text rs.Fields(5) = Format(proformapuerto.Text, "###,###,###.00") rs.Fields(6) = Format(realpuerto.Text, "###,###,###.00") If proformapuerto.Text = 0 And realpuerto.Text = 0 Then rs.Fields(7) = 0 Else rs.Fields(7) = Format((1 - (rs.Fields(5) / rs.Fields(6))) * 100, "###,###,###.00") End If rs.Fields(8) = Format(proformacarga.Text, "###,###,###.00") rs.Fields(9) = Format(realcarga.Text, "###,###,###.00") If proformacarga.Text = 0 And realcarga.Text = 0 Then rs.Fields(10) = 0 Else rs.Fields(10) = Format((1 - (rs.Fields(8) / rs.Fields(9))) * 100, "###,###,###.00") End If rs.Fields(11) = Format(proformaowner.Text, "###,###,###.00") rs.Fields(12) = Format(realowner.Text, "###,###,###.00") If proformaowner.Text = 0 And realowner.Text = 0 Then rs.Fields(13) = 0 Else rs.Fields(13) = Format((1 - (rs.Fields(11) / rs.Fields(12))) * 100, "###,###,###.00") End If proformatotal = proformapuerto.Text + proformacarga.Text + proformaowner.Text realtotal = realpuerto.Text + realcarga.Text + realowner.Text rs.Fields(14) = proformatotal rs.Fields(15) = realtotal If proformatotal = 0 And realtotal = 0 Then rs.Fields(16) = 0 Else rs.Fields(16) = Format((1 - (proformatotal / realtotal)) * 100, "###,###,###.00") End If rs.Fields(17) = fechafactura.Text fecha1 = Format(fechasalida.Text, "dd-mm-yy") fecha2 = Format(fechafactura.Text, "dd-mm-yy") rs.Fields(18) = DateDiff("d", fecha1, fecha2, vbMonday, vbFirstJan1) rs.Fields(19) = Fecharemesa.Text rs.Fields(20) = valorremesa.Text rs.Fields(21) = fechasubagente.Text rs.Fields(22) = fechaentregaoperaciones.Text rs.Fields(23) = fechadevolucionoperaciones.Text rs.Fields(24) = fechadhl.Text rs.Fields(25) = fechacancelacionsaldo.Text fecha1 = fechaentregaoperaciones.Text fecha2 = fechadevolucionoperaciones.Text rs.Fields(26) = DateDiff("d", fecha1, fecha2, vbMonday, vbFirstJan1) ' tiempo en días que retiene la factura operaciones para su control fecha1 = fechasubagente.Text fecha2 = fechasalida.Text rs.Fields(27) = DateDiff("d", fecha1, fecha2, vbMonday, vbFirstJan1) ' dias desde la llegada de la factura del subagente vs. salida de buque If Text1.Text <> "" Then rs.Fields(28) = Text1.Text Else Text1.Text = 5 Text1.BackColor = &HFF& End If rs.Fields(29) = rs.Fields(18) - rs.Fields(26) - rs.Fields(27) fecha1 = fechasalida.Text fecha2 = fechadhl.Text rs.Fields(30) = DateDiff("d", fecha1, fecha2, vbMonday, vbFirstJan1) rs.Update If rs.State = 1 Or rs.State = 0 Then MsgBox ("Los datos del buque han sido guardados con éxito.") Else MsgBox ("Ha ocurrido un error al guardar los datos del buque.") End If End Sub Muchas gracias!
¿Estas seguro que rs tiene el registro que quieres modificar? Por que al parecer esta parado en un registro que no es el que quieres modificar, por eso lo creas nuevamente