Discussion:
Restringir valores en combos i cuadros de listas según sea el usuario de la aplicación
(demasiado antiguo para responder)
Toni
2014-01-15 08:30:40 UTC
Permalink
Buenas de nuevo.

Esta vez deseo crear un sistema de usuarios para poder gestionar la visualización de formularios, y también valores en combos y en cuadros de lista que estan en diferentes formularios. Mi idea es que esos formularios sean de uso compartido, però la información que devuelvan los combos y las listas esten restringidas por alguna variable.

Algo así como:

SELECT ... FROM ... WHERE User = idUser;

El caso es a este 'idUser' no se como darle valor.
Debe ser una variable que no cambie durante toda la sesión en Accés, y debe poder usarse en diferentes formularios e informes.

He probado a declararla como variable global, pero entonces no se como utilizarla en los combos, listas...

Gracias
Toni
José Mª Fueyo
2014-01-15 09:44:19 UTC
Permalink
Hola
Puedes configurar la sentencia SQL en la propiedad RowSource en el evento "Al cargar" del formulario.
Por ejemplo, crea un formulario en la base de datos Northwind, crea un combo de dos columnas, la primera oculta. Llama al combo "cbxFiltrado".
En el evento "al cargar" del formulario, pega éste código

<pego>
Dim sSQL As String
sSQL = "SELECT Clientes.IdCliente, Clientes.NombreCompañía FROM Clientes WHERE Clientes.IdCliente LIKE 'A*' ORDER BY [NombreCompañía];"
Me.cbxFiltrado.RowSource = sSQL
</pego>

Esto hará que se carguen los clientes cuyo IdCliente empiece por "A".

Espero te sirva.

Salu2
--
José Mª Fueyo
[MS MVP Access]
Toni
2014-01-16 08:33:15 UTC
Permalink
Gracias, Jose Mª, esto ya funciona.

El siguiente reto és:

Mi idea es dar un valor a este iUser en cada terminal, de manera que, al entrar en la aplicación, no haga falta preguntar usuario ni pasword, y que directamente se abra la aplicación, cargando automaticamente el valor de iUser mediante programación.

Ahora mismo lo he solucionado dándole valor a iUser en el evento 'Al cargar' del formulario principal, definido desde "Opciones de Acces, Base de datos actual, Mostrar Formulario", pero me parece una manera un poco burda.

¿Hay, desde VBA, alguna manera que permita leer código en cuanto se ejecute la aplicación, donde se puedan definir todas las variables, y antes de abrir el formulario principal?

Gracias de nuevo
Post by José Mª Fueyo
Hola
Puedes configurar la sentencia SQL en la propiedad RowSource en el evento "Al cargar" del formulario.
Por ejemplo, crea un formulario en la base de datos Northwind, crea un combo de dos columnas, la primera oculta. Llama al combo "cbxFiltrado".
En el evento "al cargar" del formulario, pega éste código
<pego>
Dim sSQL As String
sSQL = "SELECT Clientes.IdCliente, Clientes.NombreCompañía FROM Clientes WHERE Clientes.IdCliente LIKE 'A*' ORDER BY [NombreCompañía];"
Me.cbxFiltrado.RowSource = sSQL
</pego>
Esto hará que se carguen los clientes cuyo IdCliente empiece por "A".
Espero te sirva.
Salu2
--
José Mª Fueyo
[MS MVP Access]
José Mª Fueyo
2014-01-16 13:19:55 UTC
Permalink
Hola
Con Environ("USERNAME") puedes recuperar el nombre del usuario que ha hecho loggin en la máquina.

Salu2
--
José Mª Fueyo
[MS MVP Access]
Toni
2014-01-17 10:26:11 UTC
Permalink
Jose Mª, gracias de antemano!

Esto ya lo tengo solucionado... a lo mejor no me he explicado bien.

Tengo varias variables globales que deben devolver un valor en el momento mismo que se inicia la aplicación.

Como te comentaba, ahora las tengo definidas en el formulario que se abre automaticamente al inico de la aplicación, en el método 'Open'.

No se si este es el lugar donde se acostumbran a situar este tipo de variables, o hay algun tipo de mòdulo de inicio donde definirlas y darles valor.

no se si me explico...

Gracias
Post by José Mª Fueyo
Hola
Con Environ("USERNAME") puedes recuperar el nombre del usuario que ha hecho loggin en la máquina.
Salu2
--
José Mª Fueyo
[MS MVP Access]
Toni
2014-01-17 10:29:32 UTC
Permalink
Jose Mª

Gracias de antemano... esto lo tengo solucionado.

Tengo varias variables globales que deben ser cargadas al inicio de la aplicación. Una de ellas es la que comentaba anteriormente, pero hay más.

Ahora mismo las tengo colocadas en el formulario que se abre automaticamente al cargar la aplicacion, en el método 'Al cargar'. Alli las declaro y les doy valor.

No se si esta es la manera correcta de hacerlo, o existe algun tipo de módulo donde se declaren estas variables 'de inicio'.

No se si me he explicado.

Gracias
Post by José Mª Fueyo
Hola
Con Environ("USERNAME") puedes recuperar el nombre del usuario que ha hecho loggin en la máquina.
Salu2
--
José Mª Fueyo
[MS MVP Access]
José Mª Fueyo
2014-01-17 11:48:26 UTC
Permalink
Una pregunta. Esas variables, ¿tienen valor constante? por qué entonces quizás podrías declararlas en un módulo como constantes públicas.

Salu2
--
José Mª Fueyo
[MS MVP Access]
Toni
2014-01-17 12:49:06 UTC
Permalink
Esa es la idea, sí. Son variables que contienen nombres de personas, de departamentos, de cargos... si alguna vez canvian esos nombres, tan solo modificando unas líneas de código se actualizarian todos los formularios, còdigos, informes...
Post by José Mª Fueyo
Una pregunta. Esas variables, ¿tienen valor constante? por qué entonces quizás podrías declararlas en un módulo como constantes públicas.
Salu2
--
José Mª Fueyo
[MS MVP Access]
Toni
2014-01-22 10:55:07 UTC
Permalink
Jose Mª,

El tema de la declaración de las variables públicas ya me funciona, pero, aunque sólo sea por curiosidad...

¿Es correcto declarar estar variables en el evento 'Al Cargar' del formulario de inicio? Me huele que se puede hacer de una manera más límpia... a lo mejor insertando el código en algún modulo que se carge automaticamente?

Gracias de antemano
Toni
Post by Toni
Esa es la idea, sí. Son variables que contienen nombres de personas, de departamentos, de cargos... si alguna vez canvian esos nombres, tan solo modificando unas líneas de código se actualizarian todos los formularios, còdigos, informes...
Post by José Mª Fueyo
Una pregunta. Esas variables, ¿tienen valor constante? por qué entonces quizás podrías declararlas en un módulo como constantes públicas.
Salu2
--
José Mª Fueyo
[MS MVP Access]
José Mª Fueyo
2014-01-22 11:07:31 UTC
Permalink
Hola
Sí van a ser valores fijos, que no varían sea cual sea el inicio de sesión, lo suyo sería declararlos como constantes en lugar de como variables.
Sí van a ser variables, lo más limpio seguramente es construirte un módulo de clase con sus correspondientes propiedades y métodos, y crear una instancia pública en ese formulario de inicio. Con una clase puedes tener total control de que se hace y como.

Salu2
--
José Mª Fueyo
[MS MVP Access]

Loading...