VB6 透過 DAO (Data Access Objects) 程式化建立 Access 資料庫 (.mdb)、資料表、欄位與屬性,適合安裝程式初始化、動態建表等場景。本文提供兩段完整程式碼:建立資料庫、建立資料表與欄位 (含型別、長度、允許空值)。
| 常數 | 值 | 對應型別 |
dbBoolean | 1 | Boolean |
dbByte | 2 | Byte |
dbInteger | 3 | Short (2 bytes) |
dbLong | 4 | Long (4 bytes) |
dbSingle | 7 | Single |
dbDouble | 8 | Double |
dbDate | 8 | Date |
dbText | 10 | Text (固定長度) |
dbMemo | 12 | Memo (長文字) |
範例 1:建立資料庫
Private Sub cmdCreate_Click()
On Error GoTo Err100
' 建立名為 VB-CODE 的資料庫 (檔名 VB-CODE.mdb)
' dbLangGeneral = 系統預設語言排序
CreateDatabase "VB-CODE", dbLangGeneral
MsgBox "資料庫建立完成!", vbInformation
Exit Sub
Err100:
MsgBox "不能建立資料庫!" & vbCrLf & vbCrLf & Err.Description, vbCritical
End Sub
範例 2:建立資料表與欄位
Private Sub Command1_Click()
On Error GoTo Err100
Dim dbs As Database, tdf As TableDef, fld As Field
' 開啟現有資料庫 (獨佔模式 False, 唯讀 False)
Set dbs = Workspaces(0).OpenDatabase(App.Path & "\vbeden.mdb", False, False)
' 建立 TableDef
Set tdf = dbs.CreateTableDef("VB編程樂園")
' 欄位 1: Name, Text(8)
Set fld = tdf.CreateField("Name", dbText, 8)
tdf.Fields.Append fld
' 欄位 2: Sex, Text(2), 允許空字串
Set fld = tdf.CreateField("Sex", dbText, 2)
fld.AllowZeroLength = True ' 關鍵:允許 "" 空字串 (非 Null)
tdf.Fields.Append fld
' 欄位 3: Age, Integer (2 bytes), 長度參數對 Integer 無效但保留
Set fld = tdf.CreateField("Age", dbInteger, 3)
tdf.Fields.Append fld
' 將 TableDef 加入資料庫
dbs.TableDefs.Append tdf
MsgBox "VB編程樂園資料表建立完成!", vbInformation
Exit Sub
Err100:
MsgBox "對不起,不能建立表。請先建立 VBEden 資料庫?", vbCritical
End Sub
關鍵屬性補充
Field.AllowZeroLength = True:Text/Memo 欄位允許零長度字串 (""),預設 False。注意區別 Null (未指派) 與 "" (指派空字串)。
Field.Required = True:不允許 Null (需配合 AllowZeroLength 完整控制)。
Field.DefaultValue:設定預設值,如 fld.DefaultValue = "Unknown"。
TableDef.Attributes = dbHiddenObject:建立隱藏系統資料表。
索引與關聯 (進階)
' 建立主鍵索引
Dim idx As Index
Set idx = tdf.CreateIndex("PrimaryKey")
idx.Primary = True
idx.Unique = True
Set fld = idx.CreateField("Name")
idx.Fields.Append fld
tdf.Indexes.Append idx
' 建立外鍵關聯 (需參考另一 TableDef)
' tdf.CreateRelation(...)
錯誤處理最佳實務
- 所有 DAO 操作包裹在
On Error GoTo 區塊。
- 檢查
Err.Number:3012 (資料庫已存在)、3010 (資料表已存在) 等。
- 物件變數用完設為
Nothing 釋放 COM 參考計數。
遷移提示
VB.NET / C# 專案請改用 ADO.NET SqlConnection + CREATE TABLE SQL 或 Entity Framework Code First Migration。DAO 為 COM 元件,僅支援 32 位進程,64 位環境需啟用 WoW64 或改用 ACE OLEDB Provider。
- 上一篇文章: VB6 呼叫 Microsoft Access 報表最佳實踐:Automation 物件模型完整範例
- 下一篇文章: VB.NET 資料庫連線全攻略:ADO.NET 三大 Provider (SQL Server/OLE DB/ODBC) 完整連線字串與程式碼範本
Copyright ©
程式碼之家 All Rights Reserved