易语言-基础-外部数据库

外部数据库:

外部数据库组件:

ODBC与ADO :

SQL语言

外部数据库组件:

数据库连接和记录集:

记录集组件:

示例连接MYSQL数据库:

复制代码
.版本 2
.支持库 mysql
.支持库 EThread

.程序集 窗口程序集_启动窗口
.程序集变量 数据库, 整数型
.程序集变量 记录集, 整数型
.程序集变量 输入有效, 逻辑型
.程序集变量 连接线程句柄, 整数型
.程序集变量 连接结果, 整数型
.程序集变量 已放弃连接, 逻辑型

.子程序 _按钮_连接数据库_被单击
.局部变量 等待结果, 逻辑型
.局部变量 超时毫秒, 整数型
.局部变量 超时说明, 文本型

超时毫秒 = 5000  ' ★这里就是"连接超时",单位毫秒
超时说明 = "5"

' 1. 已有旧连接先释放,避免反复点按钮造成句柄泄漏
.如果真 (数据库 ≠ 0)
    断开MySql (数据库)
    数据库 = 0
.如果真结束

' 2. 复位状态,启动连接线程
已放弃连接 = 假
连接结果 = 0

.如果真 (取反 (启动线程 (&线程_连接数据库, , 连接线程句柄)))
    信息框 ("创建连接线程失败!", 0, , )
    返回 ()
.如果真结束

' 3. 主线程最多等 超时毫秒,超时不卡界面
等待结果 = 等待线程 (连接线程句柄, 超时毫秒)

.如果真 (取反 (等待结果))
    已放弃连接 = 真
    信息框 ("连接数据库超时(超过 " + 超时说明 + " 秒无响应)!" + #换行符 + "请检查 192.168.15.4 是否可达、防火墙是否放行 3306 端口。", 0, , )
    返回 ()
.如果真结束

' 4. 线程已在超时前正常结束
关闭线程句柄 (连接线程句柄)

.如果 (连接结果 = 1)
    .如果真 (执行SQL语句 (数据库, "SET NAMES 'GBK'") = 假)
        信息框 ("连接成功,但设置字符集失败!", 0, , )
        返回 ()
    .如果真结束
    信息框 ("数据库连接成功!", 0, , )
.否则
    信息框 ("数据库连接失败!请检查服务器端是正常否开启、用户名、密码、库名是否正确!", 0, , )
.如果结束


.子程序 线程_连接数据库
.局部变量 临时句柄, 整数型

临时句柄 = 连接MySql ("192.168.15.4", "test", "123456", "testdb", 3306)

' 阻塞期间主线程已判超时,则本次连接作废并立即释放,防止句柄泄漏
.如果真 (已放弃连接 = 真)
    .如果真 (临时句柄 ≠ 0)
        断开MySql (临时句柄)
    .如果真结束
    返回 ()
.如果真结束

.如果 (临时句柄 = 0)
    连接结果 = 2
.否则
    数据库 = 临时句柄
    连接结果 = 1
.如果结束


.子程序 _按钮_查询数据_被单击
.局部变量 用户名, 文本型
.局部变量 年龄, 文本型
.局部变量 SQL, 文本型
.局部变量 结果文本, 文本型
.局部变量 总行数, 整数型
.局部变量 i, 整数型

.如果真 (数据库 = 0)
    信息框 ("请先连接数据库!", 0, , )
    返回 ()
.如果真结束

编辑框_显示结果.内容 = ""
结果文本 = ""

SQL = "SELECT * FROM users"
.如果真 (执行SQL语句 (数据库, SQL) = 假)
    信息框 ("查询失败!", 0, , )
    返回 ()
.如果真结束

记录集 = 取记录集 (数据库)
.如果真 (记录集 = 0)
    信息框 ("暂无数据!", 0, , )
    返回 ()
.如果真结束

总行数 = 取记录集行数 (记录集)
.如果真 (总行数 ≤ 0)
    释放记录集 (记录集)
    记录集 = 0
    信息框 ("没有数据!", 0, , )
    返回 ()
.如果真结束

.如果真 (到首行 (记录集))
    .计次循环首 (总行数, i)
        读字段值 (记录集, "name", 用户名)
        读字段值 (记录集, "age", 年龄)
        结果文本 = 结果文本 + "用户名:" + 用户名 + "    年龄:" + 年龄 + #换行符
        .如果真 (i < 总行数)
            到下一行 (记录集)
        .如果真结束

    .计次循环尾 ()
.如果真结束

编辑框_显示结果.内容 = 结果文本

释放记录集 (记录集)
记录集 = 0


.子程序 _按钮_插入数据_被单击
.局部变量 SQL, 文本型
.局部变量 用户名, 文本型
.局部变量 年龄, 文本型
.局部变量 是否正在执行, 逻辑型, 静态
.局部变量 影响行数, 整数型
.局部变量 重复检查SQL, 文本型
.局部变量 重复记录集, 整数型
.局部变量 已存在数量, 整数型
.局部变量 计数文本, 文本型

' 防重复点击保护
.如果真 (是否正在执行 = 真)
    返回 ()
.如果真结束
是否正在执行 = 真

.如果真 (数据库 = 0)
    信息框 ("请先连接数据库!", 0, , )
    是否正在执行 = 假
    返回 ()
.如果真结束

' ========== 1. 获取用户名(循环直到输入有效或取消) ==========
输入有效 = 假
.判断循环首 (输入有效 = 假)
    .如果真 (输入框 ("请输入用户名:", "新增用户", , 用户名, , ) = 假)
        ' 用户点击了取消
        是否正在执行 = 假
        返回 ()
    .如果真结束

    用户名 = 删全部空 (用户名)  ' 去除空格

    .如果 (用户名 = "")
        信息框 ("用户名不能为空,请重新输入!", 0, , )
    .否则
        输入有效 = 真  ' 标记为有效,退出循环
    .如果结束


.判断循环尾 ()

' ========== 2. 获取年龄(循环直到输入有效或取消) ==========
输入有效 = 假
.判断循环首 (输入有效 = 假)
    .如果真 (输入框 ("请输入年龄:", "新增用户", , 年龄, , ) = 假)
        ' 用户点击了取消
        是否正在执行 = 假
        返回 ()
    .如果真结束

    年龄 = 删全部空 (年龄)

    .如果 (年龄 = "")
        信息框 ("年龄不能为空,请重新输入!", 0, , )
    .否则
        输入有效 = 真
    .如果结束

.判断循环尾 ()

' 先转义输入内容,避免SQL注入
用户名 = 删全部空 (子文本替换 (用户名, "'", "''", , , 假))
年龄 = 删全部空 (子文本替换 (年龄, "'", "''", , , 假))

' ========== 重复用户名校验代码 ==========
重复检查SQL = "SELECT COUNT(*) FROM users WHERE name='" + 用户名 + "'"
.如果真 (执行SQL语句 (数据库, 重复检查SQL) = 假)
    信息框 ("校验用户名失败!", 0, , )
    是否正在执行 = 假
    返回 ()
.如果真结束
重复记录集 = 取记录集 (数据库)
.如果真 (重复记录集 ≠ 0)
    读字段值 (重复记录集, 0, 计数文本)
    已存在数量 = 到整数 (计数文本)
    释放记录集 (重复记录集)
    重复记录集 = 0
    .如果真 (已存在数量 > 0)
        信息框 ("用户名【" + 用户名 + "】已经存在,不允许重复添加!", 0, , )
        是否正在执行 = 假
        返回 ()
    .如果真结束

.如果真结束

' 执行插入
SQL = "INSERT INTO users (name, age) VALUES ('" + 用户名 + "', '" + 年龄 + "')"

.如果真 (执行SQL语句 (数据库, SQL) = 真)
    影响行数 = 取影响行数 (数据库)
    信息框 ("插入成功!共插入" + 到文本 (影响行数) + "条记录", 0, , )
    _按钮_查询数据_被单击 ()  ' 刷新列表
    是否正在执行 = 假
    返回 ()
.如果真结束

信息框 ("插入失败!", 0, , )
是否正在执行 = 假


.子程序 _按钮_更新数据_被单击
.局部变量 SQL, 文本型
.局部变量 原用户名, 文本型
.局部变量 新用户名, 文本型
.局部变量 新年龄, 文本型
.局部变量 影响行数, 整数型
.局部变量 是否正在执行, 逻辑型, 静态

.如果真 (数据库 = 0)
    信息框 ("请先连接数据库!", 0, , )
    返回 ()
.如果真结束

输入有效 = 假
.判断循环首 (输入有效 = 假)
    .如果真 (输入框 ("请输入原用户名:", "新增用户", , 原用户名, , ) = 假)
        ' 用户点击了取消
        是否正在执行 = 假
        返回 ()
    .如果真结束

    原用户名 = 删全部空 (原用户名)

    .如果 (原用户名 = "")
        信息框 ("原用户名不能为空,请重新输入!", 0, , )
    .否则
        输入有效 = 真  ' 标记为有效,退出循环
    .如果结束


.判断循环尾 ()

输入有效 = 假
.判断循环首 (输入有效 = 假)
    .如果真 (输入框 ("请输入要修改的【新用户名】:", "更新用户", , 新用户名, , ) = 假)
        ' 用户点击了取消
        是否正在执行 = 假
        返回 ()
    .如果真结束

    新用户名 = 删全部空 (新用户名)

    .如果 (新用户名 = "")
        信息框 ("新用户名不能为空,请重新输入!", 0, , )
    .否则
        输入有效 = 真
    .如果结束

.判断循环尾 ()

输入有效 = 假
.判断循环首 (输入有效 = 假)
    .如果真 (输入框 ("请输入要修改的【新年龄】:", "更新用户", , 新年龄, , ) = 假)
        ' 用户点击了取消
        是否正在执行 = 假
        返回 ()
    .如果真结束

    新年龄 = 删全部空 (新年龄)

    .如果 (新年龄 = "")
        信息框 ("新年龄名不能为空,请重新输入!", 0, , )
    .否则
        输入有效 = 真
    .如果结束

.判断循环尾 ()

原用户名 = 删全部空 (子文本替换 (原用户名, "'", "''", , , 假))
新用户名 = 删全部空 (子文本替换 (新用户名, "'", "''", , , 假))
新年龄 = 删全部空 (子文本替换 (新年龄, "'", "''", , , 假))

SQL = "UPDATE users SET name='" + 新用户名 + "', age='" + 新年龄 + "' WHERE name='" + 原用户名 + "'"

.如果真 (执行SQL语句 (数据库, SQL) = 真)
    影响行数 = 取影响行数 (数据库)
    .如果真 (影响行数 = 0)
        信息框 ("未找到用户【" + 原用户名 + "】!", 0, , )
        返回 ()
    .如果真结束
    信息框 ("更新成功!共更新" + 到文本 (影响行数) + "条记录", 0, , )
    _按钮_查询数据_被单击 ()
.如果真结束
.如果真 (执行SQL语句 (数据库, SQL) = 假)
    信息框 ("更新失败!", 0, , )
.如果真结束


.子程序 _按钮_删除数据_被单击
.局部变量 SQL, 文本型
.局部变量 用户名, 文本型
.局部变量 确认, 整数型
.局部变量 影响行数, 整数型
.局部变量 是否正在执行, 逻辑型, 静态

.如果真 (数据库 = 0)
    信息框 ("请先连接数据库!", 0, , )
    返回 ()
.如果真结束

输入有效 = 假
.判断循环首 (输入有效 = 假)
    .如果真 (输入框 ("请输入要删除的用户名:", "删除用户", , 用户名, , ) = 假)
        ' 用户点击了取消
        是否正在执行 = 假
        返回 ()
    .如果真结束

    用户名 = 删全部空 (用户名)
    .如果 (用户名 = "")
        信息框 ("用户名不能为空,请重新输入!", 0, , )
    .否则
        输入有效 = 真
    .如果结束

.判断循环尾 ()

确认 = 信息框 ("确定删除用户【" + 用户名 + "】吗?", 4 + 256, "确认", )
.如果真 (确认 = 7)
    返回 ()
.如果真结束

用户名 = 删全部空 (子文本替换 (用户名, "'", "''", , , 假))
SQL = "DELETE FROM users WHERE name='" + 用户名 + "'"

.如果真 (执行SQL语句 (数据库, SQL) = 真)
    影响行数 = 取影响行数 (数据库)
    .如果真 (影响行数 = 0)
        信息框 ("未找到用户【" + 用户名 + "】!", 0, , )
        返回 ()
    .如果真结束
    信息框 ("删除成功!共删除" + 到文本 (影响行数) + "条记录", 0, , )
    _按钮_查询数据_被单击 ()
.如果真结束
.如果真 (执行SQL语句 (数据库, SQL) = 假)
    信息框 ("删除失败!", 0, , )
.如果真结束
相关推荐
这个DBA有点耶7 小时前
从症状到根因:数据库监控指标的分层方法与静态/动态阈值策略
数据库·mysql·代码规范
SelectDB8 小时前
时间旅行与快照能力速查:Doris 侧三条落地路径
大数据·数据库·数据分析
SelectDB8 小时前
云数仓成本结构拆解速查:五层计费 vs Doris / 托管形态
大数据·数据库·数据分析
SelectDB8 小时前
什么场景能承接与建议保留:Doris vs Snowflake 边界速查
大数据·数据库·数据分析
这个DBA有点耶10 小时前
DELETE没删多少数据,表却越来越大——InnoDB删除空洞与页合并失效的根因
数据库·mysql·代码规范
ly768913 小时前
PostgreSQL 备份恢复策略:pg_basebackup、WAL 归档与 PITR 在企业 Java 系统中的落地
java·数据库·postgresql·pitr·pg_basebackup·wal 归档
小羊没烦恼!14 小时前
Ajax与JSON的一些总结
android·java·前端·数据库·mysql·算法·okhttp
注塑机数据采集联网14 小时前
如何解决注塑机数据采集联网对接MES系统数据WiFi传输数据不稳问题
大数据·数据库·物联网·数据挖掘·数据分析
黄俊懿14 小时前
【架构师从入门到进阶】第六章:服务集群优化——第八节:线程数公式
java·服务器·数据库·分布式·性能优化·架构·系统架构