JET 数据库/创建和连接
有很多方法可以创建 JET 数据库,下面列举了一些方法。数据库的创建方式无关紧要,重要的是数据库的引擎类型决定了 JET SQL 的可用功能。
JET 版本 | 引擎类型代码 |
---|---|
JET 1.0 | 1 |
JET 1.1 | 2 |
JET 2.0 | 3 |
JET 3.x | 4 |
JET 4.x | 5 |
到目前为止,创建新 JET 数据库最简单的方法是使用 Microsoft Access.
- 启动 Microsoft Access
- 从菜单中选择
文件 → 新建
或按Ctrl-N
- 选择“空白数据库”
- 导航到要保存数据库的文件系统位置,并为其命名
然后,您可以使用各种数据库和安全实用程序来设置引擎类型、加密、可选系统数据库以及用户/密码等内容。
可以通过在 Windows 中创建新的 ODBC DSN(数据源名称)并在 ODBC 连接窗口中创建数据库来创建空 JET 数据库。
从 Windows 控制面板启动 ODBC 数据源小程序,然后单击“添加”以创建新的 DSN。您应该会看到一个类似于右侧的屏幕。选择 Microsoft Access 驱动程序,然后单击“完成”。
您应该会看到一个用于配置新的 Microsoft Access DSN 的屏幕,如右侧所示。单击“创建”按钮,打开“新建数据库”窗口。
您现在应该会看到“新建数据库”窗口。导航到要放置 JET 数据库的位置,输入名称,选择任何特殊选项(如引擎类型(格式)、加密以及是否创建单独的系统数据库),然后单击“确定”以创建数据库。如果需要,您可以取消 ODBC 数据源小程序,而不必创建新的 DSN,因为您可能希望通过 OLE-DB 连接到它!
用于创建与 JET 4.0 兼容的数据库的 Visual Basic 代码
Dim cat As New ADOX.Catalog
Dim create_string As String
Dim conn As ADODB.Connection
create_string = "Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Engine Type=5;"
create_string = create_string & "Data Source=" & path_to_database & ";"
If JET_encryption_wanted Then
create_string = create_string & "Jet OLEDB:Encrypt Database=True;"
End If
Set conn = cat.Create(create_string)
conn.Close()
JET 数据库不会重用删除旧数据释放的空间。这会导致数据库随着时间的推移而增大,并可能导致性能问题,甚至如果数据库增长过大,会导致数据库出现故障。为了克服这个问题,需要定期压缩数据库以删除未使用的空间并减小文件大小。
压缩 JET 数据库最简单的方法是在 Microsoft Access 中打开它并执行名为“压缩并修复数据库”的操作,该操作位于“工具”菜单中。但是,如果数据库位于远程位置且无法通过 Windows 文件系统访问,则可能无法执行此操作。
JET 运行时系统与称为 JET 复制对象 (JRO) 的组件库一起分发。以下 Visual Basic 代码使用 JRO 压缩 JET 数据库
' declare Windows API functions
Declare Function MoveFileEx Lib "kernel32" Alias "MoveFileExA" _
(ByVal lpExistingFileName As String, ByVal lpNewFileName As String, _
ByVal dwFlags As Long) As Long
' build connection strings for database and temporary file
Dim cx as string
Dim src_cx As String
Dim tgt_cx As String
cx = "Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Engine Type=5;"
If uses_database_password Then
cx = cx & "Jet OLEDB:Database Password=" & database_password
ElseIf uses_username_password Then
cx = cx & "User ID=" & user_id & ";Password=" & user_password & ";"
End If
src_cx = cx & "Data Source=" & src_file & ";"
tgt_cx = cx & "Data Source=" & tmp_file & ";"
' run Jet Replication Objects to compact the database to a temporary file
Dim compacter As New JRO.JetEngine
compacter.CompactDatabase src_cx, tgt_cx
Set compacter = Nothing
' replace the old database with the compacted database, under the same name
Dim scode As Long
scode = MoveFileEx(tmp_file, src_file, MOVEFILE_REPLACE_EXISTING + MOVEFILE_COPY_ALLOWED)
从 ADO 连接到数据库时,可以使用 JET OLE-DB 提供程序或 ODBC DSN(数据源名称)进行连接。本节介绍使用 OLE-DB 提供程序,因为它是最高效的机制,并且比 ODBC DSN 路径提供更多功能。
通过 JET OLE-DB 提供程序进行连接需要在 OLE-DB 连接字符串中传递有关数据库的信息。如果数据库具有系统数据库或使用数据库级密码,则必须在连接字符串中提供此信息。
以下 Visual Basic 代码演示了如何使用用户名和密码从 ADO 连接到 JET 数据库
Dim cx As String
Dim db As ADODB.Connection
cx = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & database_filename & ";"
Set db = CreateObject("ADODB.Connection")
db.Open cx, user_id, user_password
以下 Visual Basic 代码演示了如何使用数据库级密码从 ADO 连接到 JET 数据库
Dim cx As String
Dim db As ADODB.Connection
cx = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & database_filename & ";"
cx = cx & "Jet OLEDB:Database Password=" & database_password
Set db = CreateObject("ADODB.Connection")
db.Open cx
以下 Visual Basic 代码演示了如何使用用户名和密码从 ADO 连接到具有系统数据库的 JET 数据库
Dim cx As String
Dim db As ADODB.Connection
cx = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & database_filename & ";"
cx = cx & "Jet OLEDB:System Database=" & system_db_filename & ";"
Set db = CreateObject("ADODB.Connection")
db.Open cx, user_id, user_password
JET 引擎版本(最高至 JET 3.0)对使用 SQL 语句创建数据库对象的支持有限,而 DAO 提供了完全支持。但是,自从 JET 4.0 以来,JET SQL 语言支持大多数(如果不是全部)数据库对象属性。但是,某些设计工具尚未更新以反映这一点,并且仍然使用 DAO(通常通过 ODBC)来更改数据库。