在 Access/VBA 環境下判斷資料表是否存在,有兩種主流做法:
Function fExistTable(strTableName As String) As Boolean
Dim db As Database, i As Integer
Set db = DBEngine.Workspaces(0).Databases(0)
fExistTable = False
db.TableDefs.Refresh
For i = 0 To db.TableDefs.Count - 1
If StrComp(strTableName, db.TableDefs(i).Name, vbTextCompare) = 0 Then
fExistTable = True
Exit For
End If
Next i
Set db = Nothing
End Function
' 呼叫範例
Private Sub Command0_Click()
If fExistTable("需判斷的資料表名") Then
MsgBox "資料表存在"
Else
MsgBox "資料表不存在"
End If
End Sub
注意: 函式需傳入參數,否則會出現「引數不選擇性」錯誤。
SELECT COUNT(*) AS Qty
FROM MSysObjects
WHERE Name = '需判斷的資料表名'
Qty > 0 表示存在MSysObjects-- SQL Server 2000/2005+
IF OBJECT_ID('dbo.YourTable', 'U') IS NOT NULL
PRINT '表存在'
ELSE
PRINT '表不存在'
-- 或查詢系統目錄
SELECT COUNT(*) FROM sysobjects WHERE name = 'YourTable' AND xtype = 'U'
| 方法 | 適用環境 | 效能 | 備註 |
|---|---|---|---|
| DAO 迴圈 | Access/VBA | 較慢 | 需正確傳參 |
| MSysObjects | Access SQL | 快 | 需啟用系統物件檢視 |
| OBJECT_ID | SQL Server | 最快 | 原生函式,最佳選擇 |
依執行環境選擇最適合的方法,SQL Server 環境請優先使用 OBJECT_ID。