2016-11-28 364 views
2

我已经继承了VBA项目,并试图调试我收到的错误:Invalid use of Null。过了一段时间,我找到了发生错误的地方,但还没有找到问题的具体罪魁祸首和/或解决方案。请参阅以下的这段(行抛出异常标注有评论):VBA无效使用null

Dim db As Database, wsp As Workspace 
    Dim retVal As Variant 
    Dim tableType As Long 

    'Check to see if the table name exists in the zLinked_Tables table; if it does, that means its a SQL table 
    If DCount("*", "[zLinked_Tables]", "[LocalName] = '" & TableName & "' AND [ObjectType] = 'Table'") > 0 Then 
     'SQL Table 
     retVal = ExecuteSPT("TRUNCATE TABLE [" & TableName & "]", 0) 'truncate the table via passthrough query on server 
     If KeyColumn <> "" Then 
      retVal = ExecuteSPT("DBCC CHECKIDENT([" & TableName & "],RESEED,1)", 0) 'reset the identity column value via passthrough query on server 
     End If 
    Else 
     'MS Access Table 
     tableType = DLookup("[Type]", "[MSysObjects]", "[Name] = '" & TableName & "'") 
     DoCmd.SetWarnings False 
     DoCmd.RunSQL "DELETE * FROM [" & TableName & "]" 'delete all records from table 
     If KeyColumn <> "" Then 
      DoCmd.SetWarnings True 
      If tableType = 1 Then 'Resident/Local 
       Set db = CurrentDb 
       db.Execute "ALTER TABLE [" & TableName & "] ALTER COLUMN [" & KeyColumn & "] COUNTER(1,1)" 
      Else 'Linked Table 
       Set wsp = DBEngine.Workspaces(0) 
       Set db = wsp.OpenDatabase(DLookup("[Database]", "[MSysObjects]", "[Name] = '" & TableName & "'")) 'ERROR THROWN ON THIS LINE 
       db.Execute "ALTER TABLE [" & TableName & "] ALTER COLUMN [" & KeyColumn & "] COUNTER(1,1)" 'reset the autonumber column value 
      End If 
      DoCmd.SetWarnings False 
      Set db = Nothing 
     End If 
    End If 
    Exit Function 

注意,我已检查了TableName变量,它不为空,这是一个有效的表名

回答

2

你使用DLookup返回在“数据库”字段中MSYSObjects没有值(NULL)一行。在立即窗口和执行程序中键入以下内容。您需要添加代码以允许这种可能性。

我假设你试图获得完整的路径?

?(DLookup("[Database]", "[MSysObjects]", "[Name] = '" & "Table1" & "'")) 
2

有几件事情发生在这条线上。除了检查TableName为空,您还应该检查是否wsp null?无论什么原因,Set wsp = DBEngine.Workspaces(0)都会失败吗?

dlookup失败了吗? DLookup("[Database]", "[MSysObjects]", "[Name] = '" & TableName & "'")。如果是零,这意味着要传递nullwsp.OpenDatabase()它给你看到的错误:

enter image description here

相关问题