Guardar desde formulario en tabla

Tengo un formulario con distintos desplegables y txt, y he puesto un botón para que se guarden los datos seleccionados o introducidos en una tabla que he llamado General con los distintos campos a rellenar. Buscando por internet, encontré ejemplos del código que le debía poner a el botón e introduje lo siguiente:
DoCmd.RunSQL "Insert Into General(UAP,Sección,Máquina,Fecha,Técnico,Tarea,Horas,Descripción,Piezas,Cantidad,Observaciones) Values (' " & Registro!UAP.Value & " ',' " & Registro!Sección.Value & " ',' " & Registro!Máquina.Value & " ',' " & Registro!Fecha.Value & " ',' " & Registro!Técnico.Value & " ',' " & Registro!Tarea.Value & " ',' " & Registro!Tiempo.Value & " ',' " & Registro!Descripción.Value & " ',' " & Registro!Piezas.Value & " ',' " & Registro!Cantidad.Value & " ',' " & Registro!Observaciones.Value & " ')"
Lo ejecuto y me sale: "Se ha producido el error '424' en tiempo de ejecución: Se necesita un objeto"
Si alguien es tan amable de ayudarme o decirme que errores puedo tener.

1 respuesta

Respuesta
2
No se si Registro es el nombre del formulario, si es así tendrás que referirlo a su colección: Forms! Registro! UAP. Value, como supongo que el botón (o el objeto) desde el que ejecutas la sql está en el mismo formulario, no tienes que poner el nombre de este, bastaría con poner Form! UAP. Value por ejemplo y así con los demás controles.
Tienes que tener en cuenta que si el campo donde vas a insertar es de texto si tienes que poner comilla doble comilla, pero si el campo es numérico tendrás que quitar la comilla simple, si es de fecha: cDate('" & Lo que sea & "')
Me cuentas.
Gracias por tu respuesta, el botón se encuentra en el mismo formulario y si... el nombre del formulario es Registro.
Tengo varios tipos de campos y mi duda es si en todos tengo que poner .value u otro formato:
UAP (cuadro combinado y contiene números, aunque se pueden leer como texto... no necesito operaciones)
Sección, Máquina, Técnico y Tarea (cuadros combinados con texto)
Fecha es un control ActiveX en forma de calendario (¿debería hacer una nueva linea y poner lo que me has dicho o lo puedo agregar dentro de dicho paréntesis?)
Horas y cantidad son dos cuadros de texto en formato numérico
Descripción, piezas y observaciones son cuadros de texto en formato textual.
Muchas gracias por tu ayuda
He realizado algunos cambios y ahora me sale el error 3134 Error de sintaxis en la instrucción INSERT INTO
El código que he puesto es:
DoCmd.RunSQL "Insert Into General(UAP,Sección,Máquina,Técnico,Tarea,Horas,Descripción,Piezas,Cantidad,Observaciones) Values (' " & Form!UAP.Value & " ',' " & Form!Sección.Value & " ',' " & Form!Máquina.Value & " ',' " & Form!Técnico.Value & " ',' " & Form!Tarea.Value & " '," & Form!Tiempo.Value & ",' " & Form!Descripción.Value & " ',' " & Form!Piezas.Value & " '," & Form!Cantidad.Value & ",' " & Form!Observaciones.Value & " ');"
En el que he quitado la fecha por si me daba problemas... pero pienso incluirla luego. No se si pueden dar problemas los nombres con acentos...
Si me puedes solucionar esta duda.
Cuando te digo campo de texto o numérico me refiero al campo de la tabla donde quieres insertar, el cuadro combinado o los cuadros de texto siempre devuelven un string y por lo tanto hay que adaptarlos. En los cuadros combinados tienes que adjudicarles el valor que seleccionas, para ello vas a las propiedades y en la acción Al hacer clic ---> Procedimiento de Evento ---> picas en el cuadrado de la derecha, el de los ... y pones Me. Refresh
Por lo demás no veo nada incorrecto en el Insert Into, los nombres de campos con acentos no deberías dar problemas. De todos modos, si sigue con el error, me puedes mandar la BD (en ances 2003 y con pocos registros para que no pese mucho) a mi correo y la echo un vistazo.
[email protected]
Me cuentas.
Te envié ayer un correo, no se si lo recibirías o no lo habrás visto. Si me puedes ayudar para mí sería un alivio.
Espero no se mucha molestia. Gracias.
El correo lo he visto hoy, este fin de semana lo utilicé como... fin de semana de ocio.
He visto algunas incoherencias en la BD, campos que en una tabla son de texto y en otras numérico, campo IdSeccion que luego no sirve... no se algunas cosas más. Si te parece te preparo un planteamiento (como yo lo haría) y te lo envío.
Te aconsejo que no pongas acentos (aunque en principio no debería de importar) ni paréntesis en el nombre de las tablas, ni espacios en blanco en los nombres, tanto de campos como de tablas o formularios, controles... etc. Son cuestiones que access no gestiona demasiado bien.
Me cuentas.
Vale, muchísimas gracias. El finde siempre debe ser de ocio, perdón si te molesté, pero andaba un poco nervioso. Hay algunas cosas mal debido a que soy novato en esto, y iba solucionando problemas... y por miedo a borrar algunas cosas, las iba dejando.
¿Cuándo tendrás tu planteamiento preparado aproximadamente?
Un saludo, y mil gracias.
No te preocupes, mañana te lo mando.
De acuerdo, muchas gracias y espero no ser un incordio.
Saludos, Miguel Ángel
Buenos esto del access, a veces es... totalmente demencial. Te cuento, cree una BD nueva, quité acentos, paréntesis etc... (Aunque como te dije no tenían porque estorbar) y... me seguía dando error. Entonces recordé que me pasó algo parecido hace años y al final fue que un nombre de un campo lo llamé Imp (por importe) y resultó que Imp es una función de access y por lo tanto una palabra reservada que no se puede utilizar sino como tal. Bien, repasé la BD en busca de la palabra "reservada" y esa era... General, cambié el nombre de la tabla por General1 y se acabó el problema. Lo curioso es dónde reserva esta palabra: cuando creas una tabla nueva, en las propiedades del campo hay 2 fichas: General y Búsqueda, pues es aquí donde la reserva.
De todos modos yo cambiaría la BD, ya te digo que tienes algunas incoherencias. Cuando tenga resulto lo de la fecha (que supongo elegirás del control calendario) te mando la BD y tú decides.
Muchísimas gracias, me ha sido de gran ayuda. Nunca pensé que un problema tan tonto pudiera dar tantos quebraderos de cabeza.
Un saludo,
Miguel

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas