我在访问字段(使用DAO记录集)中将十进制数传递给vba变量时遇到了一些麻烦。我尝试在access和vba(单/货币)中更改数据类型,但同一行在调试器中不断突出显示,运行时错误94"无效使用null"。 令我困惑的是,当我将光标放在调试器中的变量上时; quickinfo显示变量保持正确的值,但记录集字段为空。这仅适用于Decimal字段,其他字段(字符串/整数)不会突出显示。
调试器中突出显示的行是&!39; Start Loop块中的rs!Field4。奇怪的是rs.Field3设置了numField3变量。两者之间的唯一区别是字段3包含整数,字段4包含小数。两者都是msAccess号码,但我在解决问题时已更改为货币。 任何反馈都会很好 感谢
Private Sub Command1_Click()
'Set Database and Recordset variables
Dim thisDB As DAO.Database
Dim rs As DAO.Recordset
Set thisDB = CurrentDb
Set rs = thisDB.OpenRecordset("tblTable1")
'Declare and set recordset variables variables
Dim strField1 As String
Dim strField2 As String
Dim numField3 As Currency
Dim numField4 As Currency
Dim dtField5 As Date
Dim dtField6 As Date
'Declare dynamic variables
Dim dtVar1 As Date
Dim intVar2 As Integer
Dim dtVar3 As Date
'DecalreSQL Variables
Dim num1 As Currency
Dim num2 As Currency
Dim num3 As Currency
Dim StrSQL As String
Dim strValues As String
'Start Loop
Do While Not rs.EOF
strField1 = rs!Field1
strField2 = rs!Field2
numField3 = rs!Field3
numField4 = rs!Field4
dtField5 = rs!Field5
dtField6 = rs!Field6
If strField1 = "This" And strField2 = "That" Then
'Perform calculations
dtVar1 = 0
dtVar3 = 0
num3 = 0
Do While dtVar3 < dtField6
If ’Something’ Then
This calculation sets variables
ElseIf ‘SomethingElse’ Then
This calculation sets variables
Else
This calculation sets variables
End If
'Build SQL Query and apprend to table
strValues = dtVar1& "," & num1 & "," &num2 & "," & num3
StrSQL = "INSERT INTO tblTable2 (Field1, Field2, Field3, Field4 );"
StrSQL = StrSQL & "VALUES ('" & strValues & "')"
DoCmd.SetWarnings False
DoCmd.RunSQL StrSQL
DoCmd.SetWarnings True
dtVar3 = dtVar1
Loop
End If
rs.MoveNext
Loop
rs.Close
End Sub
答案 0 :(得分:0)
当您将光标悬停在变量上时,它尚未分配。您实际上是显示分配给numField4
变量的最后一条记录的值。
这意味着您当前的记录集字段Field4
实际上是空的。要将它分配给数字变量,您需要捕获该条件。
numField4 = Nz(rs!Field4, 0)
你应该重复Field3以涵盖这种可能性