Pregunta

Soy nuevo en VBA y el acceso en general y me encontré con este problema al mismo tiempo tratando de utilizar la aplicación propuesta alternativa de otra pregunta que me había pedido ( DBúsq de acceso no correr hasta textBox clic en formulario en )

El siguiente código se ejecuta, el tema es que Me.Key es diferente para cada registro que se muestra en la forma y la ejecución de este en forma significa evento abierto se agarra sólo el primer valor asignado a Me.Key desde el primer registro. ¿Cómo puedo hacer esta carrera de manera que Me.Key es diferente para cada registro / línea se muestra?

Dim rs As DAO.Recordset
Dim db As Database
Dim qdf As QueryDef
Dim prm As Parameter

Set db = CurrentDb
Set qdf = db.QueryDefs("[MF INCOME - STREAM MONTHLY]")
For Each prm In qdf.Parameters
    prm.Value = Eval(prm.Name)
Next prm

Set rs = qdf.OpenRecordset(dbOpenDynaset)
rs.FindFirst "[MyMonth]=10 AND [Org_Type]='" & Me.Key & "'"
Me.Oct = rs!SumVal
'...other month assignments
¿Fue útil?

Solución

Creo que la Me.Key se refiere a un control ubicado en la sección de detalles del formulario. En este caso, y con el fin de enumerar todos los valores tomados por el control, usted tendrá que buscar todos los registros. Una de las maneras de hacerlo puede ser:

Dim m_position as Long
for m_position = 1 to Me.recordset.recordcount
   me.seltop = m_position
   debug.print me.key
next m_position

Desafortunadamente su verá su blincker pantalla durante la navegación por todas las líneas. Puede por supuesto encontrar algunas utilidades 'screenFreezer' para VBA en la red (hay uno llamado LockWindowUpdate, siempre que puedo recordar).

Otra solución es buscar el clon del conjunto de registros subyacente (navegar por el conjunto de registros que provocará el mismo comportamiento de la pantalla como antes). Suponiendo que el control Me.Key se unió a la columna "Key" del conjunto de registros, el código podría ser:

Dim rsClone as DAO.recordset
set rsClone = Me.recordsetclone
if rsClone.EOF and rsClone.BOF then
Else
    rsClone.moveFirst
    Do while not rsClone.EOF
        debug.print rsCLone.fields("Key")
        rsClone.moveNext
    Loop
Endif
set rsClone = nothing

Mi favorito es el primero de ellos, con la opción de "congelar" añadió. El código puede manejar los valores SelTop y SelHeight de la forma. Esto significa que puede navegar por los registros seleccionados específicamente por los usuarios y / o, una vez que todos los registros buscan, volver a la selección de registros originales.

EDIT:

Tras @ comentario de Ben, añadiré que si su control "myControl" se encuentra en la sección de detalles y no está consolidado, que entonces no será capaz de manejar un valor por fila. El control tendrá el mismo valor para todas las líneas cuando el formulario se muestra como "continua".

Si su control "myControl" está ligada al campo "myField" de un conjunto de registros, cualquiera de los siguientes códigos se incrementará el valor de control "myControl" y el valor del campo "myField" al mismo tiempo. Usted será capaz de tener un valor diferente en cada fila:

Solución 1:

Dim m_position as Long
for m_position = 1 to Me.recordset.recordcount
   me.seltop = m_position
   me.controls("myControl") = m_position
next m_position

Solución 2:

Dim rsClone as DAO.recordset, _
    i as long

set rsClone = Me.recordsetclone
if rsClone.EOF and rsClone.BOF then
Else
    rsClone.moveFirst
    i = 1
    Do while not rsClone.EOF
        rsClone.fields("myField") = i
        rsClone.update
        rsClone.moveNext
        i = i+1
    Loop
Endif
set rsClone = nothing

Otros consejos

Se puede probar con el caso actual del formulario, como se sugirió anteriormente:)

No está del todo claro lo que necesita para los parámetros en esa consulta. Yo sugeriría que simplemente crea una consulta sin ningún parámetro que incluye todas las columnas que necesita.

A continuación, construir de forma pequeño sobre la base de esta consulta. A continuación, puede dejar este pequeño formulario en su forma actual y mostrar los varios campos de datos en función de la configuración de la clave de valor. (Solo asegúrese de instalar el maestro de enlace e infantiles configuración para la sub-forma). Aquí lo que una forma se parece a:

alt text
(fuente: shaw.ca )

Por lo tanto, en lo anterior, el proyecto de ley que muestra la información del cliente en función del ID del cliente y es una tabla relacionada en la factura.

En otras palabras, para mostrar varios campos de datos en función de un valor clave de otra tabla que no es necesario escribir una línea de código. Así que todo este proceso y la meta de la suya se puede hacer mediante arrastrar y soltar con el ratón. A menudo tienen algo así como una factura u orden de compra y sólo tengo el ID de cliente. Mediante el uso de una sub-forma que pueda mostrar toda la dirección y varios campos de datos sin necesidad de escribir código. Al pasar de un registro a otro, todo este conjunto de campos se actualizará y siempre mostrar los datos relacionados correcta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top