VBA 使用 DAO TableDefs 集合檢查表是否存在,原始碼缺少參數導致錯誤。修正後函式接受表名參數並回傳 Boolean。另提供 Access 系統表 MSysObjects 查詢法:SELECT Count(*) FROM MSysObjects WHERE Name='表名',計數大於 0 即存在。SQL Server 可用 OBJECT_ID('表名') IS NOT NULL 或查詢 sysobjects。
Function fExistTable(strTableName As String) As Boolean
Dim db As Database, i As Integer
Set db = DBEngine.Workspaces(0).Databases(0)
db.TableDefs.Refresh
For i = 0 To db.TableDefs.Count - 1
If StrComp(strTableName, db.TableDefs(i).Name, vbTextCompare) = 0 Then
fExistTable = True: Exit Function
End If
Next i
fExistTable = False
End Function
' 呼叫範例
If fExistTable("MyTable") Then MsgBox "存在"
IF OBJECT_ID('dbo.MyTable', 'U') IS NOT NULL
PRINT '表存在';
-- 或
IF EXISTS (SELECT 1 FROM sysobjects WHERE name='MyTable' AND xtype='U')
PRINT '表存在';