Странное поведение вычисляемого поля в запросе MS Access - PullRequest
0 голосов
/ 04 февраля 2020

Этот вопрос мне любопытен.

Я создал следующую функцию в 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

Эта функция вызывается в Query from Access, как эта (в SQL mode):

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, но есть серьезная проблема: запрос постоянно пересчитывается после выполнения (любой выбор ячейки в результате, любая прокрутка) .

Возможно ли выполнить его только один раз?

Заранее спасибо

1 Ответ

0 голосов
/ 04 февраля 2020

Причина, по-видимому, в предложении where

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...