如何从我的 ACCESS Table 中删除所有 NA 值?

How do I delete all NA value from my ACCESS Table?

是否存在如下查询:

UPDATE FieldName FROM TableName WHERE FieldName IN('NA') SET FieldName = NULL

事实是 FieldName 可以是任何字段?

例如

Field1 Field2 Field3 Field4 .... Field100
013475 486466 486655 156861 .... 15351312
013475 NA 486655 156861 .... 15351312
013475 486466 NA 156861 .... NA
013475 486466 486655 NA .... NA

执行查询后我应该有:

Field1 Field2 Field3 Field4 .... Field100
013475 486466 486655 156861 .... 15351312
013475 486655 156861 .... 15351312
013475 486466 156861 ....
013475 486466 486655 ....

请注意,我正在处理访问权限。

必须明确引用每个字段才能更新。

考虑具有 2 个字段的示例:

UPDATE tablename SET Field2 = IIf(Field2 = "NA", Null, Field2),
                     Field3 = IIf(Field3 = "NA", Null, Field3)

或者,构建 VBA 过程以在循环中对记录集或 运行 重复更新操作语句执行编辑。

否则,开table和运行一次性Find/Replace整个table。

没有。 SQL 中的字段和 table 名称不能是动态的。

使用 DAO 完成这样的任务:

Public Function CleanNa()

    Dim Records As DAO.Recordset
    Dim Field   As DAO.Field
    
    Dim Sql     As String
    
    Sql = "Select * From Tablename"
    
    Set Records = CurrentDb.OpenRecordset(Sql)
    
    Records.MoveFirst
    While Not Records.EOF
        For Each Field In Records.Fields
            If Field.Value = "NA" Then
                Records.Edit
                Field.Value = Null
                Records.Update
            End If
        Next
        Records.MoveNext
    Wend
    Records.Close
    
End Function

您可以做的一件事是使用一些 VBA 循环字段和 运行 一组更新语句。类似于:

Sub sUpdateData()
    Dim db As DAO.Database
    Dim tdf As DAO.TableDef
    Dim fld As DAO.Field
    Dim strSQL As String
    Set db = CurrentDb
    Set tdf = db.TableDefs("TableName")
    For Each fld In tdf.Fields
        strSQL = "UPDATE TableName SET [" & fld.Name & "]=NULL WHERE [" & fld.Name & "]='NA';"
        db.Execute strSQL
    Next fld
    Set tdf = Nothing
    Set db = Nothing
End Sub