No Grabar Registros en la tabla al ocurrir un error

En la base de datos que estoy preparando tengo un formulario de altas donde he controlado que si un termino existe me de un mensaje de error y el se borre el termino que existe en el formulario pero cuando me voy a la tabla por si me ha grabado el termino, pues si me aparece como grabado y lo que quiero es que una vez me de error, me vuelva el foco a la caja del texto y no me grabe la información en la tabla. Te mando el código para que le eches un vistazo a ver que puedo poner para que no me lo grabe:

Private Sub Termino_Exit(Cancel As Integer)
Dim var As String
Dim db As Database
Dim rs As Recordset
var = "select * from Términos where Termino like '*" & Termino.Text & "*'"
Set db = CurrentDb
Set rs = db.OpenRecordset(var)
If rs.RecordCount > 0 Then
MsgBox "El Termino introducido ya existe en la Base de Datos", vbCritical, "Error Termino"
Termino.Text = ""
Me.Termino.SetFocus
Else
Termino.Text = UCase(Termino.Text)
End If
rs.Close
Set rs = Nothing
End Sub

1 respuesta

Respuesta
1

Lo que tienes que hacer es lo contrario, desvincular el formulario de la tabla, y entonces, al pulsar en el botón Aceptar, que verifique si existe el término, y si no existe, que lo grabe en la tabla.

Es darle la vuelta a la tortilla. Además, esta es la forma correcta de crear formularios de entrada de datos.

Y eso donde lo haría al acabar de introducir todos los datos?.

Este Formulario tiene el formulario principal que es donde cojo los datos de la tabla Términos y un subformulario que es la tabla de definición.

Donde al finalizar de introducir los datos en el formulario principal o cuando termino de introducir los datos en todos los formularios y en que evento ves que es mejor vincular el formulario a la tabla y comprobar esto.

Gracias.

Lo ideal es que tuvieras 2 formularios independientes, uno para los términos y otro para definiciones.

Así podrías verificar que la definición existe o no, y si está asignada o no al término, además de poder comprobar el término.

Los formularios y subformularios es mejor utilizarlos para mostrar y/o modificar la información, pero para agregar datos, siempre es mejor tener formularios independientes.

Muy Buenas otra vez perdona que sea tan pesado, pero al quitarle el origen del registro al formulario principal me da error ya que me dice que espera un origen del registro

Si eres tan amable explicame como lo harías tu, con un ejemplo de código porque al quitarle el origen del registro y al perder el foco del formulario principal yo le pongo este código, no se si esta bien:

Private Sub Form_LostFocus()
Dim var As String
Dim db As Database
Dim rs As Recordset
var = "select * from Términos where Termino like '*" & Termino.Text & "*'"
Set db = CurrentDb
Set rs = db.OpenRecordset(var)
If rs.RecordCount > 0 Then
MsgBox "El Termino introducido ya existe en la Base de Datos", vbCritical, "Error Termino"
Termino.Text = ""
Me.Termino.SetFocus
Else
Termino.Text = UCase(Termino.Text)
Siglas.Text = UCase(Siglas.Text)
DoCmd.GoToRecord , "Términos", acNewRec
Terminos.Termino = Termino.Text
Terminos.Siglas = Siglas.Text
End If
rs.Close
Set rs = Nothing
End Sub

No se si esta bien, porque lo que intento es controlar si el termino introducido esta en la tabla y si esta que me de el error, y si no esta que me lo convierta en mayúsculas y cree un nuevo registro de la tabla términos y los textos introducidos me lo pase a la tabla (no se si se hace exactamente así).

Muchas Gracias nuevamente

Un Saludo.

Creo que lo mejor es que te haga un ejemplo, posiblemente, al quitar el origen del registro, has dejado los textbox enlazados a los campos.

Te preparo un ejemplo sencillo y te pongo el enlace.

Aquí te dejo un ejemplo muy sencillo (quizás demasiado) de cómo se tiene que hacer, pero funciona perfectamente y puedes ir ampliando cosas a partir de él.

https://www.dropbox.com/s/f5f961vcwthabl6/jualzurita.accdb

Te puede servir de guía, lleva lo básico que necesitas, control de existencia de la palabra, control de que se registra correctamente, etc.

ya lo he conseguido hacer, pero ahora aprovechándome de tu sabiduría es que no me queda muy claro el insert into por lo que como la tabla términos tiene dos campos que son termino y siglas no consigo que el campo siglas introducido se me inserte en la tabla. Como se haría.

Muchísimas gracias.

Es que pongo eso y me da error, error 3352 falta un nombre de campo de destino en la instrucción INSERT INTO, Esta es la instrucción que pongo.

var = "INSERT INTO Términos SELECT '" & Me.TxTermino & "', '" & Me.TxtSiglas & "' as Termino"

Te explico la sentencia SQL

INSERT INTO - Esto indica lo que ha de hacer el motor de BBDD, en este caso insertar registro en ....

Términos - Esta es la tabla donde se van a insertar los registros

SELECT - Indicamos que seleccionamos un conjunto de registros (1 o más registros)

A continuación van los datos separados por comas; pueden ser nombres de campos (en cuyo caso ha de haber una instrucción FROM y el nombre de la tabla o consulta), literales encerrados entre comillas simples o valores numéricos. Pueden mezclarse y combinarse como se desee.

'" & Me.TxTermino & "', '" & Me.TxtSiglas & "' as Termino"

La instrucción "As" es un calificador especial, quiere decir "Como" o "con el nombre de".

En tu caso, indicas que introduzca Me. TxTermino en el primer campo y Me. TxtSiglas en el campo Termino.

Lo correcto sería:

'" & Me.TxTermino & "' as Termino, '" & Me.TxtSiglas & "' as Siglas"

(Suponiendo que el campo se llame Siglas).

Muchísimas Gracias por tu explicación, es que me hacia un lio con esta sentencia, me ha quedado un poco mas claro.

Gracias a tu ayuda me esta quedando una base de datos bastante apañada, con lo que me hará el trabajo mucho mas ameno.

Un saludo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas