¿Cómo puedo en Access cambiar criterios manualmente sin abrir la vista de diseño?

Antes que nada la verdad es sorprendente su Currículo !
Bueno soy aprendiz de Access 2003 y estoy desarrollando "al rumbo" un programita para mi tienda pero tengo un problema ojalá me pueda ayudar, de hecho no se si se pueda hacer; bueno esta así:
Tengo un Formulario LLamado: Productos el cual contiene un Cuadro Combinado independiente llamado: TodasQry el cual al recibir el enfoque se llena con todas las consultas de la BD, y un Control TextBox dependiente llamado: Lote que contiene datos de tipo numérico, hay otros controles pero al tema importan estos dos.
Bueno como decía, al abrir el Combo me aparecen todas las consultas que contiene la Aplicación entonces al seleccionar y darle enter a la consulta que quiero, se abre esa consulta en vista diseño; así lo he querido pues lo que hago una vez abierta la consulta en vista diseño es cambiar (manualmente) el valor del criterio de esa consulta en un campo llamado: Lote. Supongamos que en el cirterio del Campo: Lote contiene el número 1 entonces y lo quiero cambiar por el número 7, pues para hacerlo me desplazo hasta el criterio del campo, borro el número 1 y escirbo el nuevo valor 7, luego cierro la consulta, guardo los cambios y regreso al Formulario; hasta aquí todo bien.
Pero me gustaría que el procedimiento fuera más eficiente ( es decir más rápido y al mismo tiempo evitar errores de escritura) cómo: Bueno seguir usando el combo para seleccionar la consulta a la cual deseo modificar el criterio (pero ya sin que se abra la consulta visiblemente sino "tras bambalinas") mediante alguna programación con código (del cual apenas "lo mastico") entonces que el Combo: TodasQry tome el valor que contiene el Control: Lote que esta en el Formulario y que ese valor lo ponga en el criterio de la consulta, es decir quite el anterior valor y ponga el nuevo.
Bueno la idea es NO tener que abrir las consultas en vista diseño para cambiar los criterios manualmente (como lo vengo haciendo) sino que los cambios se puedan hacer automáticamente desde el Combo del Formulairo.
No se si algo así se pueda hacer.

1 respuesta

Respuesta
1
Disculpa la demora, me tomé unos días de vacaciones y me desconecté del mundo.
Lo que quieres hacer es muy prudente porque no es muy sano estarle metiendo mano a las pantallas de diseño ya estando en producción, así que lo conveniente es que lo cambies por la forma en que deseas hacerlo, que es lo correcto.
La solución es que en la consulta, en el campo donde va el criterio, en vez del número que en tu ejemplo mencionas el 1 o el 7, mejor quede fija la referencia al campo de tu formulario, así, cambias el valor del campo y el resultado del query también cambia, la forma de hacerlo es poner el el campo de criterio:
Forms![Productos]![Lote]
En vez de poner el 1 o el 7 directamente en ese campo.
De esta forma, cada que en tu formulario cambias el dato en el textbox Lote, el resultado del Query cambiará.
Para que el query funcione con esta mecánica, es necesario que el formulario [Productos] esté abierto, y que el campo Lote tenga un valor válido.
Esta técnica es muy útil cuando vas a emitir un reporte o una consulta adicional y ya tienes el query preparado, y cuando se llama el reporte o la consulta, es porque ya en el campo clave tienes el dato que le da vida al Query.
Espero haber aclarado tu duda, y si no, con todo gusto ahondamos.
Feliz día.
Hola Sr. Rogelio,
De antemano gracias por su tiempo y espero se la halla pasado bien en sus vacaciones y no se preocupe entiendo lo de la demora.
mmmmmmm, ¿a todas las consultas les he hecho así y no se si este haciendo algo mal porque cada vez que abro otros formularios me aparecen imputbox pidiéndome el valor del parámetro?, además cuando abro mi punto de venta, las existencias no se me actualizan conforme voy agregando productos, y del método anterior si se actualizaban. No se tal vez no me he explicado correctamente:
En un formulario llamado: FrmProductos(basado en la tabla:TblProductos), tengo un Cuadro de texto llamado:Lote(es de tipo numérico y dependiente de la misma tabla) y finalmente un Cuadro Combinado llamado:TodasQry(Independiente, que se llena con todas las consultas de la base de datos mediante el siguiente código :)
Private Sub TodasQry_GotFocus()
Dim Consulta As Object, _ 
dbs As Object
Set dbs = CurrentData
For Each Consulta In dbs.AllQueries
Me.TodasQry.AddItem Consulta.Name
Next Consulta
End Sub
Así mismo el siguiente código me sirve para abrir en vista diseño la consulta seleccionada de la lista.
Private Sub TodasQry_AfterUpdate()
On Error GoTo Err_TodasQry_AfterUpdate
Dim Consulta As String
Consulta = Me.TodasQry
DoCmd.OpenQry Consulta, acViewDesign, acAdd
Exit_TodasQry_AfterUpdate:
Exit Sub
Err_TodasQry_AfterUpdate:
MsgBox Err.Description
Resume Exit_TodasQry_AfterUpdate
End Sub
(NOTA: Al llamar la vista diseño es con el propósito es poder cambiar el criterio de la consulta seleccionada en el campo llamado:Lote ; casi todas las consultas que contiene el Combo TodasQry comparten un campo común llamado: Lote (es porque cada consulta representa un producto en específico), en ése campo (Lote, en Criterios en "todas las Consultas" es donde hago el único cambio de forma manual. ¿Por qué?.- Bueno "mi humilde idea" es poder controlar con más precisión los precios y las existencias de todos y cada producto, es decir: como los precios del mercado suben y bajan constantemente; a la cantidad de cada producto comprado le asigno un lote y un precio Pj. Compra de fecha 01/01/2009 Nutrí Leche $10.00 Lote 7; compra de fecha 20/01/2009 Nutrí Leche $10.30 Lote 40; entonces cuando se termina un lote necesito cambiar al siguiente y así constantemente, los lotes comprados se guardan en una tabla llamada:Almacen, allí llevo el control de los lotes ya usados y de los que están en "espera" y es desde el formulario:ProductosFrm donde hago los ajustes finales pues allí es donde esta el Combo que abre todas las consultas.
Lo que necesito es hacer esto mismo pero ya no manualmente sino automáticamente desde el formulario es decir: que al seleccionar una consulta del Combo, mediante algún código en el evento AfterUpdate, el Combo recoja el número que contiene el Control: Lote que esta en el Formulario y ese número lo inserte como criterio en el campo: Lote de la Consulta. "Sería como decirle al programa: Abre la Consulta que fue seleccionada en el Combo, y cambiale el valor que actualmente tiene el criterio del campo: Lote por el valor que tiene el Control: Lote que esta en el Formulario.
Lo he intentado de la siguiente manera pero funciona solo para una consulta más necesito que sea para todas:
(Módulo1)
Public MiCriterioConsulta As Variant
Public Function ObtenerCriterioConsulta() As Variant
ObtenerCriterioConsulta = MiCriterioConsulta
End Function
(FrmProductos, TodasQry)
Private Sub TodasQry_GotFocus()
MiCriterioConsulta = Lote
(Consultas, Consulta1)
Campo: Lote
Criterio: ObtenerCriterioConsulta()
De antemano Muchas Gracias
Saludos Fraternos.
PD. Perdón si hago mucha redundancia, aveces siento que no me explico como quisiera.
(xxxxxx):
No te preocupes.
Yo uso mucho ese método; si te está apareciendo un inputbox es que no está tomando el nombre del formulario y/o el campo y/o el criterio debidamente, y no lo está reconociendo, de tal forma que las posibilidades son: O que está mal escrito, o que el lenguaje nos está haciendo una broma, o que no está cargado en memoria el formulario.:
[Forms]![Encabezado de Pedidos Para Finanzas Privado]![IdPedido]
Esta es una línea que me traje con copy-paste de un query que tengo en el sistema que hice. La consulta jala todos los datos del pedido indicado en el campo IdPedido, de la tabla que se llama [Encabezado de Pedidos Para Finanzas].
Si estás programando en español, me parece que te acepta la palabra Formularios en vez de Forms
En tu ejemplo, en la línea de Criteria del campo Lote de la consulta, en el modo diseño, deberías poner:
[Forms]![FrmProductos]![Lote]
Se requiere que el formulario FrmProductos esté cargado y que tenga un campo que se llama Lote, entonces, el valor que tenga este campo, es usado como criterio para la consulta.
Te hago notar que en una línea me diste el nombre del formulario como FrmProductos, y en otra me lo diste como ProductosFrm, así que ten cuidado porque un cambio de estos podría ser lo que te esté ocasionando el problema.
Funcionando esto, logras lo que quieres de forma automática, solo que ya no abres la consulta en modo diseño, sino en modo de ver.
Hola Dn. Rogelio,
De antemano gracias por su apoyo, aunque no es exactamente lo que buscaba revisaré nuevamente con sus consejos y aver que sale.
Saludos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas