Cuadro Combinado Especial

Hola querida gente del Grupo! ¿Cómo les va? Espero que muy bien!
Mis consultas nunca son comunes, pero si seguramente simples para la mayoría de Uds que poseen amplia experiencia en programación... Voy al punto.
Tengo un Form "INICIAL" en el cual tengo un Cuadro Combinado "ELEGIR" en el cual elije una Ciudad de una lista de ciudades (una tabla) ... Con este CC lo que hago es decirle a access que me abra otro Form llamado "SECUNDARIO 2" en donde según lo que yo elegí en ELEGIR ya me muestra filtrados todos los registros correspondientes a la ciudad elegida, por ejemplo "NewYork"
Uso en el CC en el Procedimiento de evento lo siguiente
----------------------------------------------------------------------------------------------------------------------------
Private Sub ELEGIR_AfterUpdate()
DoCmd.OpenForm "SECUNDARIO 2", , , "[idCiudad]=[forms]![inicial]![elegir]"
End Sub
----------------------------------------------------------------------------------------------------------------------------
En Origen de La Fila del mismo CC tengo:
----------------------------------------------------------------------------------------------------------------------------
SELECT dbo_Ciudad.id, dbo_Ciudad.Descripcion FROM dbo_Ciudad ORDER BY [Descripcion];
----------------------------------------------------------------------------------------------------------------------------
... Y con esas dos cosas me funciona perfecto... Ahora lo que necesito es:
1- Que al elegir una Ciudad en ese CC "ELEGIR", en el próximo inicio de la Aplicación mdb me Inhabilite el resto de las ciudades; es decir, que sólo sea posible FORZOSAMENTE tener que elegir la ultima ciudad elegida...
Espero me puedan ayudar, desde ya, muchas gracias!
Respuesta
Tendrás que guardar el valor elegido en una tabla para después consultar la tabla.

2 respuestas más de otros expertos

Respuesta
1
Silo que quieres es que al cerrar tu aplicación 'Tenga tu ciudad por defecto' puedes hacer dos cosas:
1. Tener un archivo .Ini, donde guarde este valor, pero para eso tendrías que manejar archivos secuenciales, sobreescribirlos y puede ser un problema si se llegara a eliminar.
2. Te planteo algo mejor, aveces cuando necesito que mi aplicación de access tenga valores 'por defecto', utilizo una tabla llamada Parámetros, donde guardo el nombre del Parámetro, y el valor..
Es decir Tabla PARÁMETROS con los siguientes campos (esta tabla no puede ser tabla vinculada en caso de una aplicación con este tipo de tablas): Debes crear crear los parámetros, y en determinado caso el valor.
Id (llave principal, y enumerada de 1 en adelante, este Id, me dirá que parámetro es, y entonces puedo capturar el valor en este caso la Ciudad)
Parámetro:Nombre del parámetro (Por ejemplo 'Ciudad por defecto')
Valor:como su nombre lo indica el valor del parámetro, en este caso el nombre de la ciudad por defecto... Ojo con los tipos de datos a manejar en valores si hay numéricos, texto y fechas, es mejor trabajarlos como texto, y luego convertir en el tipo de datos correcto:
Ahora:cuando se abre por primera vez, lógicamente este dato debe estar vacío, pero existir el parámetro es decir:
Tabla Parámetros:
Id=1;Parametro=Ciudad por Defecto;Valor=Null o Vacio
Ahora cuando abra tu aplicación, y siendo más especifico el Form 'INICIAL' podemos hacer lo siguiente
...
EncontrarCiudad = DLookup("VALOR", "PARAMETROS", "ID=1")
If IsNull(EncontrarCiudad) Or EncontrarCiudad = "" Then
SQL = "SELECT dbo_Ciudad.id, dbo_Ciudad.Descripcion FROM dbo_Ciudad ORDER BY [Descripcion];"
Else
SQL = "SELECT dbo_Ciudad.id, dbo_Ciudad.Descripcion FROM dbo_Ciudad INNER JOIN Parametros ON dbo_Ciudad.Descripcion = Parametros.Valor;"
End If
elegir.RowSource = SQL
Elegir. Requery
...
OJO: DLookup("VALOR", "PARAMETROS", "ID=1")
Es una función, que busca el valor del campo 'VALOR', de la tabla 'PARAMETROS', cuyo id=1, por eso preguntamos en el IF, si es nulo o esta vacío, si es haci el origen del control es la sentencia de sql normal, de lo contrario si la encuentra, hace una consulta INNER JOIN con parámetros por el nombre de la ciudad, para traerme los campos que necesite y me asegura que sea los datos de la ciudad que hay en parámetros, luego al combo le paso esta sentencia por medio del RowSource, y hago el requery, para que actualice la consulta...
EL EVENTO, puede ser en el evento Open del FORM.
Pero hay una cosa, si se quería otra Ciudad, o se debe cambiar la ciudad, debe haber la forma de que el usuario pueda cambiarla...
No se si te pueda servir, pero me avisa si tienes dudas
Att:TELEMACO
Otra vez:
Cuando pueda te la mando... pero por ahora..
Esta tabla llenas siempre los Id, y el campo parámetro, por que son cosas que ya están establecidas y tu las vas a utilizar, el campo valor no siempre estará lleno por que en este caso dependerá de la ciudad que se capture por primera vez...
El ID es numerico(Enterro), parametro es string..
Llenas los datos según tus necesidades.. es decir parece que solo necesitas un parámetro general para la Base de datos (La ciudad por defecto) entonces por ahora seria un solo registro así:
Id=1
Parametro=Ciudad por Defecto
Valor=Null o Vacio (Preferiblente nulo)
Cuando captures por primera vez la ciudad, entonces por una consulta de sql, actualizas...
Entonces, en el ejemplo que te mande, la primera vez te saldrán todas las ciudades, ahora me imagino que confirmaras con un Botón o con el mismo combo, desde ese momento se debe capturar la ciudad por defecto...
Entonces en el evento del botón, o del combo (donde necesites capturar la ciudad) hacemos:
...
Sql = "Update PARAMETROS set Valor='" & ELEGIR & "'"
Currentd. Execute sql
...
OJO: PARÁMETROS es el nombre de la tabla, no confundirlo con Parámetro el campo;el campor Valor (set Valor=..) se igualara al valor del campo (osea la ciudad)...
Si necesitas tener abierto el form donde esta el como en el momento que se actualize la tabla tendría que agregar la siguiente linea ademas de la sentencia Sql y teniendo en cuante que el código que te envíe en la entrega pasada lo coloco en el evento open del formulario:, entonces...
...
Form_Open(False)
...
Esto me sirve para que vuelva a llenar el combo con la consulta actualizada, el 'False' entre paréntesis no importa, este procediemto toca pasarle una valor obligatoriamente y por eso ponemos False...
Suerte me avisas si de toda maneras necesitas la Mdb, o si tienes más dudas...
Atentamente:Telemaco
Hola Telemaco! Gracias por tu respuesta!
Tengo unas cuantas dudas, por ejemplo:
1-En la tabla Parámetros
-¿El ID es autonumérico o Numérico?
-El Campo Parametro=Ciudad por defecto, que coloco alli?
Estoy algo confundido, me podrías enviar una mdb con este ejemplo a [email protected]?
Muchas gracias por todo!
No te preocupes, pero te la envío el sábado o domingo, por que es que ando muy ocupado...
Att: telemaco
Hola, mil gracias por la explicación, pero no logro hacerlo funcionar, seguramente es producto de mi poco experiencia en esto ... si me envías un mdb de ejemplo te lo agradecería mucho, sino no hay problema! Un abrazo.
Hola Telemaco! Espero tu mail, por favor no te olvides.
Un abrazo y muchas gracias por tu ayuda!
Drmx.-
Hola Telemaco, la verdad no me ha ido bien hasta ahora, por lo que tome por otros rumbos y ha mejorado la cuestión al menos un poco ... aun me falta pulir unas cuantas cositas...
No se si te puedo enviar mi código y me ayudas a mejorarlo o directamente me envías un ejemplo en mdb que funcione...
Gracias por tu paciencia y ayuda!
Mi mail es [email protected]
DRMX®.-
Me avisa como te fue con el ejemplo
ahh, perdon, recien veo tu mail, ahora te cuento!
Me avisa cualquier cosa...
No te preocupes..
Att:telemaco
Gracias Telemaco! Perdón por la demora en Finalizar, estuve engripado y no me he conectado. Todo ha funcionado muy bien! Un gran abrazo! Drmx.-
¿Cómo le fue?...
No se te olvide finalizar la pregunta...
Respuesta
1
Dado que necesitas guardar el estado de la ultima (y primera asumo) selección, lo que hay que hacer sin lugar a duda es almacenar en algún lugar ese dato. Bien puede ser en una tablita residente en el mdb.
Por ejemplo:
Tabla UsuSel
Campo Ciudad as {tipo de id}
sin llave primaria
en el evento Open del primer form pones
dim db as database
dim rst as recordset
set db=currentdb()
set rst=db.openrecordset("UsuSel")
if not isnull(rst!Ciudad) then
DoCmd.OpenForm "SECUNDARIO 2", , , "[idCiudad]="+cstr(rst!Ciudad)
cancel=true
end if
rst.close
Estoy asumiendo que el código de ciudad es numerico, sino se debe entrecomillar.
En el evento elegir se debe guardar el valor seleccionado en la misma tabla.
dim db as database
dim rst as recordset
set db=currentdb()
set rst=db.openrecordset("UsuSel")
rst.edit
rst!Ciudad=Elegir
rst.update
Rst. Close
Para que este ejemplo funcione debe haber una fila en la tabla con el campo en nulo (blanco)
Lo siento, para poder hacer eso más bien necesitaría tu mdb ya que es mucho trabajo recrear el entorno del ejemplo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas