Registros duplicados

Hola
Necesito saber de que manera puedo validar la captura de registros duplicados sin esperar a ingresar todos los campos del registro, sino que al momento de capturar el dato clave envíe mensaje indicando que el dato ya fue capturado.
Si es posible por favor de manera sencilla.
De antemano, muchas gracias

1 Respuesta

Respuesta
1
Hay una manera, por medio de programación utilizando un Objeto Recordset (Variable que me permite manipular registros).
***************************
Private Sub CODPRO_Exit(Cancel As Integer)
Dim reg As DAO.Recordset
Set reg = Me.RecordsetClone
reg.FindFirst "CODPRO = (" & CODPRO.Value & ")"
If Not reg.NoMatch Then
MsgBox "El Código '" & CODPRO.Value & "' ya existe. " & _
"se localiza en el registro No '" & reg.AbsolutePosition + 1 & "'.", vbExclamation, "Error"
Cancel = True
CODPRO.SetFocus
CODPRO.Value = Null
End If
Set reg = Nothing
End Sub
***************************
Explicación:
Aquí, se supone que hay un control llamado (CODPRO, como así también el campo en la Tabla)... este control va guardando o estableciando la llave principal de la tabla "PRODUCTOS", ahora en el evento "Exit" (Al Salir]) de la Caja de Texto se valida que no se repita.
Iniciamos una instancia de una variable recordset, que me permitirá manejar los registros de una Tabla o Consulta.
*******************
Dim reg As DAO.Recordset
*******************
Poblamos el Objeto Recordset con los registros del Formulario (Me. RecordsetClone: Esta propiedad devuelve una copia exacta de los registros del formulario)
************************
Set reg = Me.RecordsetClone
************************
Buscamos si el código digitado en la caja de texto ya existe (FindFirst)
********************************************
reg.FindFirst "CODPRO = (" & CODPRO.Value & ")"
Acá es importante aclarar algo, hay que tener en cuanta el tipo de datos, en este caso se toma como si fuera numérico, por eso se coloca
? & CODPRO.VALUE & ?
Comilla doble, espacio, Ampersand (&), Espacio, Variable o caja de texto que contiene el valor, Espacio, Ampersand, comillas dobles.
Es importante este orden ya que le puede votar error o no funcionaria.
Ahora si fuera texto el Campo en la Tabla seria así:
?? & CODPRO.VALUE & ??
Comilla sencilla (?), comillas dobles, Espacio, Ampersand, espacio, Variable o Caja de texto del valor, Espacio, Ampersand, Espacio, Comillas Dobles, Comilla Sencilla.
Ahora si es fecha, se complica un poquitín ya que tenemos que formatearla, porque se utiliza el formato Internacional (Americano para las fechas mes/dia/año)
#? & Format(CODPRO.VALUE,?MM/dd/yyyy?) & ?#
Csharp(#), Comillas Dobles, espacio, Ampersand, Espacio, Valor formateado (Se utiliza la función format, primero va a quien se formatea, y luego el formato, en este caso se tomaría como mes/dia/año, ya que access utiliza el formato normal dia/mes/año), Espacio, Ampersand, Espacio, Comillas Dobles, CSharp.
Ahora preguntamos si la encontró (Se niega la propiedad NoMAtch(No encontrado))
********************
If Not reg.NoMatch Then
********************
Si entra al If significa que el código ya existía, muestra un mensaje al usuario (msgbox), cancela el ingreso del dato (cancel = trae),manda el enfoque otra vez a la caja y la limpia (CODPRO.Value = Null)
**********************************************************************
MsgBox "El Código '" & CODPRO.Value & "' ya existe. " & _
"se localiza en el registro No '" & reg.AbsolutePosition + 1 & "'.", vbExclamation, "Error"
Cancel = True
CODPRO.SetFocus
CODPRO.Value = Null
**********************************************************************
Me avisas como te fue, si necesita que te aclare algo me avisas...
Att:TELEMACO
Disculpa te la vuelvo a repetir ya que por el tipo de fuente tomo caracteres que no era... esta si es la respuesta. Disculpa
Hay una manera, por medio de programación utilizando un Objeto Recordset (Variable que me permite manipular registros).
***************************
Private Sub CODPRO_Exit(Cancel As Integer)
Dim reg As DAO.Recordset
Set reg = Me.RecordsetClone
reg.FindFirst "CODPRO = (" & CODPRO.Value & ")"
If Not reg.NoMatch Then
MsgBox "El Código '" & CODPRO.Value & "' ya existe. " & _
"se localiza en el registro No '" & reg.AbsolutePosition + 1 & "'.", vbExclamation, "Error"
Cancel = True
CODPRO.SetFocus
CODPRO.Value = Null
End If
Set reg = Nothing
End Sub
***************************
Explicación:
Aquí, se supone que hay un control llamado (CODPRO, como así también el campo en la Tabla)... este control va guardando o estableciando la llave principal de la tabla "PRODUCTOS", ahora en el evento "Exit" (Al Salir]) de la Caja de Texto se valida que no se repita.
Iniciamos una instancia de una variable recordset, que me permitirá manejar los registros de una Tabla o Consulta.
*******************
Dim reg As DAO.Recordset
*******************
Poblamos el Objeto Recordset con los registros del Formulario (Me. RecordsetClone: Esta propiedad devuelve una copia exacta de los registros del formulario)
************************
Set reg = Me.RecordsetClone
************************
Buscamos si el código digitado en la caja de texto ya existe (FindFirst)
********************************************
reg.FindFirst "CODPRO = (" & CODPRO.Value & ")"
Acá es importante aclarar algo, hay que tener en cuanta el tipo de datos, en este caso se toma como si fuera numérico, por eso se coloca
" & CODPRO.VALUE & "
Comilla doble, espacio, Ampersand (&), Espacio, Variable o caja de texto que contiene el valor, Espacio, Ampersand, comillas dobles.
Es importante este orden ya que le puede votar error o no funcionaria.
Ahora si fuera texto el Campo en la Tabla seria así:
'" & CODPRO.VALUE & "'
Comilla sencilla ('), comillas dobles, Espacio, Ampersand, espacio, Variable o Caja de texto del valor, Espacio, Ampersand, Espacio, Comillas Dobles, Comilla Sencilla.
Ahora si es fecha, se complica un poquitín ya que tenemos que formatearla, porque se utiliza el formato Internacional (Americano para las fechas mes/dia/año)
#" & Format(CODPRO.VALUE,?MM/dd/yyyy?) & "#
Csharp(#), Comillas Dobles, espacio, Ampersand, Espacio, Valor formateado (Se utiliza la función format, primero va a quien se formatea, y luego el formato, en este caso se tomaría como mes/dia/año, ya que access utiliza el formato normal dia/mes/año), Espacio, Ampersand, Espacio, Comillas Dobles, CSharp.
Ahora preguntamos si la encontró (Se niega la propiedad NoMAtch(No encontrado))
********************
If Not reg.NoMatch Then
********************
Si entra al If significa que el código ya existía, muestra un mensaje al usuario (msgbox), cancela el ingreso del dato (cancel = trae),manda el enfoque otra vez a la caja y la limpia (CODPRO.Value = Null)
**********************************************************************
MsgBox "El Código '" & CODPRO.Value & "' ya existe. " & _
"se localiza en el registro No '" & reg.AbsolutePosition + 1 & "'.", vbExclamation, "Error"
Cancel = True
CODPRO.SetFocus
CODPRO.Value = Null
**********************************************************************
Me avisas como te fue, si necesita que te aclare algo me avisas...
Att:TELEMACO

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas