杰瑞科技汇

易语言Access怎么连接数据库?

易语言操作Access数据库教程

第一章:准备工作

在开始之前,你需要准备好以下几样东西:

易语言Access怎么连接数据库?-图1
(图片来源网络,侵删)
  1. 易语言:确保你已经安装了易语言,本教程以较新版本为例,但大部分代码也适用于旧版本。
  2. Microsoft Access:你需要一个Access数据库文件,如果你没有,可以自己创建一个。
    • 打开Microsoft Access。
    • 选择“空白数据库”。
    • 创建一个名为 学生信息.accdb 的文件。
    • 在“创建”选项卡中,点击“表设计”。
    • 设计如下字段和属性:
      • 字段名: ID, 数据类型: 自动编号, 主键: 是
      • 字段名: 学号, 数据类型: 文本, 字段大小: 20
      • 字段名: 姓名, 数据类型: 文本, 字段大小: 10
      • 字段名: 年龄, 数据类型: 数字, 字段大小: 整型
      • 字段名: 班级, 数据类型: 文本, 字段大小: 20
    • 保存表名为 学生表
  3. 数据库文件路径:记住你创建的 学生信息.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)
.结束子程序

代码解析:

易语言Access怎么连接数据库?-图2
(图片来源网络,侵删)
  1. .局部变量 conn, ADO连接:声明一个名为 conn 的局部变量,类型为 ADO连接
  2. conn.创建 ("ADODB.Connection"):在内存中创建一个ADO连接对象。
  3. 连接字符串:这是连接数据库的关键。
    • Provider=Microsoft.ACE.OLEDB.12.0:指定提供者,对于 .accdb 格式的Access数据库(Access 2007及以上),使用这个,如果是旧的 .mdb 格式,使用 Provider=Microsoft.Jet.OLEDB.4.0
    • Data Source=...:指定数据库文件的完整路径。
  4. conn.打开 (连接字符串):执行连接操作,如果返回 ,表示连接失败。
  5. 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)
.结束子程序

代码解析:

  1. rs.创建 ("ADODB.Recordset"):创建一个记录集对象。
  2. SQL语句 = "SELECT * FROM 学生表"SELECT * 表示选择所有字段,FROM 学生表 表示从“学生表”中查询。
  3. rs.打开 (...):执行SQL查询,并将结果填充到记录集 rs 中。
  4. .计次循环首 (rs.记录数, i)rs.记录数 属性返回查询结果的总记录数,我们可以用它来循环遍历每一行数据。
  5. rs.取值 ("字段名"):从当前记录中获取指定字段的值。
  6. rs.移动下一个 ():将记录集的指针移动到下一条记录,循环结束后,指针会自动移动到最后一条之后。

第五章:增加数据

向数据库中插入新数据,使用 INSERT INTO SQL语句,并通过 记录集添加 ()更新 () 方法来完成。

易语言Access怎么连接数据库?-图3
(图片来源网络,侵删)

代码示例:

.版本 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)
.结束子程序

代码解析:

  1. SQL语句 = "SELECT * FROM 学生表 WHERE 1=2":这个SQL语句会返回一个“空”的记录集,但它包含了“学生表”的完整结构(字段信息),这是为了获取一个可以添加数据的“模板”。
  2. rs.添加 ():在记录集的末尾添加一个“空行”。
  3. rs.取字段 ("字段名").值 = ...:为这个“空行”的各个字段赋值。
  4. 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, )
        刷新学生列表 ()
    .如果结束

第八章:常见问题与注意事项

  1. 路径问题:数据库文件的路径必须是完整路径,否则易语言找不到文件,如果希望程序可以移动,可以使用“通用对话框”组件让用户选择数据库文件,或者将数据库文件和你的易语言程序放在同一个目录下,然后使用 取运行目录 () + "\学生信息.accdb" 来获取路径。
  2. SQL注入:在拼接SQL语句时(如 WHERE 学号 = '" + 学号 + "'"),如果用户输入了恶意的SQL代码,可能会导致数据库安全风险,对于正式项目,应使用参数化查询,但在易语言中实现较为复杂,初学者暂时可以忽略,但要避免在输入框中使用单引号等特殊字符。
  3. 数据类型不匹配:向“年龄”这样的数字字段插入文本,或者向文本字段插入超长内容,都会导致错误,请确保赋值的类型和字段定义的类型一致。
  4. 未关闭连接:程序运行后,如果数据库文件没有被关闭(被其他程序占用),可能会导致下次程序启动时连接失败,养成用完就关的好习惯。
  5. 异常处理:所有数据库操作都可能失败(如文件不存在、权限不足等),使用 .如果真... 结构可以捕获一些运行时错误,让你的程序更健壮。

希望这份详细的教程能帮助你掌握在易语言中操作Access数据库的基本技能!多练习,多尝试,你很快就能熟练运用了。

分享:
扫描分享到社交APP
上一篇
下一篇