Access - impedir registros vacios

 
Vista:

impedir registros vacios

Publicado por jman (96 intervenciones) el 26/12/2008 23:47:27
hola, la consulta es si alguno conoce una funcion o procedimiento para verificar que el ultimo registro contenga datos antes de insertar otro?

me explico, en mi formulario si le doy clic al boton de insertar registro repetidamente se me crea un monton de registros vacios -bueno no tan vacios he ahi la complicacion-

veran como ya explique en una consulta anterior mi tabla de clientes contiene para efectos practicos 2 tipos de clientes, estan en una sola tabla por que el 90% de los datos son los mismos pero por el 10% restante opte por crear 2 vistas de formulario diferentes, entonces cree un campo que actua como "flag" (no se como le llaman los programadores ahora) que indica cual formulario debe estar visible asi creo el efecto de distintas vistas, este campo tiene un valor 1 por defecto al crear un nuevo registro.

Fuera de ese campo, que siempre tendra un valor ya que asi fue pensado (debe haber una vista activada al abrir un nuevo registro), necesito que haya un procedimiento verificador que impida dejar un registro en blanco y agregar otro.

no me sirve como solucion usar required, ya que la informacion de contactos no es excluyente es decir de un cliente podria tener como dato la calle pero no el telefono mientras que de otro seria a la inversa, es decir, que mientras haya un valor en cualquiera de los campos se permita ir a un nuevo registro.

solo se me ocurre que deberia verificar control por control que su valor sea Not Null, pero no se como escribirlo en vba. alguna idea?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:impedir registros vacios

Publicado por Marcos (236 intervenciones) el 27/12/2008 09:07:12
Hola Jman.
Si te entendí bien, necesitas abrir un nuevo registro siempre y cuando al menos uno de los dos campos contenga un valor. Si los dos campos están vacios que no te permita abrir un nuevo registro. Es así ??
Si así fuera, en un formulario puse un botón llamado NuevoRegistro y en el evento al hacer click:

Private Sub NuevoRegistro_Click()
On Error GoTo Err_NuevoRegistro_Click
If IsNull(Campo1) And IsNull(Campo2) Then
MsgBox "Los registros están en blanco"
Else
DoCmd.GoToRecord , , acNewRec
End If
Exit_NuevoRegistro_Click:
Exit Sub
Err_NuevoRegistro_Click:
MsgBox Err.Description
Resume Exit_NuevoRegistro_Click
End Sub

Si los campos1 y campo2 están vacíos no te dejará abrir un nuevo registro, a no ser que llenes al menos uno de ellos.
Saludos.
Marcos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:impedir registros vacios

Publicado por Jman (96 intervenciones) el 27/12/2008 15:24:05
hola marcos, te agradezco el codigo se acerca mucho a lo que necesito, sin embargo hay algunas precisiones que no hice en su momento q deben ser incorporadas a ver si me puedes decir como escribir esto en vba

1. no uso botones de comandos propios solo los botones de desplazamiento de access (Razón: el usuario a quien va destinado mi trabajo se pierde con facilidad en ambientes desconocidos) por lo tanto el codigo creo que sera llamado por el evento before update() es correcto?

2. los campos en cuestion son excluyentes vale decir no se permite ni ambos nulos ni ambos llenos

mejor voy a explicar de nuevo mi tabla para q se entienda el por qué necesito tan urgentemente validar

tabla:clientes
campo1
campo2
....
campoRAZONSOCIAL
campoAPELLIDOS
campoNOMBRES
...
campo(n-1)
campo n

formularios: frmClientesEmpresas, frmClientesPersonas

Cuando un cliente es empresa, se activa un formulario que contiene el control txtRazonSocial, además en el se llena informacion como por ej. del representante, que no se necesita en el caso de clientes personas. Por el contrario, si el cliente es persona el formulario es otro ya que contiene los controles para Apellidos y Nombres.

puse un control "grupo de opciones", si tiene la opcion 1 el sfrmPersonas se hace invisible y el sfrmEmpresas se hace visible. si la opcion es 2 ocurre a la inversa.

bueno todo bien pero aca esta el problema

un usuario "apurado" podria facilmente llenar el frmPersonas, OLVIDAR PRESIONAR NUEVO REGISTRO, cambiar el switch a empresas y rellenar tambien ahi todo sin darse cuenta que no ha avanzado de registro sino que duplico la informacion en EL MISMO registro. Lo probé yo mismo y es muy facil que esto ocurra!

entonces como seria tu codigo para que se pueda incluir frente a 2 eventos:

-before update (del formulario) cuando el usuario salta a otro registro

-before update (del control grupodeopciones) cuando el usuario intenta cambiar la vista sin cambiar de registro

en el primer caso, para que se permita un nuevo registro la condicion es que el cliente debe tener ya sea razón social o nombres pero no ambos (no existen las empresas-personas) y tampoco se acepta que no se incluya ninguna informacion (todos los clientes deben ser reconocibles por un apelativo)

en el segundo caso, la validacion debe alertar al usuario en caso de que intente cambiar de vista si ya ha introducido informacion.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:impedir registros vacios

Publicado por Marcos (236 intervenciones) el 27/12/2008 22:32:51
Jman:
En mi ejemplo, en control grupo de opciones:
Opción19 = Selección Empresa
Opción21 = Selección Personas
SeleccionCliente es un campo (texto) de la tabla que se basa el form. Principal y que tiene asignado el valor del control de opciones.

Todos los códigos van en el formulario principal. (adaptalos a tu BD)

1.- Cuando el usuario intenta cambiar la vista sin cambiar de registro (cuando se mueve dentro del control de opciones).

Private Sub Opción19_GotFocus()
If Form_SfrmPersonas!CampoPersona1 <> "" Or Form_SfrmPersonas!CampoPersona2 <> "" Then
MsgBox "NO PUEDE CAMBIAR DE SELECCION SI YA INGRESO DATOS EN CLIENTE PERSONAS.."
Me.TuPrimercampodelformprincipal.SetFocus
Me.SfrmEmpresas.Visible = False
Me.SfrmPersonas.Visible = True
Me.Undo
Else
Me.SfrmEmpresas.Visible = True
Me.SfrmPersonas.Visible = False
End If
End Sub

Private Sub Opción21_GotFocus()
If Form_SfrmEmpresas!CampoEmpresa1 <> "" Or Form_SfrmEmpresas!CampoEmpresa2 <> "" Then
MsgBox "NO PUEDE CAMBIAR DE SELECCION SI YA INGRESO DATOS EN CLIENTE EMPRESA.."
Me.TuPrimercampodelformprincipal.SetFocus
Me.SfrmEmpresas.Visible = True
Me.SfrmPersonas.Visible = False
Me.Undo
Else
Me.SfrmEmpresas.Visible = False
Me.SfrmPersonas.Visible = True
End If
End Sub

2.- Cuando el usuario salta a otro registro
Aquí necesariamente tuve que poner un boton llamado SiguienteRegistro, ya que no pude adaptar el código cuando el usuario selecciona los botones de desplazamiento de access. Quizás alguien sepa cómo hacerlo.

Private Sub SuiguienteRegistro_Click()
On Error GoTo Err_SuiguienteRegistro_Click
If Me.SeleccionCliente.Value = 1 And IsNull(Form_SfrmEmpresas!CampoEmpresa1) And IsNull(Form_SfrmEmpresas!CampoEmpresa2) Then
MsgBox "DEBE INGRESAR INFORMACION EN AL MENOS UN CAMPO en frmEmpresa.."
Else
If Me.SeleccionCliente.Value = 2 And IsNull(Form_SfrmPersonas!CampoPersona1) And IsNull(Form_SfrmPersonas!CampoPersona2) Then
MsgBox "DEBE INGRESAR INFORMACION EN AL MENOS UN CAMPO en frmPersonas.."
Else
DoCmd.GoToRecord , , acNext
End If
End If
Exit_SuiguienteRegistro_Click:
Exit Sub
Err_SuiguienteRegistro_Click:
MsgBox Err.Description
Resume Exit_SuiguienteRegistro_Click
End Sub

3. Por último añade este codigo. (quizás te sirva, no se cómo está dado en tu BD).

Private Sub Form_Current()
Dim intnewrec As Integer
intnewrec = NewRecord
If intnewrec = True Then
Me.SfrmPersonas.Visible = True
Me.SfrmEmpresas.Visible = True
Me.Opción19.Enabled = True
Me.Opción21.Enabled = True
End If
End Sub

Hice un ejemplo que te estoy enviando a tu e-mail.
Saludos
Marcos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar