Comparar valores de registros en Access.

Estoy trabajando en una bd de access 2003, me gustaría saber por código vba como puedo comparar el valor del registro anterior con el ultimo registro tengo 2 campos campo1 y campo2 campo1 siempre es mayor que el campo2 pero al salir del campo2 y crear un nuevo registro el campo1 debe ser mayor que el campo2,
campo1 campo2
   1 2
    3 4
No puedo hacer una regla de validación en la tabla, pues esto es de una consulta donde hay varios campos calculados
ahora lo tengo con Dmax del campo2 y al salir del campo1 me hace la comparación lo tengo puesto en evento antes de actualizar y si no se cumple la condición lo cancelo
el problema viene cuando el usuario pincha en un registro con datos y al salir hace mal la comparación y se viene todo abajo, esto esta en un subformulario en hoja de datos
un cordial saludo y

1 Respuesta

Respuesta
1
En este caso debes entrar en el Subformulario y en las propiedades de éste (no de los campos), poner el siguiente código:
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim numero1 As Integer
Dim numero2 As Integer
Dim aviso As VbMsgBoxResult
numero1 = Forms("Numeros").Controls("campo1").Value
numero2 = Forms("Numeros").Controls("campo2").Value
If numero1 >= numero2 Then
aviso = MsgBox("El campo2 ha de ser mayor que el campo1", , "Atención")
Cancel = True
End If
End Sub
Siendo "Numeros" el nombre del subformulario y "campo1", "campo2" los nombres de los campos.
Hola y muchas gracias por contestar, cuando pongo puntos de interrucion en el editor de vba, solo me coge los valores del registro activo de los dos campos, y lo que necesito es que el valor del campo2, del primer registro, guardarlo en una variable para poder compararlo con el valor del segundo registro del campo1, necesito comparar el valor 2 del primer registro del campo2, con el valor 3 del campo1 del segundo registro y así sucesivamente.
Un cordial saludo y gracias
Bueno dragondragon, entonces la cosa es un pelín más complicada (pero no mucho)
En la declaración del Visual Basic has de añadir la instrucción:
Option Explicit
La función Antes de Actualizar el Formulario ha de quedar así:
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim numero1 As Integer
Dim numero2 As Integer
Dim id As Integer
Dim aviso As VbMsgBoxResult
id = Forms("Numeros").Controls("idnumero").Value
numero1 = ValorRegistroSiguiente(Form_Numeros, id, "campo1")
numero2 = Forms("Numeros").Controls("campo2").Value
If numero1 <= numero2 Then
aviso = MsgBox("El campo1 del siguiente registro ha de ser mayor que el campo2 del registro actual", , "Atención")
Cancel = True
End If
End Sub
Y la función ValorRegistroSiguiente se define así:
Function ValorRegistroSiguiente(Formulario As Form, id As Integer, campo As String)
Dim RS As Recordset
On Error GoTo Err_PrevRecVal
ValorRegistroSiguiente = 0
Set RS = Formulario.RecordsetClone
RS.FindFirst "[idnumero] = " & id
RS.MoveNext
ValorRegistroSiguiente = RS(campo)
Bye_PrevRecVal:
Exit Function
Err_PrevRecVal:
Resume Bye_PrevRecVal
End Function
Para más info: http://support.microsoft.com/kb/101081/es

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas