数据窗口控件(精选三篇)
数据窗口控件 篇1
数据窗口对象在应用程序中的应用, 是通过在窗口中添加数据窗口控件来实现的。数据窗口控件和数据窗口对象的组合, 是应用程序访问和操作数据库的主要手段。应用程序是通过数据窗口控件与数据库窗口对象交互的, 如果要想在数据窗口控件中显示数据, 就要创建应用程序与数据库的连接。在应用程序中建立数据库连接的过程如下: (1) 将事务对象设置为相应的值; (2) 与数据库连接; (3) 为数据窗口控件设置事务对象; (4) 进行数据库处理; (5) 断开与数据库的连接。
1 事务对象
事务对象是PowerBuilder程序与数据库之间传递信息的一个结构变量, 共有15个属性元素, 访问数据库前, 必须先为这个结构变量准备好访问数据库的参数, 然后才能通过这个结构变量与数据库连接, 完成所需的数据库操作。
一般情况下最好使用PowerBuilder提供的事务对象SQL-CA, 这样可以免除自己定义事务对象的麻烦。例如:SQLCA.DBMS="ODBC";
SQLCA.Database="DB01"。
SQLCA.AutoCommit=False
2 为数据窗口控件设置事务对象
为了通过DBMS或ODBC的数据库来使用数据窗口控件, 必须初始化一个事务对象, 如SQLCA, 然后连接到数据库上, 在进行数据库连接之后, 要在数据窗口控件访问数据库之前将事务对象赋值给数据窗口控件。
2.1 使用SetTrans函数
SetTrans函数用来将一个特定的事务对象复制到数据窗口控件的内部事务对象中。当数据窗口要访问数据库时, 如执行Update函数, 数据窗口会发出一个CONNECT命令, 处理相应的数据访问, 然后再发出一个内部的DISCONNECT命令, 断开与数据库的连接。
2.2 使用SetTransObject函数
SetTransObject函数用来在程序中指定数据窗口控件, 使用某个事物对象控件。在应用程序中使用SetTransObject函数的性能优于使用SetTrans函数的性能。当在程序中使用SetTransObject函数时应按顺序包括下列语句:
CONNECT
SetTransObject
Retrieve或Update
COMMIT或ROLLBACK
DISCONNECT
例如, 下列语句使用SetTransObject函数将数据窗口控件dw_emp与SQLCA连接起来:
dw_emp.SetTransObject (SQLCA)
3 检索和更新数据
使用数据窗口检索数据库的过程如下: (1) 创建一个事务对象变量; (2) 使用CONNECT语句把事务对象与数据库连接; (3) 使用SetTransObject () 函数把具体的事务对象与数据窗口控件关联; (4) 执行检索操作; (5) 断开与数据库的连接; (6) 删除自己创建的事务对象。
(1) 检索数据。数据窗口控件通过事务对象与数据库建立关联后, 就可以由所关联的数据窗口对象检索数据了, 检索数据使用PowerBuilder提供的Retrieve () 函数。如果在数据窗口对象中声明了检索参数, 可以在这个函数调用中给出具体的参数值, Retrieve () 函数的返回值是从数据库检索到的行数, 如果没有匹配结果, 返回值是0;如果检索中出现错误, 则返回值是-1。
(2) 更新数据。当对数据窗口中的数据修改后, 需要使用Update () 函数将所做的修改写回到数据库中, 如果执行成功, Update () 函数返回值是1;如果失败, 则返回值是-1。
Update () 函数可以触发的数据窗口事件如下: (1) DBError:执行Update () 函数失败时发生; (2) UpdateStart:执行Update () 函数开始时发生, 可用于对数据是否开始更新加以可视化提示信息; (3) UpdateEnd:执行Update () 函数完成时发生, 可用于删除由UpdateStart事件放置的可视化提示信息。
4 结束语
数据窗口是PowerBuilder的特有组件, 应用程序通过数据窗口控件和数据库连接, 从而实现对数据库的检索和更新操作。
参考文献
[1]徐松林.PowerBuilder数据库应用开发教程[M].北京:清华大学出版社, 2003.
[2]李春葆, 曾平.Sql Server2000应用系统开发教程[M].北京:清华大学出版社, 2007.
数据窗口控件 篇2
为下拉式数据窗口建立缓冲区
张健姿 01-6-22 下午 04:47:33
同 其 他4GL 工具 如Delphi,Visual Basic 的 早 期 版 本 一 样,PowerBuilder4.0 以 前 所 生成 的 可 执 行 文 件 使 用 是 伪 代 码, 也 称P-Code(pseudo-code),P-Code 在 运 行 时 是 被 解 释 执 行 的, 更 准 确 地 说,P-Code 使 用 的是 虚 拟 机 指 令, 为 不 同 的 宿 主 机 提 供 共 享 的 操 作 命令。 在 运 行 时, 操 作 系 统 根 据 不 同平台 解 释 实 现P-Code 指 令。 一 条P-Code 指 令 可 以 替 代 几 条 机 器 代 码 指 令, 这样 就 减 少 了 执 行 代 码 的 大 小, 不 过 却 以 应 用 的 执 行 效率 为 代 价。 一 般 的,P-Code 的 执 行 速 度 要 慢 于 编 译 代 码,但 文 件 的 大 小 却 小 于 编 译 代 码。 PowerBuilder 5.0 引入 了 生 成 全 编 译 的 可 执 行 代 码 的 功 能, 以 提 高 运 行 效率, 但 同 时 它 也 保 留 了 使 用P-Code 为 可 执 行 文 件 的 功能。 使 用P-Code 的 应 用 程 序 包 括 执 行 文 件.EXE 和PowerBuilder 的动 态 连 接 库.PBD, 而 编 译 代 码 所 产 生 的 执 行 文 件 为.EXE 文件 和 动 态 连 接 库DLL。 什 么 是 编 译 代 码 编 译 代 码 首先 以P-Code 为 基 础,PowerBuilder 首 先 根 据P-Code 创 建C 代 码, 然 后将C 代 码 编 译 成 为 机 器 代 码 的 执 行 文 件。 编 译 后 的 执行 程 序 中, 所 有 指 令 都 是 实 际 的 机 器 代 码。 这 就 意 味着 这 样 的 执 行 文 件 的 大 小 将 远 大 于P-Code。 使 用 编 译 代码 仍 需 要PowerBuilder 的 运 行 库,PowerBuilder 在 执 行 机 器 代 码时, 仍 使 用 共 享 的 函 数 库, 这 样 做 的 目 的 主 要 是 为 了节 省 内 存。 使 用 动 态 连 接 库 可 以 避 免 将 所 有 的 功 能 函数 都 写 在 一 个 可 执 行 文 件 中, 以 减 小 可 执 行 文 件 的 体积。 而 在Windows 环 境 中, 内 存 中 留 有 一 份DLL 的 拷 贝 可 以为 多 个 应 用 程 序 使 用。 此 外PowerBuilder 5.0 还 压 缩 了 一 些DLL 中 函 数 的 大 小, 现 在32 位平台 上 运 行 时 只 需7 个 动 态 连接 库, 解 压 缩 后 为4.5M。 应 用 所 需 要 的 其 它DLL 如 用 于 数据 库 访 问、分 布 式PowerBuilder, 及RTF 编 辑 器 等 可 在 用 到 时动 态 地 装 入。 编 译 代 码 创 建 编 译 代 码的 创 建 有 以 下 几 个 步 骤: 在 开 发 的 过 程 中,PowerScript. 首 先 被翻 译 成 了P-Code, 当 您 在Script. 编 辑 器 中 编 写 完 一 个 事 件 或函 数 的 代 码 返 回 窗 口 时, 系 统 就 会 自 动 地 翻 译 这 一 段Script. 代 码。 当 您 在 工 程 画 笔 中 创 建P-Code 可 执 行 文 件 时,PowerBuilder 将 为 不 同 的PBL 中 不 同 对 象 之 间 的 引 用 建 立 起 连 接, 并将 这 些 对 象 拷 贝 到 指 定 的EXE 或PBD 文 件 中。 这 是 一 个 相对 较 快 的 过 程。 接 下 来P-Code 将被 翻 译 成 为C 语 言 的 语 句。 在 这 一 过 程 中, 工 程 画 笔 窗口 下 面 的 微 帮 助 中 将 显 示“compiling ... ” 的 字 样, 这一 过 程 约 占 全 部 编 译 时 间 的10 %。 然 后 是 将C 代 码 编 译和 链 接 成 为 机 器 代 码, 形 成 可 执 行 文 件 和 动 态 连 接库, 在 这 一 步 骤 中, 微 帮 助 显 示 的 是“generating...”,这 一 编 译 过 程 最 费 时 间, 将 占 约90 % 的 编 译 时 间。 通 过 上 面 的介 绍, 我 们 看 到 创 建 机 器 代 码 所 用 的 时 间 比 产 生P-Code 的 用 时 要 多 得 多, 因 为 后 者 只 是 一 个 二 进 制 代 码 搬 运的 过 程。 因 此 在 开 发 过 程 中, 我 们 一 般 使 用 的 主 要 是P-Code,只 是 在 最 终 交 付 用 户 使 用 时, 才 根 据 实 际 情 况 选 择 是否 创 建 机 器 代 码。 编 译 代 码的 优 势: 在 以 下 这 几 个 方 面, 将PowerScript. 代码 编 译 成 为 机 器 代 码 将 得 到 较 快 的 运 行 速 度: ・ 循 环 结 构 ・ 浮 点 运 算 ・ 整 数 运 算 ・ 函 数 调 用 但 是 在 另 外的 一 些 方 面, 编 译 成 为 机 器 代 码 并 不 能 使 运 行 速 度 明显 加 快, 如 涉 及 图 形 用 户 界 面, 数 据 库 访 问, 小 数 运算, 字 符 串 操 作 等。 在 有 些 情 况 下, 两 种 代 码 的 速 度是 相 同 的, 如 对 资 源 的 调 用 和 对 数 据 窗 口 的 执 行。 在这 些 情 况 下, 您 就 无 法 通 过 使 用 编 译 代 码 来 提 高 运 行的 速 度 了。 如 果 您 的 应用 是 以 执 行 自 身 的 代 码 为 主, 例 如 应 用 中 较 多 的 是 同一 条 代 码 被 反 复 执 行( 如 循 环) 或 是 编 写 的 代 码 主 要用 来 进 行 数 学 运 算, 这 样 的 应 用 应 当 使 用 编 译 代 码。在 函 数 调 用 方 面, 使 用 机 器 码 也 要 比P-Code 快 得 多。 因此 如 果 您 的Script. 大 量 的 调 用 函 数 或 是 采 用 新 的 语 法 形式 调 用 事 件, 使 用 机 器 码 也 将 是 个 好 的 选 择。 不 过 您应 当 记 住, 编 译 代 码 的 执 行 文 件 大 小 要 比P-Code 大 得多, 因 为 一 条PowerScript. 代 码 将 有 可 能 编 译 成 为5 条 甚 至10 条C 代 码。 当 这 些C 代 码 被 编 译 后, 可 执 行 的 代 码 将 远远 大 于 相 应 的P-Code, 因 此 如 果 您 的 应 用 程 序 的 文 件 大小 是 您 应 用 的 首 要 考 虑 因 素, 或 者 您 的 应 用 较 多 的 是数 据 库 访 问, 那 您 应 当 选 择 使 用P-Code,
数据窗口控件 篇3
关键词:静态控件,预览,鼠标拖动,滚轮缩放
1、引言
预览是一种非常实用的功能, 在很多大型商业软件中, 都提供了页面或窗口预览的功能, 如文字办公软件Microsoft Word、打印机的打印选项页面预览等, 其主要功能是方便用户浏览整个页面的内容和布局, 帮助把握全局性和整体性。某设备检测应用程序需要设置图像控件窗口位置和尺寸, 而该图像控件由某厂商开发, 未提供拖动也缩放支持, 仅提供了一个对矩形窗口的顶点坐标设置函数。因此用户在操作时无法确切得知图像窗口设置的效果, 需要多次尝试才能摆放好, 十分不方便。为此需在VC++环境下设计一种窗口预览功能, 让用户在预览对话框中对代表图像控件窗口的静态控件进行缩放和拖动, 实现图像控件窗口的位置和尺寸的设置。静态控件对鼠标的拖动和滚轮缩放功能是通过控件子类化实现的, 本文将对其实现过程和思路进行介绍。
2、静态控件的拖动和缩放实现
子类化就是从已有类进行派生出子类, 经过子类化后可以增加新的功能。静态控件用于显示文本串, 框、矩形等, 一般不接收输入也不提供输出, 但是通过SS_NOTIFY风格创建后可以响应鼠标消息[1]。为实现静态控件能够响应鼠标的拖动和滚轮缩放, 首先定义新类Cst, 其从CStatic类派生而来, 之后可以通过添加消息响应函数添加新的功能[2,3,4]。
2.1 控件鼠标拖动功能
该功能指的是由用户在静态控件上按下鼠标左键, 鼠标开始滑动时, 静态控件会一直跟随鼠标移动, 而鼠标与静态控件的边框相对位置不发生变化, 从而实现静态控件在屏幕上的拖动效果。当用户松开左键, 或者鼠标离开静态窗口上方时, 静态控件停止跟随鼠标的滑动。
为实现此功能需要用到五种消息函数:WM_LBUTTONDOWN (鼠标左键按下) , WM_MOUSE-MOVE (鼠标滑动) 。WM_KILLFOCUS (失去焦点) , WM_LBUTTONUP (鼠标左键弹起) , WM_MOUSE-LEAVE (鼠标离开窗口消息) 。除WM_MOUSELEAVE是手动添加外, 其它消息都可以使用MFC Class Wizad对话框添加到程序中。其工作流程及代码如下:
1) 用户在静态控件上按下鼠标左键时, 保存下鼠标点击时的相对坐标值并确定此时为拖动状态, 设置变量press为1。为缩放控件还应采用SetFoucs () 函数使控件获得输入焦点;
2) 当用户滑动鼠标时, 鼠标移动点的坐标减去上述保存的鼠标左键坐标值即可得到控件各个顶点的坐标。为了鼠标离开控件窗口时能够触发WM_MOUSE-LEAVE消息, 需要使用TRACKMOUSEEVENT函数。响应鼠标拖动的代码如下:
3) 当鼠标左键弹起时取消移动的状态、控件失去焦点或鼠标离开控件窗口时, 均退出鼠标拖动状态。此时设置变量press为0, 鼠标滑动时静态控件不再响应拖动。
2.2 控件鼠标滚轮缩放功能
向Cst类中添加WM_MOUSEWHEEL消息, 然后在OnMouseWheel (UINT nFlags, short zDelta, CPoint pt函数中进行代码设计。使用鼠标滚轮设置控件尺寸十分方便, 如果zDelta大于零则使静态控件的宽度增加一定数值, zDelta小于零则减小一定数值。但控件尺寸包含高度和宽度两个方向, 仅靠一个鼠标滚轮不能同时实现。为此设计为当CTRL按下的状态, 即判断nFlags等于MK_CONTROL时用于鼠标滚轮改变高度。用户操作时鼠标左键先点击控件, 则在OnLButtonDown中使控件获取输入焦点状态用于选择缩放的静态控件。
3、预览对话框设计
如图1所示图像控件窗口的预览功能是在预览对话框中实现。添加两个静态控件分别用于代表图像控件的两个窗口。图中最大的静态控件边框代表整个应用程序的界面, 其大小相对实际的应用程序边框尺寸的二分之一, 用户拖动静态控件时上述代码已设计为不会超出边框范围。为保证应用程序每次启动时图像控件窗口位置和尺寸能够保持一致, 添加了序列化代码。在用户设置好静态控件的位置和尺寸后, 点击确定按钮后, 在OnOK () 函数中换算成图像控件窗口在应用程序中的实际坐标, 并传递给图像控件。
4、结束语
本文介绍了通过子类化的静态控件来响应鼠标拖动和滚轮缩放的功能, 并描述了将此功能在某图像控件窗口预览中的应用。通过此功能设计, 使得用户在预览窗口中调整静态控件与应用程序间的相对位置和尺寸, 经程序换算后即可得到实际的图像窗口的设置。与直接设置图像窗口顶点坐标的方式相比, 此法更易于用户操作和使用, 具有可视化的特点。
参考文献
[1]木林森, 高峰霞等.Visual C++6.0使用与开发[M].北京:清华大学出版社1998:184-190.
[2]顾光辉, 颜自坚.Visual C++中窗口子类化技术的实现及其应用[J].电脑编程技巧与维护2003 (9) :47-48.
[3]林勇.对VC中子类化技术的探讨[J].河北理工学院学报2005 (1) :51-54.
相关文章:
控件设计01-23
Component One控件使用心得01-23
VBActiveX控件在InTouch数据库访问中的应用01-23
巧用窗体控件完成表格规范化填写01-23
GridView控件01-23
dxp控件总结01-23
多功能控件01-23
网页申报控件安装方法与常见问题01-23
我眼中的春节作文01-23
作文:我眼中的“祭龙”01-23