sql - 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 的查询,但有一个严重的问题:查询一旦执行就会不断重新计算(结果中的任何单元格选择,任何滚动)。
是否可以只执行一次?
提前致谢
解决方案
原因似乎来自您的 where 子句
WHERE (((materialproveedor.DESC_MAT_PROVEEDOR)<>"- Seleccione uno de la lista -"))
推荐阅读
- python - 如何将从流中读取的原始图像字节转换为形状有效的张量以执行 Conv2d?
- react-native - 如何在没有任何插件的情况下创建一对一的聊天页面设计
- mariadb - MariaDB我们可以创建一个函数索引(基于函数的索引)
- wordpress - Wordpress - 如何在 wordpress 上编辑过滤器
- javascript - 如何理解从 MediaRecorder 获得的音频元数据?
- python - 计算季度结束日期
- typescript - 使用 TypeScript 的方法重载不会推断参数类型
- android - 如何在android中的两个视频流之间添加GL转换?
- r - 如何检索表的列/字段名称?
- swift - Swift,协议条件一致性,Element: Protocol 和 Element == Protocol 在实现嵌套数组时有什么区别?