Problemas con la sintaxis y el funcionamiento de la función INSERT INTRO en Access

Necesitaría la ayuda que podáis darme en un proceso de Access que ya no se como probarla.

Dispongo de un formulario que he de insertar y cumplimentar unos campos en una base de datos de un proceso que estoy realizando.

Me da error de compilación o de sintaxis en el momento de ejecutarla. He probado el proceso en una tabla con una operativa sencilla por ver si la hacia funcionar pero tengo el mismo problema que al intentarlo en el form donde he de adaptarlo.

He probado mil maneras diferentes de colocar (apóstrofos, corchetes, paréntesis... Etc), por ver si la hacia funcionar y siempre consigo el mismo resultado

Así es como estoy realizándola y no se donde esta el motivo para que no funcione bien:

Lo tengo colocado en un botón al hacer click en un formulario con estos parámetros:

Private Sub ACTUALIZAR_Click()

Insert Into ALBARANESLINEASVENTA (DescripcionArticulo) VALUES ('PRUEBAS DE LINEAS')"
Insert Into ALBARANESLINEASVENTA (Cantidad Venta), VALUES (12345)"
Insert Into ALBARANESLINEASVENTA (PVP), VALUES (987)"
Insert Into ALBARANESLINEASVENTA (EstadoCobro), VALUES ('PENDIENTE')"

End Sub

Os agradezco de antemano vuestra muy necesitada ayuda.

1 Respuesta

Respuesta
1

Para usar consultas de acción por código, has de usar CurrentDb. Execute o DoCmd. RunSql, por ejemplo

CurrentDb.Execute "Insert Into ALBARANESLINEASVENTA (DescripcionArticulo) VALUES ('PRUEBAS DE LINEAS')"

Además, puedes resumir todas en una sola:

CurrentDb.Execute "Insert Into ALBARANESLINEASVENTA (DescripcionArticulo,[Cantidad Venta],PVP,EstadoCobro) VALUES ('PRUEBAS DE LINEAS',12345,987,'PENDIENTE')"

Hola de nuevo, gracias por tu ayuda.

Me sigue haciendo lo mismo, no me da error de sintaxis pero no me inserta los campos en la tabla.

Hay un campo autonumérico, ¿puede ser esta la causa?

Estos son los campos de la tabla que estoy realizando las pruebas:

LineaVentaAlbaran -  Tipo: Autonumerico

ContadorAlbaranes - Tipo:Numero

Fecha - Tipo:Fecha

DescripcionArticulo - Tipo:Texto

Cantidad Venta - Tipo: Numero

PVP - Tipo: Numero

EstadoCobro - Tipo: Texto

¿Sera por qué he de cumplimentar todos los campos?, y si es así, ¿Qué hago con el autonumérico?.

He observado que Cantidad Venta esta entre corchetes, ¿es por el espacio que hay entre las dos palabras?.

Un saludo

Vamos por partes, empezando por el final:

1º/ El campo entre corchetes va así por el espacio en blanco. Lo mismo tendrías que hacer si el nombre lleva acentas o signos "extraños" que provoquen errores de código.

2º/ El campo autonumérico se genera cada vez que hay un nuevo registro de manera automática. No tienes que hacer nada con el ni ponerlo en el insert into.

3º/ No es necesario que insertes todos los campos. Con que insertes uno, ya es suficiente.

4º/ He creado una BD con una tabla con los campos que indicas, mismos nombres y tipos, y los dos códigos que te puse en el post anterior funcionan perfectamente (en el ejemplo los puedes ver en los dos botones del Formulario PruebaInsertInto, el primero inserta sólo un campo, el segundo varios de un plumazo).

Además, he creado un formulario independiente para insertar los datos, con un botón con el código que necesitas para que te coja los valores del formulario y los pase a la tabla. En este caso, debes rellenar todos los campos, o te dará error.

5º/Ten en cuenta que los valores de tipo fecha/hora han de ir entre almohadillas (#)

¿Hola cómo estas?.

Me has mandado un ejemplo de la BD donde esta el proceso.

¿Lo has adjuntado a través de algún correo aparte?.

¿Dónde puedo recoger esa BD?

Un saludo

Acabo de recoer la BD y he comprobado que funciona perfectamente con el ejemplo que me has mandado. No me funcionaba porkq estaba abierta la tabla al mismo tiempo que ejecutaba el proceso de insercion. Pero despues lo he comprobado y funciona perfectamente.

Se me presenta el problema que los valores de esos campos que inserto he de recogerlos de otros campos que estan en el Actual Form y pasarlos a otra tabla.

Son Albaranes que han de convertirse en factura al pulsar un boton y estos son los campos de la cabecera y lineas que han de recoger los datos del Albaran que esta en proceso:


Tabla CABECERA FACTURA  (A) CAB FACTURAS (PROV)

IdCliFac = IdCliAlb

FechaFacDef  = Fecha dia factura

NumFacDef  = Numero Factura

EstadoCobro = COBRADO

(Las lineas sera igual pero con sus valores correspondientes, recogiendo sus valores)

Private Sub ACTUALIZAR_Click()

CurrentDb.Execute "INSERT INTO [(A) CAB FACTURAS (PROV)] (IdCliFac) VALUES (IdCliAlb)"

CurrentDb.Execute "INSERT INTO [(A) CAB FACTURAS (PROV)] (FechaFacDef) VALUES (Fecha())"

CurrentDb.Execute "INSERT INTO ([(Year(Date) & Format(Nz(DMax('Val( Mid(NumFacDef, 5))', ([A) CAB FACTURAS (PROV)]), 'Val( Left(NumFacDef,4)) = ' & Year(Date)), 0) + 1, '0000')]"

CurrentDb.Execute "INSERT INTO [(A) CAB FACTURAS (PROV)] (EstadoCobro) VALUES ('COBRADO')"

End Sub

Las lineas cuando esto me funcione sera el mismo proceso pero recogiendo los datos de la lineas del Albaran.

Un saludo y muchas gracias

En la BD de ejemplo, en el código del botón del formulario ALBARANESLINEASVENTA tienes cómo sería el código para recoger los valores de un formulario e insertarlos en una tabla por medio de un INSERT INTO.

Lo que tienes que hacer es encadenar a la SQL los nombres de los campos en vez de poner un valor fijo.

Los códigos te funcionan (insertan en la tabla) aunque ésta la tengas abierta, lo que pasa es que mientras no refresques la tabla (pulsando F5, cerrando y abriendo o con la opción actualizar del ribbon/menu) no verás los nuevos registros.

En el código del botón que pones, veo dos problemas:

1º/ Al hacerlo mediante distintos INSERT INTO, en vez de tener un registro con todos los campos tendrás 4 registros con un campo cada uno. Deber hacerlo todo con un sólo INSERT.

2º/ Esta linea no tiene ningún sentido: CurrentDb.Execute "INSERT INTO ([(Year(Date) & Format(Nz(DMax('Val( Mid(NumFacDef, 5))', ([A) CAB FACTURAS (PROV)]), 'Val( Left(NumFacDef,4)) = ' & Year(Date)), 0) + 1, '0000')]"

Hola de nuevo, ¿cómo estas?

No consigo evitar el error que me da al ejecutar el proceso de actualización a través de este código.

He probado ya un montón de formas de hacerlo y siempre me da error de sintaxis y no se donde esta el error:

CurrentDb.Execute "INSERT INTO [(A) CAB FACTURAS (PROV)] (IdCliFac,FechaFacDef,EstadoCobro) VALUES (IdCliAlb,#Fecha()#,'COBRADO')"

Al igual que no se como dar este valor para que recoja el numero de factura en el momento mismo de la actualización

NumFacDef =([(Year(Date) & Format(Nz(DMax('Val( Mid(NumFacDef, 5))', ([A) CAB FACTURAS (PROV)]), 'Val( Left(NumFacDef,4)) = ' & Year(Date)), 0) + 1, '0000')]"

Gracias por la atención. Un saludo

Suponiendo que IdCliAlb es un cuadro de texto del formulario en el que estás cuando ejecutas el código, y que se llama así, el primer código sería:

CurrentDb.Execute "INSERT INTO [(A) CAB FACTURAS (PROV)] (IdCliFac,FechaFacDef,EstadoCobro) VALUES (" & Me.IdCliAlb & ",#" & Date() & "#,'COBRADO')"

Para el num factura, prueba así:

NumFacDef =Year(Date) & Format(Nz(DMax(Val( Mid(NumFacDef, 5)), [(A) CAB FACTURAS (PROV)], "Val( Left(NumFacDef,4)) =" & Year(Date)), 0) + 1, "0000")

Ola de nuevo

Me funciona perfectamente la Linea de insercion como factura. Pero el problema que estoy teniendo es que no se como darle el Numero de Factura que ha de recoger la linea que inserto.

El campo NumFacDef ha de ecoger el numero correspondiente a traves de este paso

NumFacDef =Year(Date) & Format(Nz(DMax(Val( Mid(NumFacDef, 5)), [(A) CAB FACTURAS (PROV)], "Val( Left(NumFacDef,4)) =" & Year(Date)), 0) + 1, "0000")

Un saludo

Si con esa fórmula te da el número de factura, en el Insert Into (que irá después de esa línea) has de hacer como con la función Date, o un cuadro de texto del formulario.

"Insert into NombreTabla(NombreCampo) VALUES " &  NumFacDef

Buenos días

Me funciona ya perfectamente bien toda la inserción, pero la fecha que recoge de #" & Date() & "#, me da el valor de esta forma: mm-dd-aaa, o sea me saca el mes después el día.

¿Cómo podría corregir esto?.

Un saludo

Ponle Format(Date,"mm/dd/yyyy")

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas