Ver Mensaje Individual
  #1 (permalink)  
Antiguo 08/04/2013, 01:04
dimaro
 
Fecha de Ingreso: abril-2013
Mensajes: 4
Antigüedad: 11 años, 1 mes
Puntos: 0
Error 3022 en access

Hola,

Tengo un problema con la grabación de datos en una tabla de Access.

Hasta la semana pasada mi programa funcionaba correctamente: leo de una tabla de una base de datos y grabo en otra tabla igual en otra base de datos. Y sin hacer ningún cambio, con una versión compilada hace 2 años, ha dejado de funcionar.

Utilizo Addnew y update, y la tabla de destino tiene como clave principal un campo tipo contador. Lo que he detectado es que si después del update del primer registro hago otro addnew el valor de la clave principal (campo tipo contador) no se actualiza, por lo que cuando intento hacer el update da un error 3022 (clave duplicada), es decir, en el primer addnew el ID=1 y en el segundo sigue siendo ID=1.

¿Sabe alguien si alguna actualización del Windows XP puede afectar a esto? Lo he probado en varios ordenadores y con bases de datos diferentes, directamente en visual basic y con versiones compiladas, y en todos los casos da el mismo error.

El código que uso es este

Set TPedidoSDest = BDCalzadoDes.OpenRecordset("PedidoS", dbOpenTable)
TPedidoSDest.Index = "PrimaryKey"
Set TPedidoSEnvioDest = BDCalzadoDes.OpenRecordset("PedidoSEnvio", dbOpenTable)
sql = "Select * from PedidoS WHERE PedidoS.idPedidoC = " & idPedidoCOrig
Set DYPedidoSOrig = BDCalzadoOrig.OpenRecordset(sql, dbOpenDynaset)
While Not DYPedidoSOrig.EOF
'********* SACAMOS EL IDMODELO
idModelo = ObtenerIDModelo(Asignar(DYPedidoSOrig!idModelo, 0))
idSurtido = ObtenerIDSurtido(Asignar(DYPedidoSOrig!idSurtido, 0))
idFabrica = ObtenerFabrica(Asignar(DYPedidoSOrig!idFabrica, 0))
idTarifa = ExportarTarifa(Asignar(DYPedidoSOrig!idTarifa, 0))
idFabricacion = ExportarFabricacion(Asignar(DYPedidoSOrig!idFabric acion, 0))
TPedidoSDest.AddNew
idPedidoSDest = TPedidoSDest!IDPedidoS
For j = 1 To DYPedidoSOrig.Fields.Count - 1
Campo = DYPedidoSOrig.Fields(j).Name
Select Case Campo
Case "IDPedidoC"
TPedidoSDest.Fields(Campo) = idPedidoCDest
Case "IDModelo"
TPedidoSDest.Fields(Campo) = idModelo
Case "IDSurtido"
TPedidoSDest.Fields(Campo) = idSurtido
Case "IDFabrica"
TPedidoSDest.Fields(Campo) = idFabrica
Case "IDTarifa"
TPedidoSDest.Fields(Campo) = idTarifa
Case "IDFabricacion"
TPedidoSDest.Fields(Campo) = idFabricacion
Case Else
TPedidoSDest.Fields(Campo) = DYPedidoSOrig.Fields(j)
End Select
Next j
TPedidoSDest.Update
DYPedidoSOrig.MoveNext
Wend


Gracias anticipadas