Ahorrar espacio en Base de datos
Necesito ayuda con el fin de ahorrar recursos en la base de datos Access.
Tengo una como unos cincuenta informes diferentes y doce o quince formularios en
los que tengo una serie de información que se repite una y otra vez como por
ejemplo el logotipo de la empresa, el nombre, dirección, teléfono y esta serie de cosas que identifican mi empresa, que creo que las podría tener en una tabla que podría llamar "Configuración" y que todos los informes o formularios se abastecieran de esta información y si la cambiase, se cambiase automáticamente en todos sitios sin tener que ir uno a uno modificando los datos. Esto supongo que se pueda hacer con código, pero no tengo ni idea de hacerlo ni dónde ponerlo.
Te agradecería mucho si me orientases de como hacerlo, si es que se puede.
1 Respuesta
Sí, se puede hacer.
Yo normalmente hago una tabla que llamo Parámetros a la que le pongo dos campos: NombreParametro (cadena 50, clave primaria) y Valor (cadena 50).
En esa tabla voy anotando los parámetros que voy usando y con eso tiro bastante bien.
La pega es que para usarlo hay que hacerlo por código. No es difícil, podemos verlo paso a paso.
Vayamos por pasos. Empecemos por crear la tabla e ir rellenando con los parámetros que te interesan. Una vez lo tengas dímelo y seguimos.
En cuanto a las imágenes, algo similar. Empieza por lo de la tabla y veremos el resto después.
Gracias por contestar, pero no se si estamos hablando de lo mismo, hasta ahora no te he entendido demasiado.
Tengo una tabla en la que tengo los siguientes campos; Nombre, dirección, población, teléfono, mail y logotipo.
Lo que quiero es que estos datos los utilicen los diferentes informes que tengo. Por ejemplo en todos los informes tengo un encabezado de pagina donde pongo el logotipo y el nombre de mi empresa o en el informe de factura tengo todos los datos. También tengo en algún formulario el nombre y el logotipo (por tener una interfaz atractiva).
Perdona mi torpeza, de access soy usuario medio pero código ni idea.
Esa tabla nos puede valer.
Perdoname tú a mí, igual voy demasiado deprisa.
La diferencia es que si tienes una tabla con esos campos vas a usar un registro, porque siempre vas a poner el mismo logotipo, nombre de empresa, dirección, población, teléfono y mail. Lo que yo te sugería es tener una tabla en la que puedas ir poniendo más parámetros. Me explico. Supón que quieres poner también, en un futuro, la página web, el numero de fax, el nombre de usuario de skype, el apartado de correos, tu cuenta de twitter...
Tal como lo tienes vas a tener que crear más campos para rellenar un solo registro.
Para lo propuesto es indiferente, creas más parámetros y listo.
Te pongo un ejemplo (El ; separa campos de una tabla de Parametros):
Parámetro;Valor
Nombre;Mi empresa
Dirección; Calle del pino, 25
Población;Cactus pueblo
Teléfono;555342312
Mail;[email protected]
Logotipo;c:\mis documentos\mi aplicación\mis imágenes\logotipo.jpg
Y así sucesivamente
La ventaja de este sistema radica en que después hay que crear una función que recupere el nombre de cualquier parámetro. Te aseguro que es la función que más se usa en un programa.
Básicamente es una función a la que le pasas un nombre de parámetro, por ejemplo Nombre y responde Mi empresa, o le pasas Dirección y responde Calle del pino, 25. Siempre es la misma función.
Para lo que también vale la función y la tabla es para otros parámetros que no sean esos. Por ejemplo, puedes guardar un valor por defecto que sea el número de copias de facturas a imprimir. Como valor del parámetro pones 2, por ejemplo, y el programa leerá cada vez que tenga que imprimir una factura cuantas copias tiene que hacer y las hará. No necesitas crearte un campo en la tabla que tienes.
A medida que vayas necesitando valores como esto, puedes ir añadiéndolos. Además, siempre puedes usar la función desde dentro del informe, como un campo calculado.
¿Cómo lo ves?
El código te lo proporciono yo, por eso no te preocupes.
Sinceramente, me has dejado con la boca abierta.
Me parece genial, el único problema es que no sabría por donde empezar.
Eliminar mi tabla es lo primero y crear una nueva con dos campos, como me decías al principio, NombreParametro y Valor, ¿cadena 50 es el tamaño del campo de texto?.
Empieza por crear la tabla. Yo normalmente la llamo Parámetros (sin acento, lo pone el corrector ortográfico).
Dos campos: NombreParametro, de cadena de 50, y Valor, antes lo he puesto mal, de cadena de 255 que es el máximo permitido.
Para la mayor parte de los valores valdría con 50 caracteres, pero vale la pena ponerlo de 255 por si acaso.
Después ya haremos que tenga un aspecto muy bueno, cuando hagamos el formulario de opciones.
Verás cuando te explique lo de las imágenes, eso es más divertido todavía.
Ok
Entiendo que has puesto algunos parámetros ya para ir rellenando registros.
Te paso la función que recupera los parámetros. No la tengo a mano, te la paso de memoria. Igual hay algún fallo. Después de pasártela voy a tener que apagar el ordenador, tengo una cena de trabajo y no puedo ver nada más hasta mañana.
Crea un módulo. Llamalo como quieras. Yo lo llamo utilidades, pero a tu criterio.
En el módulo pondrá:
Option Compare Database
Añade justo después:
Public function GetParam(Nombre as string) as string
dim salida as string, sqlConsulta as string, registro as recordset
sqlconsulta = "SELECT Valor FROM Parámetros WHERE NombreParametro = '" & Nombre & "'"
set registro = currentdb.openrecordset(sqlconsulta)
salida = registro.fields(0)
registro.close
getparam=salida
end function
Esta es la función que te decía. Si haces Control+G verás una consola de comandos en la parte inferior de la pantalla.
Escribe Print GetParam("NombreEmpresa") y pulsa enter
Si hay un registro en la tabla de Parámetros en el que en el campo NombreParametro sea NombreEmpresa y en Valor sea Mi Empresa, debería aparecer Mi Empresa.
Lo dicho, prueba a ver que tal. Verás que puedes preguntarle por cualquier cosa.
Si funciona, puedes ir informe por informe y cambiar la etiqueta donde pone el nombre de la empresa por un cuadro de texto en el que de normal pone Independiente.
En el cuadro de texto Pones:
=GetParam("NombreEmpresa")
Al imprimir el informe debería aparecer el nombre.
Hazme un favor, si no te importa: te doy mi correo [email protected]
Mándame un mail, que puedo leerlo en la cena y por lo menos sabré si va bien o no.
Yo haría dos cosas, aunque sospecho que una ya la hiciste ayer, pero te lo cuento igual.
1. Uno o varios cuadro de diálogo que te permita gestionar los valores de las opciones
2. Modificar los informes y/o los formularios para que la imagen no sea una imagen sino un vínculo. Antes de hacerlo anota lo que ocupa tu base de datos en disco, lo cambias y mira el espacio que ahorras.
Para el 1:
Crea un formulario, lo configuras para que no aparezca ni el indicador de registro, ni los bordes extensibles, ni indicador de registro, ni de búsqueda, ni barras de desplazamiento.
Si tienes muchos parámetros es útil poner un control con pestañas, así puedes separar por conceptos (datos de mi empresa, datos de facturación, ...)
En cada pestaña sitúa tantos campos como opciones quieras poner, campos de texto independientes, y sin estar ligado a datos de ninguna tabla.
Para el 2:
Espera a acabar el 1
Cuando lo tengas hecho seguimos
Ya he creado el formulario en vista formulario continuo y con origen de datos en la tabla Parámetros. No se si es así como decías.
No es eso, no pasa nada.
La idea es que el formulario NO tenga ninguna vinculación a datos.
Te pongo un ejemplo.
Crea un campo de texto independiente, en el que vayas a poner el nombre de la empresa, y le llamas txtNombreEmpresa, otro que sea la dirección y le llamas txtDireccion
Marcando el formulario, abres la hoja de propiedades y buscas la pestaña eventos. En esa pestaña busca el evento Al Abrir, selecciona Procedimiento de evento y haces clic en el botón ...
Entrarás en VB y tendrás algo así como:
Sub Form_Open()
End Sub
Entre esas dos líneas tecleas:
me.txtNombreEmpresa = GetParam("NombreEmpresa")
me.txtDireccion = GetParam("Dirección")
Es decir, recapitulando. El form no tiene vinculación a datos, y obtiene esa vinculación cuando se abre, porque cada campo de texto se rellena con el valor de un parámetro concreto de la tabla de parámetros.
Pruébalo y me cuentas. Acuérdate de quitar la vinculación a datos, no puede haber ningún registro activo.
Funciona perfectamente, el único problema que le veo es para modificar estos datos, tengo que hacerlo desde la tabla, porque desde el formulario no puedo hacerlo.
Se supone que ya tienes un formulario para entrar los albaranes y que este lo tienes para traspasar los albaranes a líneas de factura.
Si no te parece bien, hacemos un paso atrás y buscamos otra solución. No quiero imponer a nadie mi forma de programar.
- Compartir respuesta