Duda Microsoft Access, obtener valores de distintas tablas y sumarlos

Tema en 'Informática - Tecnología' iniciado por McClane, 5 Ene 2024.

  1. McClane

    McClane Moderador Informática Moderador Miembro del Club

    Registrado:
    20 Jul 2006
    Mensajes:
    43.549
    Me Gusta:
    22.980
    Ubicación:
    Getafe Madrid
    Modelo:
    2 E30, 1 E39
    Hola foreros!! Llevo tres semanas haciendo una pequeña base de datos en Access que es una chorrada :LOL: pero que es en estos pequeños proyectos donde realmente empiezas a aprender, no en cursos. biggrin Llegados a este punto, tengo la base de datos casi terminada, pero me falta un pequeño detalle: sumar unos números, y no doy con ello. He invertido más tiempo buscando en web que haciéndolo. :muro:

    Tengo un formulario donde hay tres desplegables donde elijo un valor. El primer desplegable toma los datos de una tabla, llamémosla, Tabla1, y el valor tomado es "Base":

    CODE, HTML o PHP Insertado:
    Tabla1:
    ID, Base, Precio
    El siguiente desplegable toma datos de una Tabla2, concretamente, "Extra":

    CODE, HTML o PHP Insertado:
    Tabla2:
    ID, Extra, Precio
    El tercer desplegable hace EXACTAMENTE lo mismo que el 2, por lo que el origen de los datos es idéntico. Esto está bien. :)

    Existe una tercera tabla que, mediante macro, es utilizada para escribir la combinación de los tres desplegables con una serie de datos adicionales. Todo esto funciona bien:

    CODE, HTML o PHP Insertado:
    Ejemplo:
    Desplegable1= Un valor de base
    Desplegable2= Un valor extra
    Desplegable3=
    
    (No es obligatorio que haya datos, solo el primer desplegable debe contener datos, ya hay código VBA que impide que se cree un registro vacío)
    
    Tabla3: Un valor de base; Un valor extra; (Vacío);(otros datos)
    Posteriormente genero un informe con todos los registros y todo esto funciona perfecto. :joyful:

    El problema viene con el precio. No soy capaz de obtenerlo. :muro: Necesitaría que, cuando se seleccione la primera base, en un campo de texto a su lado, aparezca el valor. Llego a que me muestre el mismo valor, pero con expresiones, DLOOKUP y demás, no consigo que busque en la columna de al lado.

    CODE, HTML o PHP Insertado:
    Ejemplo:
    
    Desplegable   Cuadro de texto   Origen necesario
    Valor base    Valor precio    (Tabla1, Precio)
    Valor extra   Valor precio    (Tabla2, Precio)
    Valor extra   Valor precio    (Tabla2, Precio)
    Valor precio debe ser autoseleccionado. Si en valor base se elige cualquier opción, en valor precio debe aparecer el dato de la siguiente columna de la misma tabla. Es aquí donde estoy atascado. Me gustaría hacerlo con expresiones sin recurrir a VBA y SQL, pero si es necesario, tiro de macro "al actualizar" y listo.

    Posteriormente me faltaría sumar los tres campos, pero eso creo que no es problema, ya que se hace dentro del formulario y por SQL creo que puedo escribirlo en la Tabla3, que es donde se vuelcan los resultados.

    Voy a seguir rompiéndome la cabeza, más de lo rota que la tengo ya. :descojon:

    @SP_Kenny


    Saludos!!
     
    A SP_Kenny le gusta esto.
  2. SP_Kenny

    SP_Kenny Forista Legendario Miembro del Club

    Registrado:
    8 Ago 2007
    Mensajes:
    11.994
    Me Gusta:
    16.611
    Ubicación:
    Madrid y Gijón.
    Modelo:
    Leon ST FR 1.8
    Unete a BMW FAQ Club Unete a BMW FAQ Club Unete a BMW FAQ Club
    De poca ayuda te voy a servir... en SQL lo que quieras pero access hace 12 años que no uso y poco formulario toqué en su día. Lo que si hice fue migrar los access 97 que manejabamos a aplicaciones de escritorio (vs c#) y la bbdd en sql server.

    De todas maneras, cualquier campo que quieras mostrar de manera dinámica tendría que consultarse primero para actualizarlo en la vista del formulario.
    Creo que era algo parecido a vs dónde tendrías el evento selection change del combobox, en el que tendrías que buscar la info y actualizar textboxs, labels y demás...

    Me vas a hacer sacar el portátil y montar una access para refrescar memoria..., ya me has picao... :descojon:
     
  3. dm78

    dm78 Forista

    Registrado:
    13 Oct 2012
    Mensajes:
    1.330
    Me Gusta:
    867
    Ubicación:
    Murcia
    Modelo:
    f36 430d '15
    Hola, lo consigues así: creas un campo de texto junto al cuadro combinado, tal y como dices, y le referencias el valor: =[Cuadro combinadoX].Column(Y). En propiedades, pestaña datos, origen de control. Siendo "Cuadro combinadoX" el nombre del cuadro combinado e "Y" el número de la columna en el cuadro combinado, de la que quieres disponer del dato. Contando como 0 la primera columna, 1 la segunda, 2 la tercera, etc.
    El valor del campo no es editable al corresponderse con una expresión.
     
    A SP_Kenny le gusta esto.
  4. ElGarufo

    ElGarufo Forista

    Registrado:
    13 Jul 2011
    Mensajes:
    1.713
    Me Gusta:
    2.112
    Ubicación:
    Salmantino por levante
    Modelo:
    Z3 2.2
    Has probado a ver si con la magia de chatgpt te desatasca ??
     
  5. McClane

    McClane Moderador Informática Moderador Miembro del Club

    Registrado:
    20 Jul 2006
    Mensajes:
    43.549
    Me Gusta:
    22.980
    Ubicación:
    Getafe Madrid
    Modelo:
    2 E30, 1 E39
    Yo empecé con Access 97 a hacerme bases de datos, pero como no tenía ni idea de programar, eran bases de datos manuales :LOL: y el único comando que logré aprender fue el MSGBOX. Solo hacía código con MSGBOX. Mensaje aquí, mensaje allá. Pero con una sola opción. biggrinbiggrinbiggrin

    Ahora me he hecho un curso largo de Excel y otro básico de Access, aprovechando que todo Office usa VBA, y es ahora, que tengo unos mínimos conocimientos de VBA, cuando puedo hacer cosillas. También he hecho un curso largo de Python y tiempo atrás hacía cosas en Arduino en C (mi proyecto más largo fue de más de MIL líneas o_O), por lo que la lógica de la programación la tengo presente. Un IF, FOR, WHILE MATCH-CASE, GOTO... Todo eso, y el orden de ejecución lo llevo bien. El problema es plasmarlo en el programa y que haga lo que yo quiero. :descojon:

    Lo que tengo claro es que el cuadro de texto debe tener un origen, y así se lo plasmo con un =[CuadroCominadoELQUESEA] pero buscando en Microsoft Learn no encuentro un desglose profundo de expresiones para saber cómo debo ponerlo. :muro:
     
    A SP_Kenny le gusta esto.
  6. McClane

    McClane Moderador Informática Moderador Miembro del Club

    Registrado:
    20 Jul 2006
    Mensajes:
    43.549
    Me Gusta:
    22.980
    Ubicación:
    Getafe Madrid
    Modelo:
    2 E30, 1 E39
    ¡¡CASI lo tengo!! :rage:

    Si pongo =[Cuadro combinadoX].[Column](0) aparece el valor correspondiente de la columna ID. Si pongo =[Cuadro combinadoX].[Column](1) aparece el mismo valor que en el cuadro combinado. Si pongo =[Cuadro combinadoX].[Column](2), que es donde está el precio... NO APARECE NADA, sale totalmente en blanco sin valor alguno. :rage:

    He estado mirando los tipos de datos y los tengo configurados como "Moneda" y aparece el símbolo del euro en las tablas pero no en el cuadro de texto. He estado poniéndolo como número decimal, con dos decimales y me los trunca al entero más cercano. Aunque en la tabla escriba "15,7" me escribe un "16", y si pongo "13,20" me escribe un "13". Por lo que he vuelto a ponerlo como moneda pero no soluciona nada. Tenía la victoria rozándola con los dedos... :muro::muro::muro:
     
    Última edición: 6 Ene 2024
  7. McClane

    McClane Moderador Informática Moderador Miembro del Club

    Registrado:
    20 Jul 2006
    Mensajes:
    43.549
    Me Gusta:
    22.980
    Ubicación:
    Getafe Madrid
    Modelo:
    2 E30, 1 E39
    No sé ni cómo se accede a ChatGPT, ni cómo se consuslta ni nada, no me ha dado por usarlo. :LOL:
     
  8. SP_Kenny

    SP_Kenny Forista Legendario Miembro del Club

    Registrado:
    8 Ago 2007
    Mensajes:
    11.994
    Me Gusta:
    16.611
    Ubicación:
    Madrid y Gijón.
    Modelo:
    Leon ST FR 1.8
    Unete a BMW FAQ Club Unete a BMW FAQ Club Unete a BMW FAQ Club
    c**o, es verdad, es vba lo que tiene por detrás!

    Llevo dandole vueltas desde ayer y no soy a recordar como se hacían los formularios... Hoy lo voy a mirar fijo.
     
  9. McClane

    McClane Moderador Informática Moderador Miembro del Club

    Registrado:
    20 Jul 2006
    Mensajes:
    43.549
    Me Gusta:
    22.980
    Ubicación:
    Getafe Madrid
    Modelo:
    2 E30, 1 E39
    ¡¡¡¡SIIIIIIIIIII!!!! Por fin, ya funciona!! :descojon: pero no está exento de nuevos problemas. :rage:

    Desplegable1, desplegable2 y desplegable3 ahora tienen asociados, a cada uno de ellos, un cuadro de texto con origen calculado. Llamémosles Precio1, Precio2 y Precio3 para hacerlo sencillo (aquí los llamo de otra manera).

    Ya sale el precio según seleccione lo que quiera. ¿Por qué antes solo salía el ID y el "base" (solo columnas 0 y 1)? En propiedades - origen de control, los desplegables los tengo vacíos. Los datos se toman de "origen de la fila". Aquí tenía una línea de SQL:

    CODE, HTML o PHP Insertado:
    SELECT [Tabla1].[ID], [Tabla1].[Base] FROM [Tabla1] ORDER BY [Base]
    Había probado a mover las columnas de orden, crear otras nuevas, meter otros datos y nada funcionaba, hasta que lo he cambiado por:

    CODE, HTML o PHP Insertado:
    SELECT * FROM [Tabla1] ORDER BY [Base]
    Ahora ya salen los precios!! :LOL: Pero tengo un pequeño problema. Aunque en la tabla vengan los valores formateados como euros y dos decimales, en el cuadro de texto me sale un número con un solo decimal. He cambiado veinte cosas en el formato del cuadro de texto y siempre me ignora. :LOL:

    Además de esto, se me suma un pequeño problema: si no se seleccionan los tres desplegables no hace la suma, y esto no debe funcionar así. Debe funcionar con solo el primer desplegable. Los otros dos, son opcionales. :mad:

    Seleccionando los tres desplegables, para hacer la suma, uso la siguiente expresión:

    CODE, HTML o PHP Insertado:
    [Precio1]+[Precio2]+[Precio3]
    Pero esta expresión no funciona. Como digo, deben estar seleccionados todos los valores y esto no es obligatorio, así que he encontrado la siguiente solución:

    CODE, HTML o PHP Insertado:
    =NZ([Precio1])+NZ([Precio2])+NZ([Precio3])
    En este caso, ya me muestra, de forma predeterminada, un "0,00€", no como los otros campos. Pero ahora viene el problema que no alcanzo a comprender. (n)

    Access me dice que 2+2+2= 222. :muro: He revisado la sintaxis, no vaya a ser que esté concatenando, pero no, el concatenado sería [Precio1]&[Precio2], y hay un + entre medias. :rage: Estoy convencido de que, de alguna forma, está interpretando los precios como texto, pero en todos los sitios está formateado como euros. Algún sitio hay por ahí que, seguro, me lo está convirtiendo como texto. :rage:

    Como era de esperar, el nuevo campo de "Total" es perfectamente seleccionable en SQL para plasmar el precio en la Tabla3 y así aparece si selecciono solo un desplegable. Si selecciono dos, no guarda el precio porque, claro, hay dos comas... :rage:

    Va bien la cosa pero Access me pone zapatillas de Velcro cuando camino por una alfombra. biggrinbiggrinbiggrin
     
    Última edición: 6 Ene 2024
  10. dm78

    dm78 Forista

    Registrado:
    13 Oct 2012
    Mensajes:
    1.330
    Me Gusta:
    867
    Ubicación:
    Murcia
    Modelo:
    f36 430d '15
    Asegúrate que en las propiedades del cuadro combinado, el número de columnas declaradas sean al menos las mismas que están contenidas. Si no, te fallará la referencia. Es decir, si tu cuadro combinado tiene tres columnas, el número que debe aparecer en la hoja de propiedades, número de columnas, sea al menos 3.
     
  11. dm78

    dm78 Forista

    Registrado:
    13 Oct 2012
    Mensajes:
    1.330
    Me Gusta:
    867
    Ubicación:
    Murcia
    Modelo:
    f36 430d '15
    Poco a poco! Vas por buen camino compi jajaja

    Te aconsejo que vayas a la tabla que contiene los datos de origen, y en propiedades del campo precio, cambies de tipo de datos euros a numérico, y tamaño del campo "doble". Con esto te aseguras que Access trate el valor como un número.

    Luego, en las propiedades del cuadro de texto del formulario, en formato, también te aconsejo que cambies a formato número estandar, lugares decimales: 2

    Efectivamente la función NZ te resuelve el asunto de los valores nulos.

    La expresión final que has puesto debe funcionar. Si no, prueba a referenciar de esta manera: =Nz([Texto10])+Nz([Texto12])+Nz([Texto14])
     
    A SP_Kenny le gusta esto.
  12. McClane

    McClane Moderador Informática Moderador Miembro del Club

    Registrado:
    20 Jul 2006
    Mensajes:
    43.549
    Me Gusta:
    22.980
    Ubicación:
    Getafe Madrid
    Modelo:
    2 E30, 1 E39
    Ahora mismo estoy fuera de casa, pero justo antes de salir lo he solucionado. biggrin En cuanto llegue lo explico, pero he tenido que forzar un número como número. o_O
     
    A SP_Kenny le gusta esto.
  13. McClane

    McClane Moderador Informática Moderador Miembro del Club

    Registrado:
    20 Jul 2006
    Mensajes:
    43.549
    Me Gusta:
    22.980
    Ubicación:
    Getafe Madrid
    Modelo:
    2 E30, 1 E39
    Así lo he hecho, con número largo, porque trato decimales, número estándar en la tabla y lo mismo en el cuadro de texto. Nada, no hay manera. 2+2+2=222. :rage:

    La solución que he encontrado es una expresión en cada uno de los cuadros de texto, y consiste en forzarle un tipo. Escribiendo lo siguiente se soluciona y ya funciona perfecto todo el tema de precios!! :joyful:

    CODE, HTML o PHP Insertado:
    =CMONEDA([CuadroCombinado1].[Column](2))
    Con CMONEDA le fuerzas a que tome ese formato. En cuanto se lo he puesto, en vacío, ya me sale un "#ERROR" que desaparece en cuanto seleccionas algo del cuadro combinado. Y lo quito, en la expresión, metiéndole un NZ de manual. biggrin

    La base de datos ya está operativa. :neng: Aunque es muy escueta con muy poco código, creo que va a funcionar. El siguiente paso es hacer que sea accesible para más de una persona simultáneamente y también tengo el objetivo de que la base de datos esté permanentemente cerrada (si la abres, que te salga un aviso de que está cerrada y ya) pero que se pueda abrir manualmente y que se cierre a una determinada hora. La idea es que, si la abro yo, tener un menú de administración y si la abre otra persona le sale un menú de usuario. Este código ya está funcionando, así que solo me queda implementar este botón de "abrir y cerrar base de datos".

    Ale, ya tengo curro. biggrinbiggrinbiggrin
     
    A SP_Kenny le gusta esto.
  14. McClane

    McClane Moderador Informática Moderador Miembro del Club

    Registrado:
    20 Jul 2006
    Mensajes:
    43.549
    Me Gusta:
    22.980
    Ubicación:
    Getafe Madrid
    Modelo:
    2 E30, 1 E39
    Nuevos horizontes, nuevos problemas. biggrin

    Uno de los requisitos es que la base de datos se pueda abrir y cerrar manualmente y de forma automática. El cierre automático debería ser a las 0815 de la mañana de todos los días. Ya he hecho el código para esto y funciona a la primera. Así que iré a comprar un décimo de lotería. :LOL:

    Básicamente es un IF con varias sentencias:

    CODE, HTML o PHP Insertado:
    IF usuario = yo THEN
    DOCMD.OpenForm ("Administrador")
    ELSEIF TIME <= "08:15:00" THEN
    DOCMD.OpenForm ("Usuario")
    ELSE
    DOCMD.OpenForm ("Base de datos cerrada")
    END IF
    Me surge un pequeño problema. Necesito una variable que determine cuándo está abierta la base de datos y cuándo no, y debe ser NO volátil. Para eso, he pensado en poner un control sí/no en un formulario pero he visto que tiene una desventaja, y es que es necesario que esté abierto para tratar con él. Además, sin ningún origen de datos, no guarda el estado de ninguna manera. Así que se me ha ocurrido guardar este dato en una tabla nueva, con una única celda, A1 o 1,1 y ahí guardar un valor sí/no para que, al inicio de la base de datos, compare. Sin embargo, acceder a ese única celda está siendo un dolor de culo. :mad:

    En Microsoft Learn hay un montón de ejemplos, pero como siempre, ninguno me resuelve la duda, y si copio y pego, me tira diversos fallos. :rage:

    CODE, HTML o PHP Insertado:
    Sub InsertTextInCell()
     If ActiveDocument.Tables.Count >= 1 Then
      With ActiveDocument.Tables(1).Cell(Row:=1, Column:=1).Range
       .Delete
       .InsertAfter Text:="Cell 1,1"
      End With
     End If
    End Sub
    He intentado modificar el código para que sea algo parecido a "ActiveDocument.Tables(Tabla1).Cell(Row:=1, Column:=1).Value" pero siempre me dice que falta un objeto. Se me hace preocupantemente extraño que no se pueda leer ni escribir una única celda de una tabla sin tener que recurrir a SQL y varias variables, y esto solo para arrancar la base de datos. o_O
     
  15. SP_Kenny

    SP_Kenny Forista Legendario Miembro del Club

    Registrado:
    8 Ago 2007
    Mensajes:
    11.994
    Me Gusta:
    16.611
    Ubicación:
    Madrid y Gijón.
    Modelo:
    Leon ST FR 1.8
    Unete a BMW FAQ Club Unete a BMW FAQ Club Unete a BMW FAQ Club
    Lo correcto sería el control en la bbdd porque creo que las variables no son accesibles entre sesiones (multi threading).

    El cógido que has puesto se parece más al de actualizar el valor de una celda en excel, pero ni idea...
    Con lo fácil que sería hacer un select/update/insert/delete (en sql server, para una cosa así usaría un merge, pero en el prehistórico sql de access no existe) y no te va a quedar otra que hacerlo así. :descojon:

    No comprendo bien lo de tener abierta o cerrada la bbdd y me faltan conocimientos en access porque puedes tener infinidad de casuisticas que no sé si se pueden dar.
    Por ejemplo, cómo controlarás que se marca como cerrada?, porque si lo cierran a lo bruto (administrador de tareas) no pasará por la función que lo gestiona. En fin, que esta parte del analisis es la que más me gusta, junto con la de picar código y tiendo a irme por las ramas... :descojon:


    Y no te sería mejor montarte un servidor apache facilón con xamp y hacerte el back en el access (ya de paso, yo metería mysql que es gratuito, que será más potente) y el front con php que te permite practicar además html, css y javascript?
    Al final tendrás que compartir la bbdd y el uso de un navegador se hará más intuitivo a los usuarios.
    Me parecen lenguajes entretenidos con mucha más proyección y que permiten trastear mucho más (el sql en access es más complicado por lo pijotero de la sintaxis comparado con sql server/mysql/oracle).
    Antes usabamos en mi curro aplicaciones de escritorio propias, pero nos hemos pasado a webs internas para casi todo (menos el sistema de registro de tiempos de los agentes, que con el navegador es complicado detectar inactividad).

    Mi próximo objetivo es empezar con java, que pensaba estaba defenestrado y no parece ser así... Es el lenguaje que usan en la plataforma web principal de mi curro y mi jefe está empeñado en que meta la nariz allí. Como nunca digo que no a cosas nuevas, tengo ganas de ponerme a ello, pero tendría que liberarme y no hay manera...
     
    Última edición: 8 Ene 2024
  16. pUllastre

    pUllastre Clan Leader

    Registrado:
    18 Oct 2007
    Mensajes:
    20.839
    Me Gusta:
    11.504
    Ubicación:
    Barcelona
    uff qué de años sin tocar access. niputa!
     
  17. McClane

    McClane Moderador Informática Moderador Miembro del Club

    Registrado:
    20 Jul 2006
    Mensajes:
    43.549
    Me Gusta:
    22.980
    Ubicación:
    Getafe Madrid
    Modelo:
    2 E30, 1 E39
    Pues es mucho más sencillo de lo que parece. Si lo he hecho y funciona, no es tan difícil. :descojon:

    Una parte ya la tengo hecha, que es que se cierre pasada una hora concreta, en este caso, las 0815. El código es muy sencillo, y se soluciona con un simple IF:

    CODE, HTML o PHP Insertado:
    IF usuario = yo THEN
    DOCMD "Abrir formulario administrador"
    ELSEIF TIME "mayor que" "08:15:00" THEN
    DOCMD "Abrir formulario de base de datos cerrada"
    ELSE
    DOCMD "Abrir formulario de usuario normal"
    END IF
    Si abro yo la base de datos, se abre entera. Si no soy yo, compara la hora real con la hora máxima. Si son más de las 0815, abrirá un formulario que dice que está cerrada con un único botón para cerrar Access. Si no ha llegado la hora, abre el formulario del menú de usuario normal. ¿Pero cómo controlo que la gente no la deje abierta para siempre? :LOL: Cada formulario tiene una macro que, tras 60s, cierra la base de datos por completo. Se me puede ir un minuto de más, pero para lo que la quiero, es perfectamente asumible. :)

    La idea de poder abrirla y cerrarla manualmente es si, por algún motivo tengo que abrirla para alguien un momento, poder abrirla manualmente, y pensaba que acceder a la celda 1,1 de una tabla (única celda que existe :LOL:) cuyo únicos valores posibles son sí/no iba a ser más sencillo. :LOL:

    Buff, imposible montar lo que me comentas. Es para usarla en el trabajo y no para trabajar. :LOL: Tampoco es un juego, es un proyecto de práctica para la hora del desayuno. :)
     
    A SP_Kenny le gusta esto.
  18. SP_Kenny

    SP_Kenny Forista Legendario Miembro del Club

    Registrado:
    8 Ago 2007
    Mensajes:
    11.994
    Me Gusta:
    16.611
    Ubicación:
    Madrid y Gijón.
    Modelo:
    Leon ST FR 1.8
    Unete a BMW FAQ Club Unete a BMW FAQ Club Unete a BMW FAQ Club
    Lo del macro es la clave, imaginaba que se podría hacer algo así.

    ¿Por qué necesiras cerrar la bbdd?
     
  19. McClane

    McClane Moderador Informática Moderador Miembro del Club

    Registrado:
    20 Jul 2006
    Mensajes:
    43.549
    Me Gusta:
    22.980
    Ubicación:
    Getafe Madrid
    Modelo:
    2 E30, 1 E39
    Disculpad la tardanza!! He tenido un enero MUY cargadito en casa y casi no tenía tiempo ni para forear!! :dead: Y responder a este hilo no se podía hacer "en cinco minutos".

    @dm78
    @SP_Kenny
    @pUllastre

    Bueno, pues la segunda semana de enero, que fue mi primera semana de curro después de vacaciones "lancé" la base de datos en la red. Antes de lanzarla, pude probar a "externalizar" las tablas para que varios clientes usasen la base de datos al mismo tiempo. Tras una prueba en dos máquinas con mi mismo usuario, darle al botón de generar el pedido a la vez y que ambos pedidos queden registrados en la tabla me hizo bastante feliz. :LOL:

    Realmente la base de datos, aunque la use en el trabajo, no es para temas de trabajo. Es... para pedir bocadillos a un sitio de embutidos los viernes. :descojon: De ahí que sea necesario que se cierre a una hora concreta, que es cuando llamo, para que no me puedan pedir bocadillos más allá de las 0815. :LOL:

    El primer día la usé yo solo casi en un 100%. Solo un par de compañeros la usaron. El segundo día la usaron algunos más y a partir de ahí ya la usa más gente. Me dejan el pedido, saco un informe de lo que hay, llamo al sitio y se lo doy hasta ordenado. :LOL:

    Lo malo es que en la base de datos se han quedado algunas cosas que dificultan su uso ya que se hizo pensando en que no era multiusuario, pero después de solucionarlo antes de entrar en funcionamiento, ya no es necesario que los formularios se me cierren pasado un minuto. Hoy he podido empezar a arreglar algunas cosillas y lo primero que he hecho ha sido quitar esta limitación, ya que como todos podemos acceder a la vez, no nos bloqueamos el archivo. Eso sí, un formulario sí mantiene un sistema de bloqueo, que es el que se usa para generar el pedido. En vez de hacer que se cierre cada minuto, he hecho una macro con expresiones para que cada diez segundos compare la hora actual con las 0815. De esta forma, el formulario puede estar abierto sin que se cierre cada minuto. Aunque los cambios no están implementados, espero implementarlos la semana que viene!! También tengo que currarme una macro para que, si el formulario del menú se queda abierto perennemente, no se pueda entrar al pedido pasada la hora. biggrinbiggrinbiggrin

    Hay otros detalles más a corregir que he ido viendo según funcionaba y que ya los iré corrigiendo, pero solo puedo agradecer vuestra ayuda, pues ha sido muy importante y ha hecho que esto funcione. :LOL: Parece una sobrada un Access común para pedir bocadillos los viernes, pero también me ha servido como ejercicio de programación para hacer algo más grande posteriormente. :)


    Ahora tengo nuevas dudas. biggrin

    He conseguido que se guarde como ACCDE pero no funciona del modo que yo me esperaba. Busco bloquear el acceso de la barra izquierda donde aparecen los formularios, informes, tablas y demás. Lo que hago es ocultarlos, pero cualquiera, con el botón derecho, puede mostrarlos y hacer cambios. También aparecen muchos menús y opciones que me gustaría bloquear, para que se quede lo más "aplicación" posible y no una base de datos toqueteable. He estado buscando pero no encuentro la manera de hacerlo, siempre me remiten las soluciones a "botón derecho, ocultar elementos". :)
     
    A dm78 y SP_Kenny les gusta esto.
  20. pUllastre

    pUllastre Clan Leader

    Registrado:
    18 Oct 2007
    Mensajes:
    20.839
    Me Gusta:
    11.504
    Ubicación:
    Barcelona
    hostias!! me encanta! es muy frikie darse el currazo para pedir bocatas jajaja qué grande!!! :floor:

    :amo2::amo:
     
  21. SP_Kenny

    SP_Kenny Forista Legendario Miembro del Club

    Registrado:
    8 Ago 2007
    Mensajes:
    11.994
    Me Gusta:
    16.611
    Ubicación:
    Madrid y Gijón.
    Modelo:
    Leon ST FR 1.8
    Unete a BMW FAQ Club Unete a BMW FAQ Club Unete a BMW FAQ Club
    Lo de ocultarlo ni idea.
    En excel está el veryhidden, pero el que sepa usar el vba lo puede desocultar.

    Buscando el very hidden he visto esto, que sin probarlo no entiendo muy bien dónde se debe poner...
    CODE, HTML o PHP Insertado:
    Solution Verified
    
    Thanks a lot - I didn't think of this.
    
    I'll also share some VBA code I found a few minutes ago in case it is helpful to anyone:
    
        CurrentDb.TableDefs("tblLicenseKey").Attributes = dbHiddenObject
        Application.RefreshDatabaseWindow   ' refresh the Navigation Pane view
        
    
    The first line sets an Attribute for the table so it isn't displayed in the Navigation Pane even if the user selects to Display Hidden Objects.
    
    The second line refreshes the Navigation Pane view to make the table disappear (it is equivalent to clicking in the Navigation Pane and pressing F5).
    
    You can make the table re-appear in the Navigation Pane with:
    
        CurrentDb.TableDefs("tblLicenseKey").Attributes = 0
        Application.RefreshDatabaseWindow   ' refresh the Navigation Pane view
        
    
    My thanks to those who offered their suggestions.
     

Compartir esta página