Alguien me ayud Insert into

Tengo un pegón en un proyecto pequeño. Tengo un form con datos de venta, y los quiero pasar a una tabla no relacionada donde iré almacenando los datos de compras, ventas y gastos, llamada DataBase, ya la diseñé con los campos comunes de estos tres formularios separados. La idea es poner un botón en cada formulario (uo en ventas, uno en compras y uno en gastos)], para que tome los datos que yo seleccione y me los pase a esa taba DataBase, por supuesto en la fila que continúa vacía. Luego con esa DataBase llena puedo hacer maravillas de reportes, hasta un flujo de operaciones, o algo así. Por ahora he intentado hacerlo con el form factura (venta), y pasar al menos dos datos de prueba y me da error. Trabajo access 2010. Dejo el código que uso, pero me da error, que aplico ma la instrucción INSER INTO. Ayuda please!

Private Sub RegistrarDataBaseVENTAS_Click()
DoCmd.RunSQL "INSERT INTO DataBase (IdRegistro´,Factura) Values ('" & Form!Factura.Value & "', '" & Form!Fecha.Value & "')"
End Sub

Respuesta
1

Lo primero que veo es que te sobra la comilla que pones después del campo IdRegistro. Lo segundo es que los campos no se corresponden con los valores que estás pasando: dices que te inserte en los campos IdRegisto y Factura, y le pasas los datos de Factura y Fecha.

Más cosas: si IdRegistro es un campo autonumérico, no le puedes pasar un valor, ya te lso va generando él solo. Para pasar un valor numérico, se pone directamente, sin comillas simples. Para pasar un valor de texto va entre comillas simples y para pasar un valor de fecha/hora, va entre almohadillas. Además SQL trabaja con fechas en formato americano.

Resumiendo, y obviando la conveniencia o no del proceso que haces y la estructura de tu BD, tu SQL debería ser ésta:

"INSERT INTO DataBase (Factura,Fecha) Values (" & Form!Factura & ", #" & Format(Form!Fecha,"mm/dd/yyyy") & "#)"

Un saludo.


Gracias estimdo nksvacces... las lecciones y consejos me vienen bien. Pero fíjate que aún me da el error. Hice tal.me indicaste, estoy seguro algo mo hago bien en la estructura pero no caigo que puede ser.

Sería mucha molestia te paso el archivo y me.echas una mirada rápida? 

Fíjate qie mi objetivo es obtener una base de datos madre qie recoja datos de tres forms? Factura de ventas, compras y de gastos

Esto porque por otro lado he querido hacer un flujo con consultas ppr mes pero cuya estructura sea: ingresos (ventas) menos Egresos ( compras mas gastos) y no he podido. Por eso deseaba hacer esta DataBase para resolver.

En todo caso agradezco tu ayuda y aprendozajes con tu asesorria y consejos. 

Saludos.

¿Qué has hecho y qué error te da?

Gracias por tu disposición de apoyarme. Te explico detalles. El sistemita que pretend lograr es un sistema corto de facturación (tblFacturaVenta), que se abre desde un form (tblFactura), el cual tiene otros dos subform (ConsultaDetalles subform y el de los totales SubformConsulta totales). Estos anan bien, están relacionados y llamo una factura, en el subConsulta detalles selecciono productos, aplico descuentos, etc.... Luego en el SubconsultaTotales calculo los subtotales, aplico impuestos y sale el total... tengo un botón de actualizar los sub, y otro de iprimir factura filtrado con el ID de Factura  (desde el Form principal). Eso anda bien. Similar tengo el mismo mecanismo pero con Compras, igual Un Form Principal y dos subform que se nutren desde dos consultas para Detalles (productos, precios, etc.) y para Totales. Por otro lado tengo otra tabla de Gastos (tblGasto), que se abre desde un form (frmGasto) y registro los gastos que pueden ser clasificados como Administrativos, Ventas o Financieros desde un combobox y anda todo bien.

Ahora, deseo generar una consulta para salida de un Informe ESTADO DE RESULTADO que me relacione estas tres operaciones grandes que te describí, llamadas VENTAS, COMPRAS y GASTO. Mas o menos así: 

INGRESOS: Ventas

EGRESOS: Compras + Gastos

NETO: INGRESOS - EGRESOS (esto es el resultado).

Esto se llama un estado de resultado simple y básico en un pequeño negocio.

¿Cómo se me ocurrió hacer esto? Pensé que sin relacionar estas tres operaciones, obviamente, jamás saldría el Reporte, por tanto, diseñé una tabla (tblOperación) con tres Campos: IdOperacion, Operación y DescribeOperacón. Solo hay datos acá en Operación, es INGRESO o EGRESO. En el describe solo explico que es ingreso o egreso.   Luego diseñé otra tabla llamada (tblCategoria) con su IdCategoría (autonumérico), IdOperación (con combo desde tblOepración: INGRESO o EGRESO), Subcuenta (Campo que baja a otro nivel, si es INGRESO: Ventas, Otros Ingreso, etc.). Estánn relacionadas de modo que IdOperación tiene varios IdCategoría.

Luego esta relación la extrapolo a las tres oepraciones que te describí al inicio, Ventas, Compras y Gastos tienen un campo que llenas desde combobox y seleccionas la Categoría de la operación que registras. Ejemplo: Ventas, abro form facturar, lleno campos y uno de ellos dice: Categoría: Ventas, u otros ingresos (está filtrada solo esos dos desde ventas).

Estimo que están bien relacionadas, lo que deseo es consulta o informe que me agrupe las tres operaciones (vender, comprar o gastar), en la estructura que te sugerí... de ahí el intento de hacer esa SQL que aún me da error. El error que m da es el mismo... incluso cambié nombres de campos en tabla DataBase a iguales en nombre y tipos a la de Factura para que coincidan, pero nada. Error: 3134 en tiempo de ejecución, y me pone amarillo la línea DoCmd.RunSQL "INSERT INTO DataBase (Code) Values (Form!'Code')"   Lo puse así simplificando a un campo llamado code para entender el error o la solución, pero nada amigo. Disculpa lo extennso, pero lo creí necesario, quizá tiene otra solución más sabia, ya llevo 3 semanas en el tema. Saludos y bendiciones!  Reitero si puedes, con gusto te comparto el proyectito.

Empezando por el final:

La SQL si la escribes tal y como pones (aunque con losnombres correctos, es lógico que te de error: te sobran las comillas simples que pones alrededor de Code:

DoCmd.RunSQL "INSERT INTO DataBase (Code) Values (Form!Code)"

A mi no me gusta nada usar esa notación en el código VBA, y prefiero hacer referencia a los controles del formulario usando la propia sintaxis de VBA, es decir, si tienes un control llamado Code de tipo numérico quedaría:

DoCmd.RunSQL "INSERT INTO DataBase (Code) Values (" & Me.Code & ")"

Si Code fuera de texto:

DoCmd.RunSQL "INSERT INTO DataBase (Code) Values ('" & Me.Code & "')"

Si Code fuera de fecha/hora:

DoCmd.RunSQL "INSERT INTO DataBase (Code) Values (#" & Format(Me.Code,"mm/dd/yyyy") & "#)"

En segundo lugar, y sin dudar que las relaciones y todo te funcionen bien, pues por lo que comentas lo tienes bien hecho, en mi opinión complicas demasiado lo que es fácil.

Verás: para realizar una factura te llega y basta con dos tablas, por ejemplo tblFacturas, con los datos fijos para todas las facturas: num factura, cliente, fecha, total sin impuestos, impuesto, total factura...; y otra para el detalle, por ejemplo tblDetalleFact, con los campos "variables": producto, cantidad, precio unitario (que puedes traer de la tabla productos), coste total (calculado)... El tema de descuento lo puedes poner en detalle o en factura según quieras aplicar el descuento a la factura o a los distintos productos...

Mi punto es que no necesitas una tabla ni un subformulario para calcular los totales, pues lo puedes hacer fácilmente por código o en cuadros de texto.

Lo mismo serviría para las compras.

Si quieres ver un ejemplo muy sencillo de esto, mira el apartado "Un gran ejemplo" dentro de este enlace: http://siliconproject.com.ar/neckkito/index.php/component/content/article/96-ejemplos-explicados/ejemplos-de-controles/279-cuadros-combinados 

O en este otro de Neckkito: http://siliconproject.com.ar/neckkito/index.php/component/content/article/94-ejemplos-explicados/ejemplos-de-aplicaciones/122-facturacion 

Por último, en mi opinión también te equivocas con el sistema que intentas montar para sacar un resultado. ¿Por qué lo digo? Porque el resultado, para que tenga un sentido útil, tendrías que calcularlo haciendo referencia a un período concreto de tiempo (mes, semestre, año, semana...), y teniendo esto en cuenta, todas esas tablas "a mayores" que creas solo tendrán sentido si le añades un campo fecha a la tabla en la que agrupas todos los movimientos, o bien, la vacíes y le traspases solo los datos del período para el que vas a calcular el resultado.

E incluso así, desde mi punto de vista, son innecesarias, pues si ya tienes en la tabla facturas la fecha de factura, puedes crear una consulta de totales que te pida una fecha inicial y una final y te de la suma de todas las facturas entre esas fechas (la consulta si la haces bien te devolverá un único registro). Lo mismo haces con las compras y lo mismo con los otros gastos. Luego haces una consulta sobre esas tres consultas y haces la operación (Ventas -Compras-Gastos).

A ver si todo este "testamento" te sirve.

Saludos!


Gracias amigo por estas lecciones y punto de vista más sencillo.... algo me decía que las cosas las hacía muy complejas, tienes razón.  Pero tú sabes, un aprendiz ve en internet y sigue la corriente... cuando miré ya estaba complicada la cosa por seguir algunos videos en YouTube... para mejorar haré esos ajustes en Facturas y Compras, eliminando esos subforms y esos caminos largos. Lo intentaré y te comento. Visto así, entiendo que será más fácil hacer la consulta para el reporte Final. La parte que no te entendí muy bien es el tema de detalles, ahí solo conozco la ruta de un subform integrado en el de Factura, pero miraré los ejemplos a ver como me va. Gracias por tu apoyo, y el testamento es necesario, jejeje, de otra manera no entiendo. Gracias man, eres grande!

Cuando veas los ejemplos lo entenderás seguro.

Rapidammente he leido a Nekito, muy buen ejemplo, aunque bastante básico. Mi versión es mucho más compleja, por ejemplo impuestos, el usuario desde otro form puede habilitar o no el % de impuestos, incluso ajustar el valor del %... tengo usuarios con password y accesos definnidos según una tabla donde les brino el acceso admin u otros, y genero informes por fechas... pero veo que me equivoqué en la complejidad de Totales. Aún me queda la duda del reporte final. Seguiré dándole vueltas a las propuestas de Nekito... me parecen buenas lecciones, sobre todo en manejo de cuadros de textos y como poner expresiones, incluso el tema de los códigos para los forms, hay mucho que aprender de ahí. Gracias amigo, sigo aprendiendo mucho. Ya te contaré cuando implemente los ajustes, me llevará unos días, jejeje.... estoy aprendiendo. Saludos.

Oh, leí tus aportes, magistrales amigo. Ahí tengo mucho material para mejorar mi aplicación... tenía semanas buscando un combo en cascada o algo así... esas opciones en varias vías está bárbaro, super útil. Gracias, está genial la colaboración. Sigo aprendiendo de ustedes.

Los enlaces era para que vieras "versiones simples" de un sistema de facturación. A partir de ahí, ya lo complicas lo que quieras... XD

¡Gracias! Ha sido una gran escuela amigo. Logré Eliminar esas consultas (5), jejeje. Hice desde las tablas y aprendí mucho a halar los precios desde la tabla Productos, además usé VBA para guiñar los precios y la tasa de impuestos sin consultas extras. Facturación no me sirvió mucho, pero ese artículo tuyo de cuadros Combinados está genial.

Ahora lo que me está pegando es el tema del Flujo. Hice una consulta dede tblFacturaVenta, donde sumo las ventas por mes format ("mmm yy"), y diseñé un formulario "Flujo", puse 12 txt en horizontal uno para cada mes, el primero yo elijo la fecha, ejemplo enero 16,  y que el resto de 11 txt se actualicel al evento AfterUpdate del primero, y me da errado los meses y año.

Private Sub DesdeF_AfterUpdate()
Dim FirstDate As Date    ' Declare variables.
Dim Mes1 As Date, Mes2 As Date, Mes3 As Date, Mes4 As Date, Mes5 As Date, Mes6 As Date, Dim Mes7 As Date, Mes8 As Date, Mes9 As Date, Mes10 As Date, Mes11 As Date, Mes12 As Date
FirstDate = Format(Me.DesdeF, "mmm yy")
Me.Mes1 = Format(FirstDate, "mmm yy")
Me.Mes2 = Format(DateAdd("m", 1, Me.Mes1), "mmm yy")
Me.Mes3 = Format(DateAdd("m", 1, Me.Mes2), "mmm yy")
Me.Mes4 = Format(DateAdd("m", 1, Me.Mes3), "mmm yy")
Me.Mes5 = Format(DateAdd("m", 1, Me.Mes4), "mmm yy")
Me.Mes6 = Format(DateAdd("m", 1, Me.Mes5), "mmm yy")
Me.Mes7 = Format(DateAdd("m", 1, Me.Mes6), "mmm yy")
Me.Mes8 = Format(DateAdd("m", 1, Me.Mes7), "mmm yy")
Me.Mes9 = Format(DateAdd("m", 1, Me.Mes8), "mmm yy")
Me.Mes10 = Format(DateAdd("m", 1, Me.Mes9), "mmm yy")
Me.Mes11 = Format(DateAdd("m", 1, Me.Mes10), "mmm yy")
Me.Mes12 = Format(DateAdd("m", 1, Me.Mes11), "mmm yy")
End Sub

Me da bien si selecciono enero 16, me da los 12 meses bien, pero me agrega un año, pero si elijo oct, o jul, etc., me da bien hasta el dic de ese año -siempre suma un año-, pero luego se salta a enero 2018, salta un año... y desde el primer campo calculado se salta un año.

Una vez definido esto, tengo debajo de cada mes 12 txt donde pondré las ventasde ese mes/año, lo intento y tampoco me da bien... me repite el primer valor de la consulta. se que desde las fechas está mal, pero necesito orientación magistral.

Mir mi intento en los txt de ventas

Private Sub Calcular_Click() 'Calcula el Flujo
If IsNull(Me.DesdeF) Or Me.DesdeF = "" Then 'Me aseguro tengamos las fecchas cargadas
MsgBox ("Selecione Inicio de Cálculos"), vbInformation, "No hay Fecha de inicio definida"
Me.DesdeF.SetFocus
Exit Sub
End If     'si es fecha:   #" & format(me.campo "mm/dd/yyyy") & "#", si es texto: '" & me.campo & "'"
Me.txt1 = DLookup("SumaNetoF", "tblFacturaVenta Consulta", "'FechaMes= & #" & Format(Me.Mes1, "mmmm yy") & "#'")
Me.txt2 = DLookup("SumaNetoF", "tblFacturaVenta Consulta", "'FechaMes= & #" & Me.Mes2 & "#'")
Me.txt3 = DLookup("SumaNetoF", "tblFacturaVenta Consulta", "'FechaMes= & #" & Me.Mes3 & "#'")
Me.txt4 = DLookup("SumaNetoF", "tblFacturaVenta Consulta", "'FechaMes= & #" & Me.Mes4 & "#'")
Me.txt5 = DLookup("SumaNetoF", "tblFacturaVenta Consulta", "'FechaMes= & #" & Me.Mes5 & "#'")
Me.txt6 = DLookup("SumaNetoF", "tblFacturaVenta Consulta", "'FechaMes= & #" & Me.Mes6 & "#'")
Me.txt7 = DLookup("SumaNetoF", "tblFacturaVenta Consulta", "'FechaMes= & #" & Me.Mes7 & "#'")
Me.txt8 = DLookup("SumaNetoF", "tblFacturaVenta Consulta", "'FechaMes= & #" & Me.Mes8 & "#'")
Me.txt9 = DLookup("SumaNetoF", "tblFacturaVenta Consulta", "'FechaMes= & #" & Me.Mes9 & "#'")
Me.txt10 = DLookup("SumaNetoF", "tblFacturaVenta Consulta", "'FechaMes= & #" & Me.Mes10 & "#'")
Me.txt11 = DLookup("SumaNetoF", "tblFacturaVenta Consulta", "'FechaMes= & #" & Me.Mes11 & "#'")
Me.txt12 = DLookup("SumaNetoF", "tblFacturaVenta Consulta", "'FechaMes= & #" & Me.Mes12 & "#'")
End Sub

Disculpa el abuso Rojo, pero llevo tres dias en el tema pegado.

Inténtalo con una consulta de referencias cruzadas, creo que te será más fácil

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas