Access - Insertar registro con SQL desde formulario

 
Vista:
sin imagen de perfil
Val: 14
Ha aumentado su posición en 4 puestos en Access (en relación al último mes)
Gráfica de Access

Insertar registro con SQL desde formulario

Publicado por mpb1710 (8 intervenciones) el 04/12/2018 20:54:43
Buenas tardes,

Estoy bloqueado con Access. Necesito que al hacer click en un boton guardar de un formulario, me guarde un registro en una tabla mediante un macro.

Tengo generado ya el macro y creo que el problema está en la sintaxis de la consulta sql.

Os lo muestro:
nombre formulario -> testform
nombre tabla -> fitxa || campos -> fitxa_id, fitxa_serveis_id, fitxa_data, fitxa_patrulla, fitxa_agents, fitxa_horari
nombre cuadros de texto -> f_fitxa_id, f_fitxa_serveis_id, f_fitxa_data, f_fitxa_patrulla, f_fitxa_agents, f_fitxa_horari

Consulta:
INSERT INTO fitxa ( fitxa_id, fitxa_serveis_id, fitxa_data, fitxa_patrulla, fitxa_agents, fitxa_horari)
SELECT forms!testform!f_fitxa_id, forms!testform!f_fitxa_serveis_id, forms!testform!f_fitxa_data, forms!testform!f_fitxa_patrulla, forms!testform!f_fitxa_agents, forms!testform!f_fitxa_horari
FROM registro;

Cuando lo ejecuto no me guarda ningún registro en la tabla fitxa.
Muchas gracias por adelantado.
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

Insertar registro con SQL desde formulario

Publicado por Anonimo (3316 intervenciones) el 04/12/2018 21:35:43
En esa SQL se le indica que el origen de datos es 'registro' y en la descripción no aparece como nombre de una consulta o tabla.

Lo adecuado seria copiar una parte de esa SQL (a partir de 'Select') añadirle un punto y coma final y pegarlo en una consulta NUEVA (en su vista SQL) ejecutarla y verificar que devuelve, si devuelve algo (lo cual creo poco probable) será la que debería crear en la tabla 'fitxa'.

Nada impide que se modifique la consulta para que devuelva lo esperado y se proceda de modo inverso (copiar y pegar la 'Select resultante en el lugar que ahora ocupa la otra)
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
sin imagen de perfil
Val: 14
Ha aumentado su posición en 4 puestos en Access (en relación al último mes)
Gráfica de Access

Insertar registro con SQL desde formulario

Publicado por mpb1710 (8 intervenciones) el 05/12/2018 09:58:03
Bueno, la tabla registro la utilizo como tabla auxiliar porque no se me ocurre cómo insertar desde un formulario a varias tablas relacionadas con una clave foránea entre si.

Pero mi principal duda es como consigo referirme al contenido de un cuadro de texto desde una consulta SQL.

Entiendo que es correcto forms!nombreformulario!cuadrodetexto ???

Gracias de nuevo
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

Insertar registro con SQL desde formulario

Publicado por Anonimo (3316 intervenciones) el 05/12/2018 15:42:24
Es una forma correcta, pero no para utilizarlo en ese contexto

Select implica la referencia a un conjunto de datos que puede ser 'real' o inventado (aclaro este detalle)
Real= en una tabla como tal dato
inventado= una consulta que puede tener varios orígenes (ejemplo: unión de varias tablas relacionadas como unir los padres y los hijos, las líneas de una venta y su factura …..)

Para utilizar en ese contexto valores (permíteme la licencia de decir que 'son/van por libre) no se define a los datos así, seria (mas o menos) de esta otra forma:

INSERT INTO fitxa ( fitxa_id, fitxa_serveis_id, fitxa_data, fitxa_patrulla, fitxa_agents, fitxa_horari) VALUES (forms!testform!f_fitxa_id & "," & forms!testform!f_fitxa_serveis_id & "," & …..)


La teoria
Insert Into Tabla_1 (campo1, campo2) Values (valor para el campo1, valor par el campo 2)

Esto es la expresión una vez evaluada por el motor de Access quedaría asi para un dato numérico y uno de texto, la edad, el apellido:

Insert Into Amigos (Edad, Nombre) Values (forms.formularioDatos.LaEdad & ", '" & forms.formularioDatos.ElNombre & "'")

Si los datos fueran: 18 años y el nombre: Juan Antonio quedaría asi al final:
Insert Into Amigos (Edad, Nombre) Values (18, 'Juan Antonio')

(pero esto ultimo solo se 'vería' si en la ventana de inmediato y en tiempo de ejecución escribimos solo el contenido del segundo paréntesis)

?forms.formularioDatos.LaEdad & ", '" & forms.formularioDatos.ElNombre & "'"
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 14
Ha aumentado su posición en 4 puestos en Access (en relación al último mes)
Gráfica de Access

Insertar registro con SQL desde formulario

Publicado por mpb1710 (8 intervenciones) el 05/12/2018 16:21:07
Muchísimas gracias!!!!

Me has servido de mucha ayuda
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
sin imagen de perfil
Val: 14
Ha aumentado su posición en 4 puestos en Access (en relación al último mes)
Gráfica de Access

Insertar registro con SQL desde formulario

Publicado por mpb1710 (8 intervenciones) el 05/12/2018 17:27:00
Me ha surgido otro problema con la sintaxis. Al intentar introducir datos me pasa esto:

INSERT INTO fitxa ( fitxa_fecha, fitxa_patrulla )
VALUES ([forms].[fitxa].f_fitxa_fecha & "," & [forms].[fitxa].f_fitxa_patrulla); -----> Error

El número de valores de consulta y el número de campos de destino son diferentes.

Entiendo que es un problema de interpretación de decimales pero no consigo solucionarlo.

Muchas gracias de nuevo.
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

Insertar registro con SQL desde formulario

Publicado por Anonimo (3316 intervenciones) el 06/12/2018 00:34:11
Los identificadores de fecha (en Access) son '#' y el formato correcto mes/dia/año porque lo interpreta en formato americano
Hay una alternativa, convertir la fecha a valor numérico (su valor real) eso se logra con una función tal cual es CDbl

Con los decimales puede haber un problema y es el separador decimal, la solución mas simple es aplicar al valor numérico la función STR que le indicara a Access que adapte el separador decimal 'local' al separador decimal americano (el punto)
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