易语言操作Access数据库教程
第一章:准备工作
在开始之前,你需要准备好以下几样东西:

- 易语言:确保你已经安装了易语言,本教程以较新版本为例,但大部分代码也适用于旧版本。
- Microsoft Access:你需要一个Access数据库文件,如果你没有,可以自己创建一个。
- 打开Microsoft Access。
- 选择“空白数据库”。
- 创建一个名为
学生信息.accdb的文件。 - 在“创建”选项卡中,点击“表设计”。
- 设计如下字段和属性:
- 字段名:
ID, 数据类型:自动编号, 主键: 是 - 字段名:
学号, 数据类型:文本, 字段大小: 20 - 字段名:
姓名, 数据类型:文本, 字段大小: 10 - 字段名:
年龄, 数据类型:数字, 字段大小:整型 - 字段名:
班级, 数据类型:文本, 字段大小: 20
- 字段名:
- 保存表名为
学生表。
- 数据库文件路径:记住你创建的
学生信息.accdb文件存放的完整路径,C:\易语言项目\学生信息.accdb。
第二章:核心概念
在易语言中操作数据库,主要通过“支持库”来实现,我们需要使用 ADO (ActiveX Data Objects) 支持库,这是目前最主流、功能最强大的方式。
- ADO:是一套用于访问数据库的COM组件,易语言通过封装这些组件,让我们可以用简单的代码来执行复杂的数据库操作。
- 连接对象:负责与数据库建立和断开连接,就像打电话时的拨号和挂断。
- 记录集对象:像一个“虚拟的表格”,它包含了从数据库中查询出来的所有数据,我们可以通过这个对象来读取、添加、修改和删除数据。
- SQL语句:结构化查询语言,是与数据库沟通的“语言”。
SELECT * FROM 学生表就是告诉数据库“请把学生表里的所有数据都给我”。
第三章:连接数据库
这是所有操作的第一步,我们需要告诉易语言,我们要连接哪个数据库。
代码示例:
.版本 2
.程序集 窗口程序集_启动窗口
.子程序 __启动窗口_创建完毕
.局部变量 conn, ADO连接
.局部变量 连接字符串, 文本型
' 1. 创建一个ADO连接对象
conn.创建 ("ADODB.Connection")
' 2. 准备连接字符串
' 注意:将这里的路径替换成你自己的数据库文件路径
连接字符串 = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\易语言项目\学生信息.accdb;"
' 3. 打开连接
' 如果连接失败,会抛出异常,所以最好用“如果真”来捕获错误
.如果真 (conn.打开 (连接字符串) = 假)
信息框 ("连接数据库失败!", 0, )
返回 ()
.如果真结束
' 连接成功,可以在这里进行其他操作...
' 4. 关闭连接(在程序结束时)
conn.关闭 ()
.销毁 (conn)
.结束子程序
代码解析:

.局部变量 conn, ADO连接:声明一个名为conn的局部变量,类型为ADO连接。conn.创建 ("ADODB.Connection"):在内存中创建一个ADO连接对象。- 连接字符串:这是连接数据库的关键。
Provider=Microsoft.ACE.OLEDB.12.0:指定提供者,对于.accdb格式的Access数据库(Access 2007及以上),使用这个,如果是旧的.mdb格式,使用Provider=Microsoft.Jet.OLEDB.4.0。Data Source=...:指定数据库文件的完整路径。
conn.打开 (连接字符串):执行连接操作,如果返回假,表示连接失败。conn.关闭 ()和.销毁 (conn):操作完成后,务必关闭连接并释放对象,以释放系统资源。
第四章:读取数据
连接成功后,我们可以从数据库中读取数据,这通常需要使用 记录集 对象和 SELECT SQL语句。
代码示例:
.版本 2
.程序集 窗口程序集_启动窗口
.子程序 __启动窗口_创建完毕
.局部变量 conn, ADO连接
.局部变量 rs, ADO记录集
.局部变量 连接字符串, 文本型
.局部变量 SQL语句, 文本型
' 1. 创建连接和记录集对象
conn.创建 ("ADODB.Connection")
rs.创建 ("ADODB.Recordset")
' 2. 准备连接字符串并打开连接
连接字符串 = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\易语言项目\学生信息.accdb;"
conn.打开 (连接字符串)
' 3. 准备SQL语句
SQL语句 = "SELECT * FROM 学生表"
' 4. 打开记录集
' 参数说明:SQL语句, 连接对象, 光标类型, 锁定类型
rs.打开 (SQL语句, conn, 3, 3) ' 3是 adOpenStatic, 3是 adLockOptimistic
' 5. 遍历记录集并显示数据
.计次循环首 (rs.记录数, i)
' 使用字段名或索引来获取值
信息框 ("学号: " + rs.取值 ("学号") + #换行 + "姓名: " + rs.取值 ("姓名"), 0, )
' 移动到下一条记录
rs.移动下一个 ()
.计次循环尾 ()
' 6. 关闭并释放对象
rs.关闭 ()
.销毁 (rs)
conn.关闭 ()
.销毁 (conn)
.结束子程序
代码解析:
rs.创建 ("ADODB.Recordset"):创建一个记录集对象。SQL语句 = "SELECT * FROM 学生表":SELECT *表示选择所有字段,FROM 学生表表示从“学生表”中查询。rs.打开 (...):执行SQL查询,并将结果填充到记录集rs中。.计次循环首 (rs.记录数, i):rs.记录数属性返回查询结果的总记录数,我们可以用它来循环遍历每一行数据。rs.取值 ("字段名"):从当前记录中获取指定字段的值。rs.移动下一个 ():将记录集的指针移动到下一条记录,循环结束后,指针会自动移动到最后一条之后。
第五章:增加数据
向数据库中插入新数据,使用 INSERT INTO SQL语句,并通过 记录集 的 添加 () 和 更新 () 方法来完成。

代码示例:
.版本 2
.程序集 窗口程序集_启动窗口
.子程序 __启动窗口_创建完毕
.局部变量 conn, ADO连接
.局部变量 rs, ADO记录集
.局部变量 连接字符串, 文本型
.局部变量 SQL语句, 文本型
conn.创建 ("ADODB.Connection")
rs.创建 ("ADODB.Recordset")
连接字符串 = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\易语言项目\学生信息.accdb;"
conn.打开 (连接接字符串)
' 1. 准备SQL语句(只查询表结构,不查询数据)
SQL语句 = "SELECT * FROM 学生表 WHERE 1=2" ' WHERE 1=2 是一个技巧,确保返回空记录集
' 2. 打开记录集
rs.打开 (SQL语句, conn, 3, 3)
' 3. 添加一条新记录
rs.添加 ()
' 4. 为新记录的各个字段赋值
' 注意:ID是自动编号,不需要赋值
rs.取字段 ("学号").值 = "2025001"
rs.取字段 ("姓名").值 = "张三"
rs.取字段 ("年龄").值 = 20
rs.取字段 ("班级").值 = "计算机1班"
' 5. 保存(更新)数据库
rs.更新 ()
信息框 ("数据添加成功!", 0, )
' 6. 关闭并释放
rs.关闭 ()
.销毁 (rs)
conn.关闭 ()
.销毁 (conn)
.结束子程序
代码解析:
SQL语句 = "SELECT * FROM 学生表 WHERE 1=2":这个SQL语句会返回一个“空”的记录集,但它包含了“学生表”的完整结构(字段信息),这是为了获取一个可以添加数据的“模板”。rs.添加 ():在记录集的末尾添加一个“空行”。rs.取字段 ("字段名").值 = ...:为这个“空行”的各个字段赋值。rs.更新 ():将内存中修改过的记录保存到数据库中,这一步是必须的!
第六章:修改和删除数据
修改和删除数据通常需要先定位到特定的记录,我们可以使用 WHERE 子句来找到要操作的记录。
A. 修改数据
使用 UPDATE SQL语句,或者通过记录集找到记录后修改并更新。
代码示例(通过记录集修改):
.版本 2
.子程序 修改学生数据
.参数 学号, 文本型
.参数 新姓名, 文本型
.局部变量 conn, ADO连接
.局部变量 rs, ADO记录集
.局部变量 连接字符串, 文本型
.局部变量 SQL语句, 文本型
conn.创建 ("ADODB.Connection")
rs.创建 ("ADODB.Recordset")
连接字符串 = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\易语言项目\学生信息.accdb;"
conn.打开 (连接字符串)
' 1. 查找要修改的记录
SQL语句 = "SELECT * FROM 学生表 WHERE 学号 = '" + 学号 + "'"
rs.打开 (SQL语句, conn, 3, 3)
' 2. 判断是否找到记录
.(rs.记录数 > 0)
' 找到记录,开始修改
rs.移动第一个 () ' 移动到第一条记录
rs.取字段 ("姓名").值 = 新姓名
rs.更新 () ' 保存修改
信息框 ("学生 " + 学号 + " 的姓名已修改为 " + 新姓名, 0, )
.否则
信息框 ("未找到学号为 " + 学号 + " 的学生!", 0, )
.如果结束
' 3. 关闭并释放
rs.关闭 ()
.销毁 (rs)
conn.关闭 ()
.销毁 (conn)
.结束子程序
B. 删除数据
使用 DELETE FROM SQL语句。
代码示例:
.版本 2
.子程序 删除学生数据
.参数 学号, 文本型
.局部变量 conn, ADO连接
.局部变量 连接字符串, 文本型
.局部变量 SQL语句, 文本型
conn.创建 ("ADODB.Connection")
连接字符串 = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\易语言项目\学生信息.accdb;"
conn.打开 (连接字符串)
' 1. 构造删除SQL语句
SQL语句 = "DELETE FROM 学生表 WHERE 学号 = '" + 学号 + "'"
' 2. 执行SQL语句
' 注意:这里直接用连接对象的 Execute 方法执行,不需要记录集
conn.执行 (SQL语句)
信息框 ("学号为 " + 学号 + " 的学生已删除!", 0, )
' 3. 关闭并释放
conn.关闭 ()
.销毁 (conn)
.结束子程序
第七章:完整实例 - 简单的学生信息管理系统
下面我们将所有知识点整合到一个简单的窗口程序中。
窗口设计:
- 一个
编辑框,用于输入学号,命名为edt_学号。 - 一个
编辑框,用于输入姓名,命名为edt_姓名。 - 一个
编辑框,用于输入年龄,命名为edt_年龄。 - 一个
编辑框,用于输入班级,命名为edt_班级。 - 四个
按钮,分别命名为btn_添加,btn_查询,btn_修改,btn_删除。 - 一个
列表框,用于显示所有学生信息,命名为lst_学生列表。
完整代码:
.版本 2
.程序集 窗口程序集_启动窗口
.程序集变量 conn, ADO连接
.程序集变量 rs, ADO记录集
.子程序 __启动窗口_创建完毕
' 初始化连接
.如果真 (初始化数据库 () = 假)
信息框 ("数据库连接失败,程序将退出。", 0, )
结束 ()
.如果真结束
' 加载所有学生数据
刷新学生列表 ()
.子程序 __启动窗口_将被销毁
' 关闭数据库连接
关闭数据库 ()
.子程序 初始化数据库, , 公开
.局部变量 连接字符串, 文本型
conn.创建 ("ADODB.Connection")
rs.创建 ("ADODB.Recordset")
连接字符串 = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\易语言项目\学生信息.accdb;"
.如果真 (conn.打开 (连接字符串) = 假)
返回 (假)
.如果真结束
返回 (真)
.子程序 关闭数据库, , 公开
.判断开始 (rs.是否已打开 ())
rs.关闭 ()
.判断结束
.判断开始 (conn.是否已打开 ())
conn.关闭 ()
.判断结束
.销毁 (rs)
.销毁 (conn)
.子程序 刷新学生列表, , 公开
lst_学生列表.清空 ()
.如果真 (rs.是否已打开 ())
rs.关闭 ()
.如果真结束
rs.打开 ("SELECT * FROM 学生表", conn, 3, 3)
.计次循环首 (rs.记录数, i)
lst_学生列表.加入项目 (rs.取值 ("学号") + " | " + rs.取值 ("姓名") + " | " + 到文本 (rs.取值 ("年龄")) + " | " + rs.取值 ("班级"))
rs.移动下一个 ()
.计次循环尾 ()
.子程序 btn_添加_被单击
.(edt_学号.内容 = "" 或 edt_姓名.内容 = "")
信息框 ("学号和姓名不能为空!", 0, )
返回 ()
.如果结束
rs.打开 ("SELECT * FROM 学生表 WHERE 1=2", conn, 3, 3)
rs.添加 ()
rs.取字段 ("学号").值 = edt_学号.内容
rs.取字段 ("姓名").值 = edt_姓名.内容
rs.取字段 ("年龄").值 = 到数值 (edt_年龄.内容)
rs.取字段 ("班级").值 = edt_班级.内容
rs.更新 ()
信息框 ("添加成功!", 0, )
刷新学生列表 ()
' 清空输入框
edt_学号.内容 = ""
edt_姓名.内容 = ""
edt_年龄.内容 = ""
edt_班级.内容 = ""
.子程序 btn_查询_被单击
lst_学生列表.清空 ()
.(edt_学号.内容 ≠ "")
SQL语句 = "SELECT * FROM 学生表 WHERE 学号 = '" + edt_学号.内容 + "'"
.否则
SQL语句 = "SELECT * FROM 学生表"
.如果结束
rs.打开 (SQL语句, conn, 3, 3)
.计次循环首 (rs.记录数, i)
lst_学生列表.加入项目 (rs.取值 ("学号") + " | " + rs.取值 ("姓名") + " | " + 到文本 (rs.取值 ("年龄")) + " | " + rs.取值 ("班级"))
rs.移动下一个 ()
.计次循环尾 ()
.子程序 btn_修改_被单击
.(edt_学号.内容 = "")
信息框 ("请先输入要修改的学生学号!", 0, )
返回 ()
.如果结束
rs.打开 ("SELECT * FROM 学生表 WHERE 学号 = '" + edt_学号.内容 + "'", conn, 3, 3)
.(rs.记录数 > 0)
rs.移动第一个 ()
rs.取字段 ("姓名").值 = edt_姓名.内容
rs.取字段 ("年龄").值 = 到数值 (edt_年龄.内容)
rs.取字段 ("班级").值 = edt_班级.内容
rs.更新 ()
信息框 ("修改成功!", 0, )
刷新学生列表 ()
.否则
信息框 ("未找到该学号的学生!", 0, )
.如果结束
.子程序 btn_删除_被单击
.(edt_学号.内容 = "")
信息框 ("请先输入要删除的学生学号!", 0, )
返回 ()
.如果结束
.(信息框 ("确定要删除学号为 " + edt_学号.内容 + " 的学生吗?", 4, "确认") = 6)
conn.执行 ("DELETE FROM 学生表 WHERE 学号 = '" + edt_学号.内容 + "'")
信息框 ("删除成功!", 0, )
刷新学生列表 ()
.如果结束
第八章:常见问题与注意事项
- 路径问题:数据库文件的路径必须是完整路径,否则易语言找不到文件,如果希望程序可以移动,可以使用“通用对话框”组件让用户选择数据库文件,或者将数据库文件和你的易语言程序放在同一个目录下,然后使用
取运行目录 () + "\学生信息.accdb"来获取路径。 - SQL注入:在拼接SQL语句时(如
WHERE 学号 = '" + 学号 + "'"),如果用户输入了恶意的SQL代码,可能会导致数据库安全风险,对于正式项目,应使用参数化查询,但在易语言中实现较为复杂,初学者暂时可以忽略,但要避免在输入框中使用单引号等特殊字符。 - 数据类型不匹配:向“年龄”这样的数字字段插入文本,或者向文本字段插入超长内容,都会导致错误,请确保赋值的类型和字段定义的类型一致。
- 未关闭连接:程序运行后,如果数据库文件没有被关闭(被其他程序占用),可能会导致下次程序启动时连接失败,养成用完就关的好习惯。
- 异常处理:所有数据库操作都可能失败(如文件不存在、权限不足等),使用
.如果真...结构可以捕获一些运行时错误,让你的程序更健壮。
希望这份详细的教程能帮助你掌握在易语言中操作Access数据库的基本技能!多练习,多尝试,你很快就能熟练运用了。
