2016-08-31 62 views
0

我在將一個十進制數從一個訪問字段(使用DAO記錄集)傳遞給一個vba變量時遇到了一些麻煩。我嘗試更改access和vba(single/currency)中的數據類型,但同一行在調試器中一直保持突出顯示,運行時錯誤94「無效使用null」。 讓我困惑的是,當我將光標放在調試器中的變量上時, quickinfo顯示該變量保持正確的值,但記錄集字段爲空。這隻發生在Decimal字段中,其他字段(字符串/整數)不會突出顯示。將小數傳遞給vba的問題

調試器中被高亮顯示的行是'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 
+2

如果我們看一些代碼,它可能會幫助http://stackoverflow.com/help/mcve –

+2

存儲十進制你需要使用'Variant'數據類型。 –

+0

Remi, 我在 以上添加了一些代碼Ryan Wildry, 我嘗試了變體數據類型,代碼什麼都沒做。 – damnthing

回答

0

。您實際上顯示了分配給numField4變量的最後一條記錄的值。

這意味着您當前的記錄集字段Field4實際上是空的。要將其分配給數字變量,您需要針對該情況進行陷阱。

numField4 = Nz(rs!Field4, 0)

而且你應該重複的字段3覆蓋THST可能性也