首页 > 解决方案 > MS Access 查询中计算字段的奇怪行为

问题描述

这个问题对我来说很好奇。

我在 VBA 中创建了以下函数

Public Function ContajeDeMaterialAUnaFecha(DFechaDeContaje As String, _
                                            StrDescMatProveedor As String) As Single
Dim rst As DAO.Recordset
Dim rstResultado As DAO.Recordset
Dim strSQL As String
Dim sngUnidadesContadas As Single
Dim intCuentas As Integer
    strSQL = "SELECT materialproalbsub.nalbpro, materialproveedor.DESC_MAT_PROVEEDOR, " & _
                "materialproalbsub.TOTALCANTIDAD, materialproalbsub.precioud, materialproalbsub.falbaran " & _
                "FROM materialproveedor INNER JOIN materialproalbsub ON materialproveedor.idmaterialemp = " & _
                "materialproalbsub.idmaterialemp " & _
                "ORDER BY materialproalbsub.falbaran;"

    Set rst = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot, dbSeeChanges)

    rst.Filter = "materialproalbsub.falbaran<=#" & DFechaDeContaje & "# " & _
            "AND materialproveedor.DESC_MAT_PROVEEDOR='" & StrDescMatProveedor & "'"

    Set rstResultado = rst.OpenRecordset

    If rstResultado.RecordCount > 0 Then

        intCuentas = 0
        sngUnidadesContadas = 0

        rstResultado.MoveLast
        rstResultado.MoveFirst

            Debug.Print rstResultado.RecordCount, StrDescMatProveedor

            Do Until rstResultado.EOF

                sngUnidadesContadas = sngUnidadesContadas + rstResultado.Fields("TOTALCANTIDAD")

                rstResultado.MoveNext

                intCuentas = intCuentas + 1

            Loop

        Debug.Print DFechaDeContaje, sngUnidadesContadas

        ContajeDeMaterialAUnaFecha = sngUnidadesContadas

    End If

    rst.Close
    Set rst = Nothing

    rstResultado.Close
    Set rstResultado = Nothing

End Function

该函数在 Access 的查询中调用,如下所示(在 SQL 模式下):

SELECT materialproalbsub.nalbpro, materialproveedor.DESC_MAT_PROVEEDOR, materialproalbsub.TOTALCANTIDAD, materialproalbsub.precioud, materialproalbsub.falbaran, ContajeDeMaterialAUnaFecha([falbaran],[materialproveedor]![DESC_MAT_PROVEEDOR]) AS TotalesAFecha
FROM materialproveedor INNER JOIN materialproalbsub ON materialproveedor.idmaterialemp = materialproalbsub.idmaterialemp
WHERE (((materialproveedor.DESC_MAT_PROVEEDOR)<>"- Seleccione uno de la lista -"))
ORDER BY materialproalbsub.falbaran;

函数工作正常,还有来自 MS Access 的查询,但有一个严重的问题:查询一旦执行就会不断重新计算(结果中的任何单元格选择,任何滚动)。

是否可以只执行一次?

提前致谢

标签: sqlvbams-access

解决方案


原因似乎来自您的 where 子句

WHERE (((materialproveedor.DESC_MAT_PROVEEDOR)<>"- Seleccione uno de la lista -"))


推荐阅读