Actualizar registros con VB 6.0 y Access 2003.

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.

1 Respuesta

Respuesta
1
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

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas