Como usar una variable para abrir una tabla
Tengo 12 tablas con que inician con "Bal' y luego el número de mes: Bal1, Bal2, etc. Deseo seleccionar la tabla con un input box que me pida el mes (por ejemplo 7) y luego abra la tabla "Bal7"
Ya tengo el inputbox y la variable "b", que uso en otra tabla; deseo insertar el resultado en la tabla "Bal"&(numero de mes).
Lo puedes hacer de muchas formas. Lo importante es el código, no te fijes en el formulario. Supongamos que tengo las tablas Clientes1, Clientes2, clientes, 3, etc(tu tendrías que sustituir Clientes por Bal)
Supongamos que en el formulario aprieto el botón de Antonio Moreno( recuerdo lo de no fijarse en el diseño del formulario, sino en el código)
Aprieto el botón y
Escribo el 2 y
Como no sé los datos que quieres pasar yo lo he puesto como
Private Sub Comando20_Click() Dim a As Byte, b As String a = InputBox("Porfa, escriba un número del 1 al 12", "Muchas gracias, es ustaed muy amable") b = "clientes" & a DoCmd. RunSQL "insert into " & b & " (nombrecliente, nombrecontacto, pais)values(nombrecliente, nombrecontacto, pais)" End Sub
Mil gracias Julián, por tu rápida respuesta! De nuevo creo que estoy haciendo algo mal al escribir el código en mi aplicación, a pesar de tus acertadas indicaciones. Específicamente en estas instrucciones :
1.- Al cargar la forma, la rutina llena correctamente los datos de cuenta y nombre en la tabla y acepta el número del mes en el input box.
Private Sub Form_Load()
Dim b As Byte, c As String
b = InputBox("Que Mes desea?", "Ponga el mes que desea")
Mes = b
c = "Bal" & b
DoCmd.RunSQL "insert into Presentacion select Cuenta,Nomb from Cuen"
Me.Requery
End Sub
2.- Al oprimir el botón de comando que actualiza los campos Salin, Scar, SAbo y Salfi con los importes de la tabla, muestra error en la variable "Me.Mes". El código que me enviaste es (Ejemplo para el campo Scar)
'SCar = DSum("nz([cargos])", "partidas", "cuenta='" & Me.Cuenta & "' and mes ='" & Me.Mes & "'")
Logré que funcionara cambiando la variable Me.Mes por el número de mes:
SCar = DSum("nz([cargos])", "partidas", "cuenta='" & Me.Cuenta & "' and Mes = 11")
3.- Al cargar la forma, definí la variable c como string y le asigné el valor de "Bal" & b ( que es el número de mes capturado)
Al cerrar la forma, se activan dos comandos que pretenden,
1.- Borrar los datos de la tabla original : DoCmd.RunSQL "delete * from " & c & " " y
2.- Pasar los datos de "Presentacion" a la tabla "Bal"&(Num de mes): DoCmd.RunSQL "insert into " & c & " select Cuenta,Nomb,Salin,Scar,SAbo,Salfi from presentacion"
De nuevo, el problema parece estar con la forma como escribo las variables y su colocación en la rutina de apertura o cierre de la forma y en el boton de comando.
De nuevo, te agradezco tu valiosa ayuda. Saludos
1º Vamos a ir por partes, ya que me he perdido. Si defines una variable b cuyo valor de mes lo da un inputbox ¿para que quieres definir mes=b?
2º No entiendo la instrucción que viene después, la de
Docmd.runsql"insert into presentacion....
3º Si dentro del mismo botón vas a poner lo de Scar, ¿para que ponerlo como
SCar = DSum("nz([cargos])", "partidas", "cuenta='" & Me.Cuenta & "' and mes ='" & Me.Mes & "'")
Ya tienes definido el mes con la variable b del inputbox, bastaría con poner
Scar=dsum("nz([cargos])","partidas","cuenta='" Me.cuenta & " and mes=" & b & "")
Estoy suponiendo que el Mes de la tabla Partidas es númerico. En caso de que fuera texto deberías ponerlo como
.........................................and Val([mes])=" & b & "")
Ya que b es numérico.
Buenos días Julián. Gracias por tu amable respuesta. respecto a tus preguntas:
1.- En instrucciones anteriores, la variable "mes"=b" servía para el código... Scar = ..."cuenta='" & Me.Cuenta & "' and mes ='" & Me.Mes & "'"; sin embargo, el valor de la variable b (numérico), sigue sin ser considerado; lo dimensiono al abrir la forma: Dim b As Byte, pero al ejecutar el boton de comando no reconoce su valor.
2.- La instruccion de "insert into presentacion..." y luego Me.Requery, insertan los campos de numero de cuenta y nombre en la tabla presentacion, que contiene estos campos, ademas de los de Salin, Scar, SAb y Salfi, que son los que pretendo llenar con los datos calculados que contiene la forma "Partidas". Esta operación se realiza correctamente.
3.- Las instrucciones de DSum... funcionan correctamente para el campo de cuenta, que ya existe en la tabla "presentacion", pero no para el campo "Mes", que existe en la tabla de "partidas" pero no en la de "presentacion"; este es el valor que se obtiene del inputbox con la variable b. Ninguna de las instrucciones que he probado hasta ahora, para que tome sólo los datos del mes seleccionado con la variable ha funcionado.
Al cambiar el código a : SCar = DSum("nz([cargos])", "partidas", "cuenta='" & Me.Cuenta & "' and Mes = & b &"), recibo este mensaje de error:
Tampoco he logrado que la variable C, dimensionada como string y valuada C="Bal"&b al abrir la forma "presentacion", se aplique para abrir la forma "Bal(valor de b)", ejemplo Bal11.
Te hago un resumen de este caso:
1.- Necesito que en la tabla "presentacion", que contiene los números de cuenta, se carguen correctamente en cada cuenta, los importes totales del campo "cargos", que estan en la tabla partidas, sólo para el mes que escogí en el inputbox, con la variable b.
2.- También necesito que la tabla "presentacion", una vez que contenga los datos completos, se copie a la tabla "Bal(valor de la variable b)". Ejemplo "Bal10".
De nuevo te agradezco tu valiosa ayuda. Saludos
Mil gracias por tu paciencia, espero haber aclarado tus dudas.
En la expresión que te da error es porque faltan comillas, una delante de
" & b & "
y la otra que falta es la de cierre del criterio. Es decir, sería como te lo puse
...and mes=" & b & "")
De todas formas, si quieres, repito, si quieres, mándame una copia de tu base, con datos inventados, y sobre ella hablamos. Mi correo es [email protected]
Si lo haces, en el asunto del mensaje pon tu nombre Manuel Lemus, ya que si no sé quien me escribe ni los abro.
Buenas tardes Julián.
Te agradezco mucho tu valiosa ayuda! hasta ahora, gracias a tus instrucciones, he logrado crear 12 tablas que contienen cada una la actividad y saldos del mes. Intento ahora consolidar en una sola tabla la actividad de cada uno de los doce meses.
Para ello, añadí en la nueva tabla el campo numérico "Mes" a los otros campos, y puse en el botón de comando la instrucción Mes = " & b & ". La Sub (quitando los otros comandos) queda así:
Private Sub CmbCalc_Click()
Dim i As Byte, b As Byte, Bal As String
b = InputBox("Que Mes desea?", "Ponga el mes que desea")
DoCmd.GoToRecord , , acFirst
For i = 1 To Me.Recordset.RecordCount
Mes = " & b & "
DoCmd.GoToRecord , , acNext
Next
El caso es que no actualiza el campo "Mes" de la tabla. Que cambios me indicas que haga?
De nuevo te agradezco tu valiosa ayuda. Saludos
Perdón Julián. Ya encontré la causa del error. no había puesto el campo "mes" en el formulario.
Sigo muy agradecido por tu valiosa ayuda. Saludos
Me alegro que te funciones, pero tienes que permitirme una consideración. Como la base te dure, por ejemplo, 3 años, tendrías 36 tablas. Es mucho más sencillo tener una sola tabla, lo que diferencia a un registro de un mes de otro registro de otro mes es precisamente el mes y el año.
Por ejemplo, supongamos que tienes una sola tabla Movimientos, con FechaMov, Cuenta, Entrada, Salida y Saldo. Vamos a suponer que quieres ver los movimientos de una cuenta un mes determinado. En cualquier lugar, por ejemplo, un formulario, podrías poner
me.recordsource="select * from Movimientos where cuenta='" & me.cuenta & "' and month([fechamov])= [Escriba un mes] and year([fechamov])=[Escriba un año]"
Así, cuando fueras a ejecutar la instrucción te pediría que escribieras un mes, luego un año, y sólo te mostraría los registros correspondientes, sin necesidad de 12 tablas.
¡Gracias! Es una muy buena idea; como te expliqué antes, apenas inicio mis prácticas con Access y mis diseños iniciales usan muchas tablas, las cuales consolido después en una sola. Ahora estoy usando una base de datos por año y creo que me ayudaría mucho tener una sola base para varios años. lo haré conforme avance en mis conocimientos de Access y con tu valiosa ayuda. Saludos.
- Compartir respuesta