2012-01-13 25 views
5

Este es uno de los problemas más extraños que he visto en MS Access. Tengo el siguiente código en una forma continua:el acceso a oldValue para el control en forma continua genera el error 3251 en beforeUpdate cuando se actualiza una casilla en el formulario

Private Sub thisForm_BeforeUpdate(Cancel As Integer) 
If Not Cancel Then 
    Debug.Print "pre-logging data changes..." 

    ' here we need to doublecheck to see if any values changed. 
    ' we simply iterate through the whole list, re-setting oldValue 
    ' and newValue. 
    For Each control In thisForm.Section(acDetail).controls 
     If control.ControlType = acTextBox Or _ 
      control.ControlType = acComboBox Or _ 
      control.ControlType = acListBox Or _ 
      control.ControlType = acOptionGroup Or _ 
      control.ControlType = acCheckBox Then 
      Debug.Print control.Name 
      oldValues(control.Name) = control.oldValue 
      newValues(control.Name) = control.value 
     End If 
    Next 
End If 
End Sub 

OldValues ​​y NewValues ​​son objetos diccionario (aunque probablemente no relacionados con el tema).

Mi formulario tiene 3 controles de cuadro de texto y un control de casilla de verificación. Uno de los controles del cuadro de texto está desactivado y se rellena a través de los resultados de una combinación interna simple (para obtener el nombre legible para el humano asociado con una clave externa). La fuente de datos proviene de la fuente del formulario (no se usa DBookup ni nada).

Si edito uno de los otros dos controles de cuadro de texto, este código funciona absolutamente bien. SIN EMBARGO, si alternar la casilla de verificación en el formulario, me sale un error de tiempo de ejecución 3251. En la ventana de relojes, aparece el error nuevamente cuando intento ver las propiedades de "control". Muestra el valor de oldValue para que el control desactivado sea "Error reservado".

Si lo hizo de forma consistente, creo que se debió a que el control estaba deshabilitado; pero ya que funciona sin problemas cuando los otros cuadros de texto reciben ediciones, y solo se rompe cuando se activa la casilla de verificación; Estoy perplejo. Casi me inclino a creer que encontré un error en el acceso, pero podría usar algo de información adicional.

¿Alguien más se encuentra con un problema como este?

EDITAR: Al profundizar más, descubrí que en realidad solo uno de los 3 campos editables no activará este error. Tiene datos de cadena. Los otros dos controles tienen un valor de fecha y un valor de sí/no. Ahora estoy aún más confundido.

+0

Compruebe si el campo que causa el problema es un hipervínculo o tiene asociado un evento 'OnUpdate'. – Newd

Respuesta

0

tengo dos ideas para ese problema.

Primero: Si el RecordSource de su Form es una tabla ODBC que está vinculada a un SQL-Server, entonces debe establecer un valor estándar para la columna CheckBox-Column. De lo contrario, intentará establecer NULL en False y arrojar un error que indique que alguien más editó el registro actual.

Segunda idea: A veces Access tiene un pequeño "hipo" cuando compila el código. Puede hacer una copia de seguridad de su base de datos y luego tratar de descompilarla usando "C:\Program Files\Microsoft Office 2007\Office12\MSACCESS.EXE" "C:\yourFolder\yourDatabase.accdb" /decompile en la ventana Ejecutar ... (por supuesto, debe insertar la ruta tal como está en su máquina). Eso a menudo ayuda a resolver problemas extraños.

Cuestiones relacionadas