跳转到内容

JET 数据库/创建和连接

来自维基教科书,开放世界中的开放书籍
JET 数据库

简介 · 创建和连接 · 数据类型 · 对象名称和常量 · 数据完整性 · 安全性 · 数据定义语言 · 选择 · 插入 · 更新 · 删除 · 函数 · 视图和存储过程 · 操作工具 · 集成和迁移 · 设计工具

创建 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

从 Access 创建

[编辑 | 编辑源代码]

到目前为止,创建新 JET 数据库最简单的方法是使用 Microsoft Access.

  1. 启动 Microsoft Access
  2. 从菜单中选择 文件 → 新建 或按 Ctrl-N
  3. 选择“空白数据库”
  4. 导航到要保存数据库的文件系统位置,并为其命名

然后,您可以使用各种数据库和安全实用程序来设置引擎类型、加密、可选系统数据库以及用户/密码等内容。

从 ODBC 创建

[编辑 | 编辑源代码]

可以通过在 Windows 中创建新的 ODBC DSN(数据源名称)并在 ODBC 连接窗口中创建数据库来创建空 JET 数据库。

从 Windows 控制面板启动 ODBC 数据源小程序,然后单击“添加”以创建新的 DSN。您应该会看到一个类似于右侧的屏幕。选择 Microsoft Access 驱动程序,然后单击“完成”。

您应该会看到一个用于配置新的 Microsoft Access DSN 的屏幕,如右侧所示。单击“创建”按钮,打开“新建数据库”窗口。

您现在应该会看到“新建数据库”窗口。导航到要放置 JET 数据库的位置,输入名称,选择任何特殊选项(如引擎类型(格式)、加密以及是否创建单独的系统数据库),然后单击“确定”以创建数据库。如果需要,您可以取消 ODBC 数据源小程序,而不必创建新的 DSN,因为您可能希望通过 OLE-DB 连接到它!

从 ADOX 创建

[编辑 | 编辑源代码]

用于创建与 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 数据库不会重用删除旧数据释放的空间。这会导致数据库随着时间的推移而增大,并可能导致性能问题,甚至如果数据库增长过大,会导致数据库出现故障。为了克服这个问题,需要定期压缩数据库以删除未使用的空间并减小文件大小。

从 Access 压缩

[编辑 | 编辑源代码]

压缩 JET 数据库最简单的方法是在 Microsoft Access 中打开它并执行名为“压缩并修复数据库”的操作,该操作位于“工具”菜单中。但是,如果数据库位于远程位置且无法通过 Windows 文件系统访问,则可能无法执行此操作。

使用 JRO 压缩

[编辑 | 编辑源代码]

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)

连接到 JET 数据库

[编辑 | 编辑源代码]

从 ADO 连接

[编辑 | 编辑源代码]

从 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

DAO 与 SQL

[编辑 | 编辑源代码]

JET 引擎版本(最高至 JET 3.0)对使用 SQL 语句创建数据库对象的支持有限,而 DAO 提供了完全支持。但是,自从 JET 4.0 以来,JET SQL 语言支持大多数(如果不是全部)数据库对象属性。但是,某些设计工具尚未更新以反映这一点,并且仍然使用 DAO(通常通过 ODBC)来更改数据库。

华夏公益教科书