Cómo imputar datos en tablas por código VBA

Quería saber cual es la mejor forma de imputar datos en tablas para agregar registros nuevos pero tomando datos de consultas.

Ejemplo: Tengo un Tabla pedidos y otra que se llama Detalle de pedidos.

Por consultas obtengo una consulta con cada pedido y cuanto es el total del monto del pedido (sumando el detalle de pedidos).

Por otro lado tengo otra tabla que se llama Movimientos.

La cuestión que en la tabla movimientos pongo las facturas a los clientes donde cada cliente tiene su cuenta. Lo que quisiera hacer es un pedido imputarlo en la tabla movimientos en 10 cuotas. Es decir si el pedido son 1000 dolares el total. Quiero que ese monto se tome de la consulta de pedidos y se divida por 10 cuotas y en la tabla de movimientos se impute así.

Id - Cuenta cliente - Concepto - Monto

1 - PEPE - Cuota 1 de 10 - 100

2 - PEPE - Cuota 2 de 10 - 100

Y así en total los 10 registros en la tabla movimientos. Tomando los datos de la consulta y todo esto haciendo click en algún botón que lance la macro o el código.

La pregunta es tanto para este ejemplo en concreto. Cual es la mejor forma para hacer que access o vba tome info de tablas, saque las cuentas que necesite e impute una serie de registros en otra tabla con esos datos.

1 respuesta

Respuesta

En un evento del formulario pon

docmd.setwarnings false

Dim i as integer

for i= 1 to 10

DoCmd.RunSQL "insert into movimientos(cuentacliente,concepto,monto) values(""Pepe"",""Cuota"" & "" "" & " & i & " & "" ""& ""de 10"", 100)"

Next i

Lo de setwarnings es para que no te de el coñazo de "Va a insertar...

Si CuentaCliente estuviera separado ponlo entre corchetes

Gracias por tu respuesta.

Lo que no entendí es como hacer para que los valores los tome de un pedido en una consulta. Es decir según en el pedido que este, cuando toque el botón, la información debería completarse con el monto del pedido ese, la cuenta del cliente de ese pedido, etc.

Por otro lado, ¿de esta manera se imputan varios registros? Recuerda que si ese pedido tiene un plan en 3 cuotas, deberías completarse 3 registros nuevos, cada uno con el monyo de una cuota.

Gracias nuevamente!

Por partes:

Supongamos que tienes una tabla Pedidos con Idpedido(Autonumerico), Cliente, NIF, dirección, etc y otra tabla DetallePedido con IdPedido(numérico y relacionado con el anterior Uno a Varios), Producto, Precio, etc

En el formulario Pedidos crea un botón de comando y en sus propiedades-Eventos-Al hacer clic crea un procedimiento de evento y entre Private Sub y End Sub escribe

docmd.runsql"Insert into movimientos(cliente, fecha, dirección)values('" & me.client & "', '" & me.NIF & "', '" & me.direccion & "')

Si lo que quieres es insertar alguno de los valores del formulario

Si lo quieres insertar todos, es mejor

Docmd.runsql"insert into movimientos select * from Pedidos where id pedido='" & me.pedido & "'"

En el caso de que los valores estuvieran en el subformulario,

En breves momentos continuo, que tengo que salir

Continuo, en caso de que los valores estuvieran en el subformulario

docmd.runsql"insert into movimientos select * from DetallePedido where idpedido=forms!pedidos!idpedido"

Con respecto a lo de las cuotas, como no sé donde está el numero de plazos para pagar, me remito a lo dicho anteriormente de for i =1 to...

De todas formas, si quieres, mándame una copia sin registros de tu base a [email protected], la miro y te digo, o bien te mando un ejemplo.

Hola!
Gracias de nuevo.

El tema de las cuotas: el campo estaría en la Tabla PEDIDOS. Se llamaría CUOTAS seria numérico. Pedidos. Cuotas (Cada pedido tendría un numero de cuotas, ese numero seria la cantidad de registros que hay que imputar iguales con el monto de cada cuota, pero cambiando el concepto que diga cuota 1 de POR, cuota 2 de POR, etc.

Yo tengo que dividir el monto total de la orden, que se encuentra en una consulta que se llama PEDIDOS AMPLIADOS. Donde aparece un campo de consulta llamado TOTAL (La suma del detalle de pedidos de esa orden), yo necesito que ese monto se divida por las cuotas para sacar el monto de cada cuota.
¿Se puede hacer esa fórmula INSERTO INTO buscando un campo de una consulta? Para hacer así un campo calculado con el monto de cada cuota en una consulta dividiendo el campto TOTAL/CUOTAS = VALOR CUOTA.
Puedes explicarme mejor como funcina esa formula INSERT INTO y despues la formula FOR i=! to... ? Para entender la estructura bien.
Gracias por tu ayuda desde ya!

Si en el formulario tienes un cuadro de texto llamado Cuotas(mira en sus propiedades-Otras-Nombre), y otro cuadro llamado Total el código que te puse antes ponlo como

dim i as integer, M as currency

M=total/cuotas

for i= 1 to me.cuotas

lo demás igual, donde ponía 100 pones '" & M & "'

La instrucción for i=1 to... te permite "repetir" la misma instrucción el numero de veces que le pongas. Por ejemplo

For i= 1 to form.recordset.recordcount lo que hace es recorrer todos los registros de un formulario o subformulario, desde el registro activo. Va avanzando hasta completar la cuenta de los registros.

También se puede combinar con instrucciones tipo select case o If.

For i=4 to 17

select case i

case is= 4

cliente="pepe"

case is=5

docmd...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas