Como guardar los datos de los campos de un formulario en una tabla nueva en Access

Ante todo decir que soy una gran inexperta en Access, pero a la vez una gran atrevida por estar intentando hacer un programa de facturación en Access.

Quiero hacer un formulario que muestre los registros de una consulta y que aceptando uno a uno cada registro de guarden todos los campos en una nueva tabla.

No se si me habré explicado bien, pero espero que alguno de vosotr@s me hayáis entendido para poder ayudarme.

1 respuesta

Respuesta
1

una forma sería usar sentencias SQL del tipo INSERT INTO (puedes ver cómo se usa aquí: http://www.aulaclic.es/sql/t_6_1.htm  o aquí: http://www.w3schools.com/sql/sql_insert.asp )

Otra forma. Algo más "complicada" sería usar recordsets.

Te explico cómo haría yo usando SQL:

1º/ Si tu formulario es continuo (muestra varios registros de la consulta), en la vista diseño añade un botón en la sección detalle, para que te aparezca al lado de cada registro. Si tu formulario no es continuo, puedes añadirlo en la sección detalle, en el encabezado o en el pie, donde más te guste cómo queda,

2º/ Saca las propiedades del botón, con el botón derecho, vete a la pestaña "Eventos" y busca "Al hacer click" y pulsa el botón del los 3 puntos que aparece a la derecha de la fila. Selecciona "Generador de código" en la ventana emergente, y entrarás al editor VBA.

3º/ Entre las lineas Private Sub ..._Click() y End Sub, escribe un código como este:

Dim miSQL As String ' Variable para definir la sentencia SQL

DoCmd. Setwarnings False ' Esto desactiva los avisos de confirmación de Access

'Construyes la SQL

miSQL="INSERT INTO NombreTabla(campo1, campo2...campoN) VALUES (" & Me.txtCampo1 & "," & Me.txtCampo2 & "," & ... & Me.txtCampoN & ")"

CurrentDb. Execute miSQL 'Ejecutas la SQL

DoCmd. Setwarnings True' Activas de nuevo los avisos de Access

Te en cuenta un par de cosas para la SQL:

a) NombreTabla tendrás que cambiarlo por el nombre de la tabla a la que quieres añadir los registros (guardarlos)

b) Campo1, campo2... campoN, serán los campos de la tabla a los que quieres insertar.

c) Me.txtCampo1, Me.txtCampo2... son los cuadros de texto del formulario (puedes ver los nombres de los controles en Propiedades->Pestaña Otras->Nombre)

d) Si el campo a insertar es de tipo texto, tienes que encerrarlo entre comillas simples, por ejemplo:

",'" & Me.txtCampo2 & "',"

e) Si el campo a insertar es de tipo fecha, tienes que encerrarlo entre almohadillas y ponerlo en formato americano, por ejemplo:

",#" & Format(Me.txtCampo3,"mm/dd/yyyy") & "#,"

A ver si con estos tips lo consigues. Si no, miramos otra forma.

Buenos días Sveinbjom El Rojo, ante todo muchas gracias por tu pronta respuesta, pero hago algo mal que me da error.

Te explico lo que me pasa:

Tego un formulario con los campos siguientes:

Mes

Nmes

Codigcli

SumaDetotalbultos

SumaDetotalknetos

STsubtotal

STivaped

SumaDeTotalfac 

Tengo una tabla FACTURAS, con los campos siguientes:

Mes

Nmes

Codigcli

Totalbultos

Totalknetos

Tsubtotal

Tivaped

Tfac

En el formulario he insertado un botón y en “Eventos” “Al hacer clik” en el generador de código he escrito lo siguiente:

Dim miSQL As String ' Variable para definir la sentencia SQL

DoCmd.SetWarnings False ' Esto desactiva los avisos de confirmación de Access

'Construyes la SQL

miSQL = "INSERT INTO Facturas(mes, nmes, codigcli, totalbultos, totalknetos, tsubtotal, tivaped, tfac) VALUES (" & Me.Mes & "," & Me.nmes & "," & Me.codigcli & "," & Me.SumaDetotalbultos & "," & Me.SumaDetotalknetos & "," & Me.STsubtotal & "," & Me.STivaped & "," & Me.SumaDeTotalfac & ")"

CurrentDb.Execute miSQL  'Ejecutas la SQL

DoCmd.SetWarnings True ' Activas de nuevo los avisos de Access

Me da el error siguiente:

Se ha producido el error ‘3346’ en tiempo de ejecución:

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

Si doy a DEPURAR se marca en amarillo

CurrentDb.Execute miSQL  'Ejecutas la SQL

 Para probar que pasaba si dejaba solo los campos que son iguales en el formulario y en la tabla, he dejado el código como te escribo a continuación

Dim miSQL As String ' Variable para definir la sentencia SQL

DoCmd.SetWarnings False ' Esto desactiva los avisos de confirmación de Access

'Construyes la SQL

miSQL = "INSERT INTO Facturas(mes, nmes, codigcli) VALUES (" & Me.Mes & "," & Me.nmes & "," & Me.codigcli & ")"

CurrentDb.Execute miSQL  'Ejecutas la SQL

DoCmd.SetWarnings True ' Activas de nuevo los avisos de Access

y me sale el error siguiente al ejecutarlo

Se ha producido el error ‘3061’ en tiempo de ejecución:

Pocos parámetros. Se esperaba 2.

Si doy a DEPURAR se marca en amarillo

CurrentDb.Execute miSQL  'Ejecutas la SQL

Como puedes comprobar soy una nulidad, pero por favor ayuda que me estoy desesperando con el programa y pensar que se los había prometido a mi hija como regalo de Navidad para que comenzase el año pudiendo llevar su pequeño negocio y veo que llego a Diciembre y estoy con el.

Un saludo

¿Sería posible que me pasaras una copia del archivo para verlo? No hace falta que incluya datos "reales", con uno o dos registros inventados para ver su funcionamiento es suficiente.
Puedes subirla a dropbox, o cualquier web de intercambio de enlaces (yo suelo usar www.filebig.net) y pegas aquí el enlace de descarga.

De acuerdo, me harías un gran favor en revisar lo que tengo.

Podrías mandarme una dirección de correo para que te mande una pequeña explicación  del jeroglífico que tengo

Muchas gracias

Mejor explícalo aquí, por si alguien más tiene un problema similar pueda encontrar una sugerencia.

Te mando el enlace para la descarga del fichero

http://www.filebig.net/files/RmpgCVE9nD  

Lo que intento hacer es que se vayan introduciendo los pedidos, por cada pedido se origina un informe con datos calculados.

Que en un formulario con los datos de una consulta de los pedidos por mes y por cliente, con un botón se puedan guardar esos datos en una tabla Factura, para así poder realizar el informe con más campos que hay que añadir para poder dar por realizada la factura del cliente por mes.

Ahí es donde al hacer eso me dan los errores que te he comentado anteriormente.

Espero tus noticias

La bajo ahora y le echo un vistazo

Gracias

La verdad, no entiendo dónde está el fallo en la instrucción SQL, pero como yo estoy más acostumbrado a trabajar con recordsets, lo hice así y funciona perfectamente.

El código de tu botón sería este:

'Declaro una variable Recordset
Dim rst As DAO.Recordset
'Creo el recordset sobre la tabla FACTURAS
Set rst = CurrentDb.OpenRecordset("FACTURAS", dbOpenDynaset)
rst.AddNew 'Añado un registro
rst("Mes") = Me.Mes
rst("nmes") = Me.nmes
rst("codigcli") = Me.codigcli
rst("totalbultos") = Me.SumaDetotalbultos
rst("totalknetos") = Me.SumaDetotalknetos
rst("tsubtotal") = Me.SumaDeTotal_de_subtotal
rst("tivaped") = Me.SumaDeTotal_ivaped
rst("tfac") = Me.SumaDeTotalfac
rst.Update 'Actualizo el recordset
rst.Close 'Cierro el recordset
Set rst = Nothing 'Libero memoria

'Lanzamos mensaje avisando del éxito
MsgBox "Se han añadido los datos correctamente a FACTURAS", vbOKOnly, "EXITO"

Te resubo la BD con el código ya en su sitio. http://www.filebig.net/files/CBm6NKvFAH 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas