当前位置: 首页 > news >正文

powerbuilder游标的使⽤

在某些PowerBuilder应⽤程序的开发中,您可能根本⽤不到游标这样⼀个对象。因为在其它⼯具开发中很多需⽤游标实现的⼯作,在PowerBuilder中却已有DataWin-dow来代劳了。事实上,DataWindow不仅可以替代游标进⾏从后台数据库查询多条记录的复杂操作,⽽且还远不⽌这些。但是同DataWindow和DataStore相⽐,游标也有其⾃⾝的优点,⽐如系统资源占⽤少,操作灵活,可根据需要定义变量类型如全局、实例或局部类型和访问类型如私有或公共等。

游标(Cursor)是一种用于处理数据库查询结果的机制。游标提供了一种方式来逐行处理查询结果,并对每一行数据进行操作。以下是一个使用游标的简单例子

如要声明⼀个叫作Cus-tomerCursor的游标⽤以查询地址在北京的客户的姓名、帐号及其余额,您可以编写如下代码:
DECLARE CustomerCursor CURSOR FOR
SELECT acct_no,name,balance
FROM customer
WHERE province="北京";
在游标的声明中有⼀点值得注意的是,如同其它变量的声明⼀样,声明游标的这⼀段代码⾏是不执⾏的,您不能将debug时的断点设在这⼀代码⾏上,也不能⽤IF...END IF语句来声明两个同名的游标,如下列的代码就是错误的。
IF Is_prov="北京"THEN
DECLARE CustomerCursor CURSOR FOR
SELECT acct_no,name,balance
FROM customer
WHERE province="北京";
ELSE
DECLARE CustomerCursor CURSOR FOR
SELECT acct_no,name,balance
FROM customer
WHERE province〈〉"北京";
END IF
打开游标
声明了游标后在作其它操作之前,必须打开它。打开游标是执⾏与其相关的⼀段SQL语句,例如打开上例声明的⼀个游标,我们只需键⼊:
OPEN CustomerCursor;
由于打开游标是对数据库进⾏⼀些SQL SELECT的操作,它将耗费⼀段时间,主要取决于您使⽤的系统性能和这条语句的复杂程度。如果执⾏的时间较长,可以考虑将屏幕上显⽰的⿏标改为hourglass。
提取数据
当⽤OPEN语句打开了游标并在数据库中执⾏了查询后,您不能⽴即利⽤在查询结果集中的数据。您必须⽤FETCH语句来取得数据。⼀条FETCH语句⼀次可以将⼀条记录放⼊程序员指定的变量中。事实上,FETCH语句是游标使⽤的核⼼。在DataWindow和DataStore中,执⾏了Retrieve()函数以后,查询的所有结果全部可以得到;⽽使⽤游标,我们只能逐条记录地得到查询结果。
已经声明并打开⼀个游标后,我们就可以将数据放⼊任意的变量中。在FETCH语句中您可以指定游标的名称和⽬标变量的名称。如下例:
FETCH CustmerCur-sor
INTO:ls_acct_no,
:ls_name,
:ll_balance;
从语法上讲,上⾯所述的就是⼀条合法的取数据的语句,但是⼀般我们使⽤游标却还应当包括其它的部分。正如我们前⾯所谈到的,游标只能⼀次从后台数据库中取⼀条记录,⽽在多数情况下,我们所想要作的是在数据库中从第⼀条记录开始提取,⼀直到结束。所以我们⼀般要将游标提取数据的语句放在⼀个循环体内,直⾄将结果集中的全部数据提取后,跳出循环圈。通过检测SQLCA.SQL-CODE的值,可以得知最后⼀条FETCH语句是否成功。⼀般,当SQLCODE值为0时表明⼀切正常,100表⽰已经取到了结果集的末尾,⽽其它值均表明操作出了问题,这样我们可以编写以下的代码:
lb_continue=True
ll_total=0
DO WHILE lb_continue
FETCH CustomerCur-sor
INTO:ls_acct_no,
:ls_name,
:ll_balance;
If sqlca.sqlcode=0 Then
ll_total+=ll_balance
Else
lb_continue=False
End If
LOOP
循环体的结构有多种,这⾥提到的是最常见的⼀种。也有的程序员喜爱将⼀条FETCH语句放在循环体的前⾯,循环体内再放置另外⼀条FETCH语句,并检测SQLCA.SQLCODE是否为100。但是这样做,维护时需同时修改两条FETCH语句,稍⿇烦了些。
关闭游标
在游标操作的最后请不要忘记关闭游标,这是⼀个好的编程习惯,以使系统释放游标占⽤的资源。关闭游标的语句很简单:
CLOSE CustomerCursor;
使⽤Where⼦句⼦
我们可以动态地定义游标中的Where⼦句的参数,例如在本例中我们是直接定义了查询省份是北京的记录,但也许在应⽤中我们要使⽤⼀个下拉式列表框,由⽤户来选择要查询的省份,我们该怎样做呢?
我们在前⾯曾经提到过,DECLARE语句的作⽤只是定义⼀个游标,在OPEN语句中这个游标才会真正地被执⾏。了解了这些,我们就可以很⽅便地实现这样的功能,在DECLARE的Where⼦句中加⼊变量作参数,如下所⽰:
DECLARE CustomerCursor CURSOR FOR
SELCECT acct_no,name,balance
FROM customer
WHERE province=:ls_province;
∥定义ls_province的值
OPEN CustomerCursor;
游标的类型
同其它变量⼀样,我们也可以定义游标的访问类型:全局、共享、实例或局部,游标变量的命名规范建议也同其它变量⼀样。

但是在目前强大的数据库性能面前这种用法已经很少。
 

相关文章:

powerbuilder游标的使⽤

在某些PowerBuilder应⽤程序的开发中,您可能根本⽤不到游标这样⼀个对象。因为在其它⼯具开发中很多需⽤游标实现的⼯作,在PowerBuilder中却已有DataWin-dow来代劳了。事实上,DataWindow不仅可以替代游标进⾏从后台数据库查询多条记录的复杂操作,⽽且还远不⽌这些。但是同DataW…...

docker创建镜像 Dockerfile

目录 docker的创建镜像的方式 dockerfile形成(原理) docker的核心作用 docker的文件结构 dockerfile的语法 CMD和ENTRPOINT的区别 创建dockerfile镜像 区别 RUN命令的优化 如何把run命令写在一块 copy和ADD区别 区别 centos7 构建Apache的d…...

C++共享和保护——(2)生存期

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言​📝 生命如同寓言,其价值不在于…...

你好,C++(3)2.1 一个C++程序的自白

第2部分 与C第一次亲密接触 在浏览了C“三分天下”的世界版图之后,便对C有了基本的了解,算是一只脚跨入了C世界的大门。那么,怎样将我们的另外一只脚也跨入C世界的大门呢?是该即刻开始编写C程序?还是…… 正在我们犹…...

【INTEL(ALTERA)】Agilex7 FPGA Development Kit DK-DEV-AGI027R1BES编程/烧录/烧写/下载步骤

DK-DEV-AGI027R1BES 的编程步骤: 将外部 USB Blaster II 连接到 J10- 外部 JTAG 接头。将交换机 SW5.3 设置为 ON(首次)。打开 英特尔 Quartus Prime Pro Edition 软件编程工具。单击 硬件设置 ,然后选择 USB Blaster II。将硬件…...

大文件分块上传的代码,C++转delphi,由delphi实现。

在 Delphi 中,我们通常使用 IdHTTP 或 TNetHTTPClient 等组件来处理 HTTP 请求 原文章链接: 掌握分片上传:优化大文件传输的关键策略 【C】【WinHttp】【curl】-CSDN博客 改造思路: 文件分块处理:使用 TFileStream 来…...

MongoDB表的主键可以重复?!MongoDB的坑

MongoDB表的主键可以重复?! 眼见为实? 碰到一个奇怪的现象, MongoDB的一个表居然有两个一样的_id值! 再次提交时,是会报主键冲突的。那上图,为什么会有两个一样的_id呢? 将它们的…...

C++初阶-list类的模拟实现

list类的模拟实现 一、基本框架1.1 节点类1.2 迭代器类1.3 list类 二、构造函数和析构函数2.1 构造函数2.2 析构函数 三、operator的重载和拷贝构造3.1 operator的重载3.2 拷贝构造 四、迭代器的实现4.1 迭代器类中的各种操作4.1 list类中的迭代器 五、list的增容和删除5.1 尾插…...

RecyclerView中的设计模式解读

一.观察者模式:(待完善,这个写的不咋地,没理解透彻) 1.观察者模式的概念: (1)消息传递方向:被观察者->观察者 (2)代码实现: 首…...

ACwing算法备战蓝桥杯——Day30——树状数组

定义: 树状数组是一种数据结构,能将对一个区间内数据进行修改和求前缀和的这两种操作的最坏时间复杂度降低到O(logn); 实现所需变量 变量名变量数据类型作用数组a[]int存储一段区间数组tr[]int表示树状数组 主要操作 函数名函数参数组要作用lowbit()int…...

elementui + vue2实现表格行的上下移动

场景&#xff1a; 如上&#xff0c;要实现表格行的上下移动 实现&#xff1a; <el-dialogappend-to-bodytitle"条件编辑":visible.sync"dialogVisible"width"60%"><el-table :data"data1" border style"width: 100%&q…...

2、快速搞定Kafka术语

快速搞定Kafka术语 Kafka 服务端3层消息架构 Kafka 客户端Broker 如何持久化数据小结 Kafka 服务端 3层消息架构 第 1 层是主题层&#xff0c;每个主题可以配置 M 个分区&#xff0c;而每个分区又可以配置 N 个副本。第 2 层是分区层&#xff0c;每个分区的 N 个副本中只能有…...

CSS新手入门笔记整理:CSS3选择器

属性选择器 属性选择器&#xff0c;指的是通过“元素的属性”来选择元素的一种方式。 语法 元素[attr^"xxx"]{} 元素[attr$"xxx"]{} 元素[attr*"xxx"]{} 选择器 说明 E[attr^"xxx"] 选择元素E&#xff0c;其中E元素的attr属性是…...

D34|不同路径

62.不同路径 初始思路&#xff1a; 1&#xff09;确定dp数组以及下标的含义&#xff1a; dp[i][i]存放到第i1行和第i1列的方法数 2&#xff09;确定递推公式&#xff1a; dp[i][i] dp[i -1][i] dp[i][i-1] 3&#xff09;dp数组如何初始化 第0行是1&#xff1b; 第0列是1&a…...

【运维】Kafka高可用: KRaft(不依赖zookeeper)集群搭建

文章目录 一. kafka kraft 集群介绍1. KRaft架构2. Controller 服务器3. Process Roles4. Quorum Voters5. kraft的工作原理 ing 二. 集群安装1. 安装1.1. 配置1.2. 格式化 2. 启动测试2.1. 启功节点服务2.2. 测试 本文主要介绍了 kafka raft集群架构&#xff1a; 与旧架构的不…...

Python 自动化之批量处理文件(一)

批量新建目录、文档Pro版本 文章目录 批量新建目录、文档Pro版本前言一、做成什么样子二、基本思路1.引入库2.基本架构 三、用户输入模块四、数据处理模块1.excel表格数据获取2.批量数据的生成 总结 前言 我来写一个不一样的批量新建吧。在工作中&#xff0c;有些同学应该会遇…...

力扣72. 编辑距离

动态规划 思路&#xff1a; 假设 dp[i][j] 是 word1 前 i 个字母到 word2 前 j 个字母的编辑距离&#xff1b;那么状态 dp[i][j] 状态的上一个状态有&#xff1a; dp[i - 1][j]&#xff0c;word1 前 i - 1 个字母到 word2 前 j 个字母的编辑距离&#xff0c;此状态再插入一个字…...

Unity中 URP Shader 的纹理与采样器的分离定义

文章目录 前言一、URP Shader 纹理采样的实现1、在属性面板定义一个2D变量用于接收纹理2、申明纹理3、申明采样器4、进行纹理采样 二、申明纹理 和 申明采样器内部干了什么1、申明纹理2、申明采样器 三、采样器设置采样器的传入格式1、纹理设置中&#xff0c;可以看见我们的采样…...

Electron学习第一天 ,启动项目

之前在安装官网的步骤操作&#xff0c;结果报错&#xff0c;找了好多办法&#xff0c;最后这种办法成功启动项目&#xff0c;并且没有报错&#xff0c;特此记录 特别提醒&#xff0c;最好安装淘宝镜像&#xff0c;npm 太慢&#xff0c;会导致报错问题&#xff0c;解决起来个人觉…...

WebService技术--随笔1

1.WebService 发展史 创建阶段&#xff08;1990 年代末至 2000 年代初&#xff09;&#xff1a;在这个阶段&#xff0c;XML-RPC 和 SOAP 协议被引入&#xff0c;为跨平台和跨语言的应用程序集成提供了基础。XML-RPC 提供了一种基于 XML 的远程过程调用机制&#xff0c;而 SOAP…...

电子取证实战:利用FTK Imager与VMware实现DD/E01镜像的动态仿真与启动

1. 电子取证中的镜像仿真入门 第一次接触电子取证时&#xff0c;我被各种专业术语搞得晕头转向。直到有一次需要分析一个嫌疑人的硬盘镜像&#xff0c;才真正体会到动态仿真的重要性。简单来说&#xff0c;动态仿真就是让存储在DD或E01镜像中的操作系统"活"起来&…...

Windows: 深入剖析pip install SSLError与SSL模块缺失的根源及系统级修复

1. Windows下pip install SSLError的典型表现 最近在Windows系统上用pip安装Python包时&#xff0c;不少朋友都遇到了这样的报错信息&#xff1a;"Cant connect to HTTPS URL because the SSL module is not available"。这个错误通常会出现在使用清华源、阿里云源等…...

Midjourney提示词黑箱破解(仅限本期开放):基于CLIP-ViT-L/14特征空间逆向推演的6维可控性建模

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Midjourney提示词黑箱破解的底层逻辑与认知跃迁 Midjourney 的提示词&#xff08;Prompt&#xff09;并非自然语言自由表达&#xff0c;而是一套隐式编码的**语义协议栈**——它在扩散模型隐空间中触发…...

三步构建高效笔记迁移系统:Obsidian Importer完全指南

三步构建高效笔记迁移系统&#xff1a;Obsidian Importer完全指南 【免费下载链接】obsidian-importer Obsidian Importer lets you import notes from other apps and file formats into your Obsidian vault. 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-import…...

Qwerty Learner:终极打字练习与单词记忆完全指南

Qwerty Learner&#xff1a;终极打字练习与单词记忆完全指南 【免费下载链接】qwerty-learner 为键盘工作者设计的单词记忆与英语肌肉记忆锻炼软件 / Words learning and English muscle memory training software designed for keyboard workers 项目地址: https://gitcode.…...

别再手动搬数据了!STM32CubeMX配置SDIO DMA,让FatFs文件读写性能翻倍

STM32CubeMX实战&#xff1a;用DMA解锁SD卡与FatFs的终极性能 在嵌入式系统开发中&#xff0c;存储性能往往是制约整体效率的关键瓶颈。想象一下这样的场景&#xff1a;你的设备正在以最高优先级处理传感器数据&#xff0c;同时需要将采集结果实时写入SD卡。此时如果采用传统的…...

跨设备可用!北大提出UniMM-HAR数据集:补齐毫米波雷达人体运动分析实用短板!

点击下方卡片&#xff0c;关注“CVer”公众号AI/CV重磅干货&#xff0c;第一时间送达点击进入—>【顶会/顶刊】投稿交流群添加微信号&#xff1a;CVer2233&#xff0c;小助手拉你进群&#xff01;扫描下方二维码&#xff0c;加入CVer学术星球&#xff01;可以获得最新顶会/顶…...

Java动态代理终极指南:JDK与CGLIB原理对比详解

Java动态代理终极指南&#xff1a;JDK与CGLIB原理对比详解 【免费下载链接】CodeGuide :books: 本代码库是作者小傅哥多年从事一线互联网 Java 开发的学习历程技术汇总&#xff0c;旨在为大家提供一个清晰详细的学习教程&#xff0c;侧重点更倾向编写Java核心内容。如果本仓库能…...

从零构建开发者个人主页:技术选型、部署优化与SEO实践

1. 项目概述&#xff1a;一个开发者个人主页的诞生与演进在技术社区里&#xff0c;一个以username/username.github.io命名的仓库&#xff0c;几乎已经成为了开发者个人技术品牌的标准名片。当我看到vassiliylakhonin/vassiliylakhonin.github.io这个项目标题时&#xff0c;脑海…...

基于meta-kb构建智能知识库:从文档向量化到RAG应用实战

1. 项目概述与核心价值最近在折腾个人知识库和AI应用落地的朋友&#xff0c;应该都绕不开一个核心问题&#xff1a;如何把散落在各处的文档、笔记、网页内容&#xff0c;高效地组织成一个能被大语言模型&#xff08;LLM&#xff09;理解和利用的“知识大脑”&#xff1f;这不仅…...