¿Cómo reduzco este código de validación de datos? Access

Tengo las siguientes validaciones

Tengo una tabla usuarios con los campos nombre, clave1, clave2,... Hasta clave 15

Cada usuario puede tener hasta 15 claves

Pero quiero validar cuando mi usuario se registre por segunda vez o tercera que en su registro anterior no le ayan dado esa clave y si ya se lo dieron mostrar un mensaje de que ya la ocupo

Sin embargo el código que uso es ese y lo veo muy largo (solo puse una parte no copie los end if

¿Hay forma de reducirlo?

Gracias

if dcount("id", "filiacionesni", "clave1='" & me.clave1 & "' and nombre='" & me.nombre & "'") > 0 then
   msgbox "ocupo esta plaza antes"
   else
   if dcount("id", "filiacionesni", "clave2='" & me.clave1 & "' and nombre='" & me.nombre & "'") > 0 then
   msgbox "ocupo esta plaza antes"
   else
   if dcount("id", "filiacionesni", "clave3='" & me.clave1 & "' and nombre='" & me.nombre & "'") > 0 then
   msgbox "ocupo esta plaza antes"
   else
   if dcount("id", "filiacionesni", "clave4='" & me.clave1 & "' and nombre='" & me.nombre & "'") > 0 then
   msgbox "ocupo esta plaza antes"
   else
   if dcount("id", "filiacionesni", "clave5='" & me.clave1 & "' and nombre='" & me.nombre & "'") > 0 then
   msgbox "ocupo esta plaza antes"
   else
   if dcount("id", "filiacionesni", "clave6='" & me.clave1 & "' and nombre='" & me.nombre & "'") > 0 then
   msgbox "ocupo esta plaza antes"
   else
    if dcount("id", "filiacionesni", "clave7='" & me.clave1 & "' and nombre='" & me.nombre & "'") > 0 then
   msgbox "ocupo esta plaza antes"
   else
    if dcount("id", "filiacionesni", "clave8='" & me.clave1 & "' and nombre='" & me.nombre & "'") > 0 then
   msgbox "ocupo esta plaza antes"
   else
    if dcount("id", "filiacionesni", "clave9='" & me.clave1 & "' and nombre='" & me.nombre & "'") > 0 then
   msgbox "ocupo esta plaza antes"
   else
     if dcount("id", "filiacionesni", "clave10='" & me.clave1 & "' and nombre='" & me.nombre & "'") > 0 then
   msgbox "ocupo esta plaza antes"
   else
    if dcount("id", "filiacionesni", "clave11='" & me.clave1 & "' and nombre='" & me.nombre & "'") > 0 then
   msgbox "ocupo esta plaza antes"
   else
    if dcount("id", "filiacionesni", "clave12='" & me.clave1 & "' and nombre='" & me.nombre & "'") > 0 then
   msgbox "ocupo esta plaza antes"
   else
    if dcount("id", "filiacionesni", "clave13='" & me.clave1 & "' and nombre='" & me.nombre & "'") > 0 then
   msgbox "ocupo esta plaza antes"
   else

1 respuesta

Respuesta
2

Has derecorrer los Campos de la Tabla y sondear en cada uno si coincide con el valor de Clave1

Algo así que no he probado, pero no debes tener dificultades y si fuera así me comentas.

Dim QryFilia As String
Dim RstFilia  As DAO.Recordset
Dim NC As Byte
Dim NombCampo As String
Qry Filia = SELECT  * FROM FiliacionesIni WHERE Nombre = '" & Me.Nombre & "'"
Set RstFilia = CurrentDB.OpenRecordset(QryFilia,dbOpenSnapshot)
If RstFilia.RecordCount = 0 Then Exit Sub
For NC = 1 To 15
NombCampo = "Clave" & NC
If RstFilia.Fields(NombCamp). Value = Me.Clave1 Then
     MsgBox "Esta Clave ya la usaste anteriormente",vbCritical,"CLAVE USADA·
End If
Next NC

Un saludo >> Jacinto

He visto algo repasando >> Faltan una Comillas de lante del SELECT >> "SELECT

Un saludo >> Jacinto

Y Qry Filia de ser QryFilia (junto). La prisa tiene sus daños colaterales.

Está visto que no hay dos sin tres: If RstFilia. Fields(NombCamp) le falta una "o" a Camp >> debe ser >> If RstFilia. Fields(NombCampo) Un saludo >> Jacinto

Muchas gracias por la ayuda

Con las ultimas respuestas quedo re bn el código

Una pregunta como lo estructuro si quiero consultar en otra tabla llamada actualizar

Con los campos del 1 al 9

El 2x1 suele ser una Oferta de supermercado, pero partiendo del Código que ahora corrijo:

Dim QryFilia As String
Dim RstFilia  As DAO.Recordset
Dim NC As Byte
Dim NombCampo As String
QryFilia = "SELECT  * FROM FiliacionesIni WHERE Nombre = '" & Me.Nombre & "'"
Set RstFilia = CurrentDB.OpenRecordset(QryFilia,dbOpenSnapshot)
If RstFilia.RecordCount = 0 Then Exit Sub
For NC = 1 To 15
NombCampo = "Clave" & NC
If RstFilia.Fields(NombCampo). Value = Me.Clave1 Then
     MsgBox "Esta Clave ya la usaste anteriormente",vbCritical,"CLAVE USADA·
End If
Next NC

Si el proceso que vas a hacer es el mismo, has de sustituir  los Nombres y el 15 pasarlo a 9

Y un código menos personalizado para una Tabla en concreto >>

Dim StrSQL As String
Dim Rst  As DAO.Recordset
Dim NC As Byte
Dim NombCampo As String
StrSQL = "SELECT  * FROM [NombreDeTuTabla] WHERE Nombre = '" & Me.Nombre & "'"
Set Rst = CurrentDB.OpenRecordset(StrSQL,dbOpenSnapshot)
If Rst.RecordCount = 0 Then Exit Sub
For NC = 1 To 15
    NombCampo = "Clave" & NC
    If Rst.Fields(NombCampo). Value = Me.Clave1 Then
          MsgBox "Esta Clave ya la usaste anteriormente",vbCritical,"CLAVE USADA·
    End If
Next NC

Un saludo >> Jacinto

PERDÓN no me explique bn

q valide con ambas tablas la de actualización y filiacionesIni

FiliacionesIni

Abre un Recordset sobre esa Tabla y repite el Bucle, con lo cual te quedará algo así:

Dim QryFilia As String,QryAct As String
Dim RstFilia  As DAO.Recordset, RstAct As DAO.Recordset
Dim NC As Byte
Dim NombCampo As String
QryFilia = "SELECT  * FROM FiliacionesIni WHERE Nombre = '" & Me.Nombre & "'"
Set RstFilia = CurrentDB.OpenRecordset(QryFilia,dbOpenSnapshot)
If RstFilia.RecordCount = 0 Then MiraOtraTabla
For NC = 1 To 15
NombCampo = "Clave" & NC
If RstFilia.Fields(NombCampo). Value = Me.Clave1 Then
     MsgBox "Esta Clave ya la usaste anteriormente",vbCritical,"CLAVE USADA·
End If
Next NC
QryAct = "SELECT  * FROM Actualizar WHERE Nombre = '" & Me.Nombre & "'"
Set RstAct = CurrentDB.OpenRecordset(QryAct,dbOpenSnapshot)
MiraOtraTabla:
If RstAct.RecordCount = 0 Then Exit Sub
For NC = 1 To 9
NombCampo = "Clave" & NC
If RstAct.Fields(NombCampo). Value = Me.Clave1 Then
     MsgBox "Esta Clave ya la usaste anteriormente",vbCritical,"CLAVE USADA·
End If
Next NC
RstFilia.Close
RstAct.Close
Set Rst.Filia = Nothing
Set RstAct = Nothing

Un saludo >> Jacinto

Muchas gracias Jacinto

Una duda si busco un registro que esta guardado en la tabla más de una vez no me lo valida

¿

Por qué?

¿O cómo hacer que lo valide?

Ejemplo de mis tablas

filiacionesini

nombre clave1 clave2 clave3 clave4 ....

juan            01        02        03        06

luis              02        01        03        

maria          01         06    

juan             08       

actualizacion

nombre clave1 clave2 clave3 clave4 ....

juan            04        05         

maria          02         03  

Lo que quiero es que si quieren actualizar datos de JUAN - CON CLAVE 01 me cheque en ambas tablas que la clave 01 no se la hayan dado

Y si ya se la dieron mande un mensaje de que ya la ocupo

El código que me mando funciona muy bien el único detalle es que no se por que si el registro esta duplicado en la misma tabla ya no valida (como es el caso de JUAN)

Si no están duplicados los nombres valida bn

Mil gracias por su ayuda enserio

Estaré fuera de mi domicilio unas tres semanas y solo voy a mirar el correo alguna vez al día.

Pongo el tema en pendientes y si cuando regrese veo que no lo has resuelto, lo miro y te comento.

Mis saludos >> Jacinto

¡Gracias! Mil gracias si pude

¿Quieres decir que lo has resuelto?. Si es así lo quito de lo pendiente. Un saludo >> Jacinto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas