祝愿大家身体健康!

 站点注册  找回密码
 站点注册
查看: 7|回复: 0

[学习笔记] 2026年10月 PowerBuilder 文章目录

[复制链接]

[学习笔记] 2026年10月 PowerBuilder 文章目录

[复制链接]
pbai

主题

0

回帖

4751

积分

PBAI

积分
4751
贡献
在线时间
小时
发表于 12 小时前 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?站点注册

×
2026年10月 PowerBuilder 文章目录

阅读说明
1. 收录范围:2026 年 10 月 1 日至 2026 年 10 月 31 日在『Sybase PowerBuilder』版块发布的全部文章
2. 本月共 15 篇,版块 fid=33,主题分类「学习笔记」typeid 见发布时填写
3. 全量总索引(含 2026 年 9 月及以前全部文章)见 fid=90846 首帖目录
4. 难度系数:★★★☆☆(本文为目录索引,正文文章难度各异,以各篇「阅读说明」为准)




一、本月速览

序发布日期文章主题分类核心内容
110-04PowerBuilder 字符串编码全解:Unicode 码点、GBK 落盘与中文处理实战(PB10 基准 · PB12.5 实测)学习笔记编码模型篇(与 #7 字符串函数全解互补:那篇讲函数怎么用,这篇讲底层为什么这样)★PB 内部字符串是 Unicode(UCS-2)不是 GBK(Asc('中')=20013=…
210-06PowerBuilder 数值计算全解:round / ceiling / int / mod 取整四兄弟、string 的 picture 掩码与 decimal 精度(PB10 基准 · PB12.5 实测)学习笔记金额计算专题(46 个独立用例双轨对跑,3 条真实版本差异)★★round(x, n) 的 n 为负或 > 15 时 PB10 返回 NULL(会连锁把整条字符串拼接变空、函数…
310-08PowerBuilder 随机数全解:Rand 与 Randomize 的真实边界、32768 上限与可复现序列(PB10 基准 · PB12.5 实测)学习笔记随机数篇(PB 只有 Rand / Randomize 两个函数):★★Random() / RandomNumber() 根本不存在(负向探测双双报 C0051),只有 …
410-10PowerBuilder A/W 双轨字符函数全解:Len/LenW/LenA 到底差在哪、中文截取为什么会切出乱码(PB10 基准 · PB12.5 实测)学习笔记字符计数与截取专题(9 个测试对象、25 个用例双轨对跑,零版本差异)★★Len 数字符不数字节(中文测试=4 而 LenA=8,推翻流传的「Len 返回字节数」——那…
510-12PB 编译成 PBD 后为什么容易被破解:真实原因、攻击链与六层防护(附实测组件)学习笔记PBD 是自描述 p-code 容器(类元数据/对象定义/事件脚本/属性值/继承图/内嵌 SQL 原文全在里面),反编译是查表翻译不是破译密码(PBKiller 覆盖 PB5→12…
610-12PowerBuilder 外部函数调用实战:Declare / LIBRARY 声明、DLL 调用与它的真实边界(PB10 基准 · PB12.5 实测)学习笔记调 DLL 这一层的「声明与验证全靠程序员」实测篇(与 #1 互补:#1 讲让 PB 当被调方 system library,本篇讲 PB 主动去调别人):★编译器完全不校验外部函…
710-14PowerBuilder 运行跟踪全解:Trace 函数族 8 个函数的实测行为、失败残留与 .trc 文件结构(PB10 基准 · PB12.5 实测)学习笔记把 PB 自带的第一条「跟踪」路线一次讲透:8 个函数的签名全貌(TraceOpen / TraceClose / TraceBegin / TraceEnd / …
810-16PowerBuilder DataWindow 导入导出全解:ImportString / ImportFile / SaveAs 全格式实测(PB10 基准 · PB12.5 实测)学习笔记把「数据怎么进 DataWindow、怎么出去」一次讲透:★不连库、不建 .srd 的零依赖语法串写法(retrieve="PBSELECT( VERSION(400) )" …
910-18PowerBuilder DataWindow 排序与过滤全解:SetSort / Sort / SetFilter / Filter 的表达式语法、Filter 缓冲区与还原顺序坑实测(PB10 基准 · PB12.5 实测)学习笔记四个函数的两步制语义一次讲透:★排序表达式语法全表(列名 A/D、多列逗号、#列号,大小写不敏感);★字符列是字典序——'10' 排在 '9' 前、大写排在小写前,没有自然数字排序…
1010-20PowerBuilder DataWindow 分组与汇总统计全解:group 定义、计算域 Sum/Count/Avg、GroupCalc 与 FindGroupChange 的真实语义(PB10 基准 · PB12.5 实测)学习笔记分组统计三件套(group / 计算域 / 聚合表达式)双版实测:★group 语法的正确属性名是 header.height/trailer.height(写 `head…
1110-22PowerBuilder DataWindow 更新机制全解:Update 的 SQL 生成规则、UpdateWhere 四态、并发冲突与 SetItemStatus 实测(PB10 基准 · PB12.5 实测)学习笔记把 Update() 到底发了什么 SQL、冲突时会发生什么,用 13 个探针连真库逐个跑出来(与《撤销与保存前校验》《关键事件链路》分工:本篇只讲更新机制本体):★SyntaxF…
1210-24PowerBuilder SyntaxFromSQL 全解:动态生成 DataWindow 的样式参数、报错形态与生成语法串的真实结构(PB10 基准 · PB12.5 实测)学习笔记动态生成专篇(#3 DataStore 篇只带过生成三步,本篇专讲:SyntaxFromSQL+Create+Retrieve 端到端实测、表现串键值规则(值不加引号、未知键即报 …
1310-26PowerBuilder 动态 SQL 全解:四种执行形态、SQLSA 与 SQLDA 的真实行为(PB10 基准 · PB12.5 实测)学习笔记动态 SQL 篇(与《嵌入式 SQL 实战》讲静态 SQL、《SyntaxFromSQL 全解》讲动态生成 DataWindow 明确分工):形态一 EXECUTE IMMEDIA…
1410-28PowerBuilder 对象生命周期与垃圾回收全解:GarbageCollect 三函数、引用计数与析构时机实测(PB10 基准 · PB12.5 实测)学习笔记对象销毁机制专篇(析构标记文件法全流程实测,20+ 单例探针双轨读数逐字一致、零版本差异):★局部 NVO 出作用域立即析构(引用计数当场归零,不用等 GC 不用调 Garbage…
1510-30PowerBuilder 调用存储过程全解:DECLARE PROCEDURE、FETCH 取结果集、OUTPUT 参数与 RPCFUNC 实测(PB10 基准 · PB12.5 实测)学习笔记存储过程三路线分工实测(与嵌入式 SQL 实战、动态 SQL 全解、事务对象全解明确分工):嵌入式 DECLARE 四步取结果集、@参数 = :变量传输入参、结果集耗尽的 100 …


二、本月文章

#1. 「url=https://www.sybasebbs.com/thread-90899-1-1.html」PowerBuilder 字符串编码全解:Unicode 码点、GBK 落盘与中文处理实战(PB10 基准 · PB12.5 实测)[/url] —— 编码模型篇(与 #7 字符串函数全解互补:那篇讲函数怎么用,这篇讲底层为什么这样)★PB 内部字符串是 Unicode(UCS-2)不是 GBK(Asc('中')=20013=0x4E2D 而非 214,推翻「PB 用 GBK 存字符串」这一乱码根源前提)、★Asc() 返回 integer 必溢出('订'=35746 → -29790,须用 long 接收 + 负值加 65536 归一)、★内存 Unicode / 落盘 GBK 两套编码(订单2026号=7 字符但落盘 10 字节 = 3×2+4×1)、★Unicode 码点低字节 ≠ GBK 字节(Mod(20013,256)=45 而 GBK 中「中」=D6D0=208,硬证 GBK 需查码表无算术关系、这也是 PB 没有内置 UnicodeToGbk 的原因)、Len/Mid/Left/Right/Reverse 全按字符(中英混排实测安全)、string 路径读写往返无损 / blob 路径 String(blob) 必乱(文本一律 FileRead 不用 FileReadEx)、'1'='01'=false(编号比较先 Trim)、Trim 不去全角空格 U+3000、配套 nvo_enc_final(of_code/of_codes/of_find/of_is_cn 四个方法);六个必避坑 + 与 #7 字符串函数全解的选型分工;双轨四绿 + 37/37 硬断言,两版诊断输出逐字节一致(630 B)

#2. 「url=https://www.sybasebbs.com/thread-90901-1-1.html」PowerBuilder 数值计算全解:round / ceiling / int / mod 取整四兄弟、string 的 picture 掩码与 decimal 精度(PB10 基准 · PB12.5 实测)[/url] —— 金额计算专题(46 个独立用例双轨对跑,3 条真实版本差异)★★round(x, n) 的 n 为负或 > 15 时 PB10 返回 NULL(会连锁把整条字符串拼接变空、函数莫明返回空串;已用 IsNull 单独证伪为「返回值层面为 NULL」而非运行异常,PB12.5 则正常返值)、★★string(字符串值, 掩码) 不做格式化原样返回掩码字符(DB 读出的字符串金额必须先 Double() 或 round(),否则界面显示的是 '#,##0.00' 这串字符)、★★round(2.675, 2) 两版不同(PB10=2.68 / PB12.5=2.67)而 string(2.675, '0.00') 两版都是 2.68(扩到 10 个同类值验证只有 2.675 分叉)、★★integer/long 溢出静默回绕(32767+1=-32768、2147483647+1=-2147483648、100000 的三次方=-1530494976,全程零报错)、★int() 是向零截断不是向下取整(int(-2.7)=-3、int(2.5)=2 不是 3)、★ceiling() 朝正无穷(ceiling(-2.3)=-2 与 int 方向相反)、★mod() 负余数(mod(-7,3)=-1,分箱/取下标须判负补偿)、★abs(-32768) 仍是 -32768、★string(布尔) 给 'true'/'false' 字符串不是 1/0、★掩码 * 不生效(实测原样输出星号)、★% 不自动乘 100、★掩码位数不够不报错、★decimal 两版显示位数不同(PB10=18 位 / PB12.5=30 位,转字符串存库会写出不同长度)、★round() 不是银行家舍入(0.5 一律远离零进位);另实测 floor/trunc/log10/number/decimal() 五函数在 PB10 与 PB12.5 均报 C0051(两版本都不存在),format() 编译通过但本机 PBVM 运行期不可用故全文改用 string(值, 掩码)(已 100% 实测);与 #7 字符串处理全解分工:#7 讲字符串函数,本篇讲数值与金额;双轨四绿 + 8 个交付用例逐字节一致 + 38 个边界用例一例一次隔离运行

#3. 「url=https://www.sybasebbs.com/thread-90903-1-1.html」PowerBuilder 随机数全解:Rand 与 Randomize 的真实边界、32768 上限与可复现序列(PB10 基准 · PB12.5 实测)[/url] —— 随机数篇(PB 只有 Rand / Randomize 两个函数):★★Random() / RandomNumber() 根本不存在(负向探测双双报 C0051),只有 Rand(n) 与 Randomize(n);★★真实取值上界是 32768 不是官方文档写的 32767(6 万次抽样取到 32768 共 2 次、取到 32769 为 0 次,且 Rand(65535) 的最大值同样是 32768);★★n ≤ 0 时静默返回 0 不报错(Rand(0)/Rand(-1)/Rand(-5)/Rand(-100) 四档全返 0),数组为空时 Rand(UpperBound(arr)) 会取到下标 0;★n 传小数直接截断不四舍五入(Rand(5.7) 等价 Rand(5));★n > 32768 不报错但范围被静默截断;★Rand(1) 恒返回 1 不是随机;★Randomize(12345) 同种子序列完全可复现(两次 again=true),换种子则不同;★相邻两次可能撞值(3000 次中 4 次),别假设不重复;★Randomize 返回值永不使用、夹在逻辑中间会重播序列作废之前的随机数、种子也不能超 32767;Rand(6) 抽 6000 次实测均匀(983~1017);另给出突破 32768 的分段拆分写法(of_random_big,实机验证 Rand(100000) 抽满 4000 次无越界、最大值可到 100000)、Fisher-Yates 洗牌、可复现测试数据与三个高频误用正解;11 条坑清单 + 参数段行为速查表 +与 C/Java/C#/Python 的API 对照;PB10 与 PB12.5 双轨 46 次运行读数逐条一致(零版本差异),另附 PB10 兼容版 PBL 附件

#4. 「url=https://www.sybasebbs.com/thread-90905-1-1.html」PowerBuilder A/W 双轨字符函数全解:Len/LenW/LenA 到底差在哪、中文截取为什么会切出乱码(PB10 基准 · PB12.5 实测)[/url] —— 字符计数与截取专题(9 个测试对象、25 个用例双轨对跑,零版本差异)★★Len 数字符不数字节(中文测试=4 而 LenA=8,推翻流传的「Len 返回字节数」——那是 PB6/7 时代 ANSI 当主角的旧说法);★★Len 与 LenW 实测完全相等(含纯中文 / 中英混合 / 空串 / 空白字符无一例外,W 后缀是历史同义词、不是「宽字符专用」);★★LenA 才按字节,且只在有非 ASCII 字符时才与前两者拉开差距(纯 ASCII 时三者全同);★★LeftA(18字串, 10) 只截到 5 个字(砍掉一半且不报错)而 Left/LeftW 正确给 10 —— 且源串根本没超长时 LeftA 照样砍掉一半(9 字串截 10 得 5),这是典型的静默数据丢失;★★MidA 会把汉字切成半个(MidA(中文abc,1,2) 只得 中,低字节被切掉),LeftA 更是直接把「文」整个丢掉;★★PosA 返回的是字节位置(b 落在第 6 个字节,而字符位置是 4),拿去喂 Mid/Left 必然错位;★★Replace 没有「按子串替换」的签名(Replace(串,旧,新) 三参形式直接 C0052,它是位置型 Replace(串,起点,长度,新串))—— PB 没有原生全局替换函数,配套给出实测通过的自写 of_replace_all(含 aaaa+aa→bb 防死循环关键用例与找不到原样返回、空串安全边界);★Pos 第三参是「起始字符位置(1 基)」不是「跳过个数」(Pos('abcdef','b',3)=0),且「找不到」与「起点越界」都返回 0、无法区分;★★AscW/CharW/ReverseW/FindW/Tab 根本不存在(负向探测逐个编译全部报 C0051,须一律改用无后缀版);★Match/MatchW 返回 boolean 不是位置(按 long 接收报 C0008,想拿位置请用 Pos);★Fill 只有两参、不能指定填充字符(三参报 C0052);★Asc('中')=20013 是 Unicode 码点而 AscA('中')=214 只是半个 GBK 字节、不能当字符序号;完整 9 组函数对照表(字符语义 vs 字节语义,A 版覆盖不到「去空白」与「反转」这两项);★测试环境坑:.sru 里直写中文字面量会被工具链静默搞成乱码且照样导入编译通过(长度读数全错),故本文所有中文测试串统一用 Char() 构造;13 条坑清单 + 四种场景选型决策表;PB 10 与 PB 12.5 行为完全一致(19 组诊断读数两版逐字节比对差异为 0),全部代码双轨实机四绿(import 0 错 ×2 + 全量重建 0 错 ×2 + 运行时 25/25 PASS ×2 + 静态检查 0 错 bad=0),另附 PB10 兼容版 PBL 附件

#5. 「url=https://www.sybasebbs.com/thread-90907-1-1.html」PB 编译成 PBD 后为什么容易被破解:真实原因、攻击链与六层防护(附实测组件)[/url] —— PBD 是自描述 p-code 容器(类元数据/对象定义/事件脚本/属性值/继承图/内嵌 SQL 原文全在里面),反编译是查表翻译不是破译密码(PBKiller 覆盖 PB5→12.5、PowerRebuilder 覆盖 PB7.0–12.5 共 591 操作码);纠 5 个常见错判:★机器码 DLL 里仍带对应 PBD 副本照样能反编译、★EXE 概念上就是一个 PBD + 极小引导器、★改扩展名/加壳/字符串加密只增加耐心成本、★PB Protect 不是 PB 自带的;攻击链 7 环里 2/3/4 环拦不住,重心必须压在 5/6/7 环;照 PowerServer Security 五件套给六层防护:打包选项 / 判定上服务端(唯一带根本性)/ 完整性自校验 / 资源与字符串加密 / 硬件加密狗 / 反调试;附实测组件 nvo_pbd_guard(单文件零依赖:SHA-256 流式清单 + 机器绑定 + 启动闸门,PB10+PB12.5 双轨 12 次运行全 PASS、跨轨逐字节一致,附件含全部验证证据)

#6. 「url=https://www.sybasebbs.com/thread-90908-1-1.html」PowerBuilder 外部函数调用实战:Declare / LIBRARY 声明、DLL 调用与它的真实边界(PB10 基准 · PB12.5 实测)[/url] —— 调 DLL 这一层的「声明与验证全靠程序员」实测篇(与 #1 互补:#1 讲让 PB 当被调方 system library,本篇讲 PB 主动去调别人):★编译器完全不校验外部函数——函数名不存在、DLL 不存在、返回类型声明错,import 与 rebuild 全部 0 错,只有运行期才炸;★.sru 里外部函数写在 type prototypes 段(不带 declare 关键字,写 declare 报 C0114/C0031),且漏一行 LIBRARY 立刻报 C0183;★外部函数是对象局部的,跨对象直调报 C0051,须经该对象 of_ 方法转出;★integer 接 32 位返回值会静默截断(实测 169230625→16673、eq=false、零报错,且 PID 低位时两版相等「看运气」);★出参缓冲区四种写法实测全灭(ref string→运行期报错、ref blob/按值 blob→0xC0000005 崩进程且 TRY-CATCH 兜不住、预分配 blob 未进入运行环节已如实标注),未能给出可用正解;把返回 long 的函数声明成 string 是抛异常而非乱码;SUBROUTINE 形态本机运行期被拒;★意外收获:PB 的 sleep 单位是秒(sleep(1)=1000ms);★PB 字符串是 UTF-16LE,量 blob 长度用 lstrlenW('abc':W=3 对 / A=1 错 / len=6)不报错地给错值;;ansi 只能跟在 ALIAS 里;catch 必须带异常变量名;FileWrite 第二参只收 string/blob。18 条坑清单;PB10+PB12.5 双轨四绿(import 0 错 + rebuild 0 错 + 22 用例各 16 PASS 判定逐条一致 + 正文代码另建 nvo_art_check 逐字复跑双轨 5/5 PASS),22 份诊断 SAME=17/DIFF=5 全为墙钟 PID 环境值,零行为差异

#7. 「url=https://www.sybasebbs.com/thread-90910-1-1.html」PowerBuilder 运行跟踪全解:Trace 函数族 8 个函数的实测行为、失败残留与 .trc 文件结构(PB10 基准 · PB12.5 实测)[/url] —— 把 PB 自带的第一条「跟踪」路线一次讲透:8 个函数的签名全貌(TraceOpen / TraceClose / TraceBegin / TraceEnd / TraceEnableActivity / TraceDisableActivity / TraceUser / TraceError,全部返回 ErrorReturn)与★帮助文档里实测写错的四处(TimeNone! 应为 TimerNone!、ActCreateObject! / ActDestroyObject! 应为 ActObjectCreate! / ActObjectDestroy!、TraceUser 并非单参、ActivityKind 不能当参数类型);★★本文最重的一个坑:一次失败的 TraceOpen 之后,错误会「粘连」到本会话所有后续调用(FileAlreadyOpenError! 把真因挡住),而且在失败态下再调 TraceClose,进程直接 0xC0000005 崩掉(TRY-CATCH 兜不住,四个打点文件全部停在 T2 之前);★同一个文件二次 TraceOpen 会截断上一份日志(640 → 624 字节)——所谓「中文丢失」是覆盖,不是编码问题(干净探针里中文完整命中 @290);落盘时机:TraceOpen 后文件长度为 0,TraceClose 后才写盘;★ErrorReturn 的真面目(8 个常量 long() 全 0、string() 全空);活动开关默认只开 ActUser!,开与关都能用体积差验证(610 / 648 / 790 / 670);四种 TimerKind 与 .trc 头部时间字段;★★逐字节反向 .trc 结构——它是 UTF-16LE 文本容器(magic PBTRACE;host 字段 PB10 全 INTEL 01 238、PB12.5 全 INTEL 01 333,68 个样本零例外),记录外形是「2 字节类型标记 09 01 / 07 03 / 08 03 + 4 字节小端 info(实测 101 = 65 00 00 00、4660 = 34 12 00 00)+ 长度 + UTF-16LE 内容」;★嵌套 TraceBegin 与帮助不符(返回 Success! 而非 TraceStartedError!,第二块标识被静默忽略);★TraceUser(5, NULL) 返回 NULL 且不落盘,而 TraceBegin(NULL) 却返回 Success!;★落盘判据只剩两条——String(blob) 与 String(blob, EncodingUTF16LE!) 都在首个 NUL 处截断、Char(0) 返回空串,所以只能靠文件体积 + TraceTree 回读判定;★把日志读回来的 TraceTree 路线(SetTraceFileName / BuildModel / EntryList)与三个编译期陷阱(TraceTreeNode 是基类,直接取 ClassName / name / ObjectID 报 C0019);配套可直接导入即跑的工具类 nvo_pbtrace(11 个方法,含 of_safe_open 先 FileDelete 再 TraceOpen 的唯一可行防御);14 条坑清单 + 双轨差异对照;全部代码 PB10 + PB12.5 双轨实机四绿(import 0 错 ×2 + rebuild --type full 0 错 ×2 + PBVM .pbtest 双轨 PASS 且读数逐字一致size=868 entries=4 lab=Success! lab2=FileOpenError! + 静态检查 0 错 0 提醒 / bad=0)

#8. 「url=https://www.sybasebbs.com/thread-90912-1-1.html」PowerBuilder DataWindow 导入导出全解:ImportString / ImportFile / SaveAs 全格式实测(PB10 基准 · PB12.5 实测)[/url] —— 把「数据怎么进 DataWindow、怎么出去」一次讲透:★不连库、不建 .srd 的零依赖语法串写法(retrieve="PBSELECT( VERSION(400) )" + Create(syntax, err)),三行就能起一个可导入导出的 DataWindow;★ImportString 五个重载里真正能用的四个(两参形态编译能过、运行必败)、ImportFile 的扩展名与格式前缀优先级、ImportClipboard 只有读端;★返回值语义(正数是行数、-1 / -2 / -4 各是什么、-4 会留下 1 行残数据且非法字段变 NULL)、ImportString 是追加语义;★16 行导出格式字节级矩阵(Text! / CSV! / Excel! / Excel5! / XML! / HTMLTable! / PSReport! / PDF! / dBase3! / WKS! / WK1! / WMF! / SaveAsAscii / SaveAsFormattedText);★三个编码意外(默认 ANSI、EncodingUTF8! 写的是带 BOM 的 UTF-8、XML! 落盘是 UTF-16LE);★PDF! 枚举存在但运行时导出器不可用,两版恒定返回 -1;★CSV 的转义只做一半——含逗号的值自动加引号、含双引号的值原样写出,且带表头的 CSV 回读必然 -4(往返链路必须关掉 colheading);★★导出的返回值会骗人:XML! 与空数据源 3 参 CSV! 写不存在的目录照样返回 1,必须自己量文件长度;★★PB10 运行时边界:HTMLTable! / SaveAsAscii / SaveAsFormattedText 三项导出会把 PB10 进程打崩(0xC0000005,TRY...CATCH 兜不住),且崩前留下只有表头的半截文件(30 / 14 字节)——所以导出类验证必须一例一次独立运行;配套 nvo_dwio 封装 12 个方法 + 演示窗口;14 条坑清单;PB12.5 实机 55 条断言全中、PB10 编译级 0 错 + 四组 50 条全中

#9. 「url=https://www.sybasebbs.com/thread-90914-1-1.html」PowerBuilder DataWindow 排序与过滤全解:SetSort / Sort / SetFilter / Filter 的表达式语法、Filter 缓冲区与还原顺序坑实测(PB10 基准 · PB12.5 实测)[/url] —— 四个函数的两步制语义一次讲透:★排序表达式语法全表(列名 A/D、多列逗号、#列号,大小写不敏感);★字符列是字典序——'10' 排在 '9' 前、大写排在小写前,没有自然数字排序;★★Sort 是不稳定排序——同键两行顺序会被打乱(两组数据独立复现),依赖二次排序必须把次键写进表达式;★表达式读不回来——GetSort() 不存在(C0051)、Describe('datawindow.sort') 前后恒 '!',要还原请自己存串;★Set 失败(-1)后执行是无副作用空转但必须自查返回值;★★Filter 缓冲区——被滤的行按原相对顺序存放、GetItemString 四参(行,列,Filter!,false)读取、行号全部按过滤后重排、Find 找不到返回 0、InsertRow(0) 插 Primary 末尾;★★'1=1' 还原顺序不保证——实测还原后是 Primary 剩余在前 + Filter 缓冲区按序追加(1,5,2,7 → 5,7,2,1);★PB12.5 差异:越界读 Filter 缓冲区 PB10 抛 Invalid row/column 运行错误、PB12.5 静默空串;自包含 of_syn() 最小语法串示例双轨编译 0 错、运行读数逐字一致;12 条坑清单

#10. 「url=https://www.sybasebbs.com/thread-90916-1-1.html」PowerBuilder DataWindow 分组与汇总统计全解:group 定义、计算域 Sum/Count/Avg、GroupCalc 与 FindGroupChange 的真实语义(PB10 基准 · PB12.5 实测)[/url] —— 分组统计三件套(group / 计算域 / 聚合表达式)双版实测:★group 语法的正确属性名是 header.height/trailer.height(写 header.level.1.height 直接 incorrect syntax)、组尾带 band 名是 trailer.1;★组的排序依据在 table 的 sort 属性里——ImportString 后数据即成组有序、全表汇总与组小计立即有值、SetItem 改数聚合立即刷新,GroupCalc 幂等;★★FindGroupChange 的真实语义=返回「大于等于给定行的第一个组头行」(传组头返组头本身、空表返 0),从组头往下走必死循环,正确遍历用「组头判定法 FGC(i,1)=i」;★取值通道三条:GetItemNumber(推荐)/ Describe evaluate(现场算任意聚合、返字符串)/ Describe 按名恒 !(死路);★★版本差异:GetItemString 读数值型计算域 PB12.5 返空串、PB10 直接运行期崩溃;★★坏列表达式 Create 不报错(错误串为空)、evaluate 返 !、GetItemNumber 双版崩溃(TRY-CATCH 兜不住);sum/count/avg/max/min 全表与组内读数表 + 双轨读数一致的完整可运行示例;14 条坑清单

#11. 「url=https://www.sybasebbs.com/thread-90918-1-1.html」PowerBuilder DataWindow 更新机制全解:Update 的 SQL 生成规则、UpdateWhere 四态、并发冲突与 SetItemStatus 实测(PB10 基准 · PB12.5 实测)[/url] —— 把 Update() 到底发了什么 SQL、冲突时会发生什么,用 13 个探针连真库逐个跑出来(与《撤销与保存前校验》《关键事件链路》分工:本篇只讲更新机制本体):★SyntaxFromSQL 造的对象天生带更新属性(主键从元数据自动标 key,一个 Modify 不调也能 Update);★UpdateWhere 四态实测 WHERE 原文:0=WHERE id=1、1(默认)=key+全部可更新列、2=key+本次被改列、3 与 1 生成 SQL 一字不差(差别只在冲突场景显现);★并发冲突两种现场(另一连接先改 qty):UW0 成功 / UW1 -1 / UW2 成功 / UW3 -1;改同列 name 则 UW1/2/3 全 -1,而 Update 返回 -1 时 SQLErrText 是空的,提示文案必须自己做;★DELETE 走同一套 WHERE 规则(key+全部可更新列原值),别人改过这行你的 DELETE 同样匹配 0 行;★Modify("id.key=no") 拦不住 WHERE 里的主键(Describe 已确认 no,SQL 里 id 照样在 WHERE 首位);★keymodification / updatekeyinwhere 两条 Modify 在 PB12.5 全部报 incorrect syntax(Column 33/34,三候选值全试),但改主键的默认行为已是 DELETE+INSERT(旧行按全原值删、新行全列插);★SetItemStatus 是四参(须带 Primary!,三参报 C0052)、状态枚举 String() 返回空串(附 of_st 手动映射函数)、New! 行 Update 会被跳过;★★ResetUpdate 只重置状态不回卷 original 缓冲——撤销后 original 留着「假原值」,下一轮 Update 的 WHERE 拿它去匹配,必然 -1(干净重来只能重新 Retrieve);★★Update 永不自动提交(AutoCommit=false 下第二连接脏读即见未提交值,ROLLBACK 后干净回退);★AutoCommit=false 时 DDL 持有表级架构锁 Sch-M,未提交期间别人连 read uncommitted / NOLOCK 都被阻塞(实测等 LCK_M_SCH_S 达 730 秒,行锁能脏读绕、架构锁绕不过);★同一 Update 内先 DELETE 后 UPDATE(固定顺序,恰好化解唯一约束互换冲突);双轨四绿:PB10 编译 0 错 + PB12.5 编译 0 错且 13 探针 pbtest 全 PASS + 静态检查 0 错 0 提醒 / bad=0

#12. 「url=https://www.sybasebbs.com/thread-90920-1-1.html」PowerBuilder SyntaxFromSQL 全解:动态生成 DataWindow 的样式参数、报错形态与生成语法串的真实结构(PB10 基准 · PB12.5 实测)[/url] —— 动态生成专篇(#3 DataStore 篇只带过生成三步,本篇专讲:SyntaxFromSQL+Create+Retrieve 端到端实测、表现串键值规则(值不加引号、未知键即报 invalid、column/text 只认 border/color,width/x/band 拒收)、类型映射表(nvarchar→char、money→decimal、identity 保留、主键自动 update/key)、三类失败形态与 err 成功即清空(判成败只看返回串长度)、order by 不生成 sort=、group by 只出平铺不出分组带、语法串带版本头 release 10/12.5)

#13. 「url=https://www.sybasebbs.com/thread-90922-1-1.html」PowerBuilder 动态 SQL 全解:四种执行形态、SQLSA 与 SQLDA 的真实行为(PB10 基准 · PB12.5 实测)[/url] —— 动态 SQL 篇(与《嵌入式 SQL 实战》讲静态 SQL、《SyntaxFromSQL 全解》讲动态生成 DataWindow 明确分工):形态一 EXECUTE IMMEDIATE 实测不自动提交(AutoCommit=false 下 ROLLBACK 连 CREATE TABLE 一起回滚)、执行 SELECT 不报错但结果集丢弃、空串被 PB 客户端层拒绝;形态二 PREPARE+EXECUTE SQLSA USING(正解无 DECLARE,SQLNRows 反映受影响行数);形态三动态游标 FETCH INTO 隐式类型转换、CLOSE 未执行游标的报错文案是 Procedure;形态四 DESCRIBE+SQLDA 的 OutParmType 映射(int→TypeLong!)、GetDynamicString 读数值列返空、SetDynamicParm 越界静默成功、GetDynamicString(0) 直接 0xC0000005 崩进程;DECLARE 必须 FOR SQLSA(写 FOR SQLDA 报 C0103);动态过程 EXECUTE 后可 FETCH 取结果集、EXECUTE 过程 USING :变量 编译报 C0015;PB12.5 零语法差异

#14. 「url=https://www.sybasebbs.com/thread-90924-1-1.html」PowerBuilder 对象生命周期与垃圾回收全解:GarbageCollect 三函数、引用计数与析构时机实测(PB10 基准 · PB12.5 实测)[/url] —— 对象销毁机制专篇(析构标记文件法全流程实测,20+ 单例探针双轨读数逐字一致、零版本差异):★局部 NVO 出作用域立即析构(引用计数当场归零,不用等 GC 不用调 GarbageCollect);★循环引用靠引用计数收不了、显式 GarbageCollect() 后被回收(GC 在 PB 里存在的唯一理由),且循环引用对的源码用祖先类型 nonvisualobject 才能过 ORCA 导入(互相引用对方类型是鸡生蛋 C0001);★被活对象持有的对象 GC 不收、持有者销毁连锁析构(查泄漏先查持有者);★autoinstantiate 的析构脚本触发两次(一个实例两行标记,两版一致,析构里放不可重复逻辑要防重入);★SetNull(对象引用) 编译放行但运行埋雷:IsValid 返回 NULL 而非 false、对象立即析构、再调方法 Null object reference,lp = null 则编译报 C0015;三件套语义(默认最小间隔 500ms、SetTimeLimit 返回旧值、null 入参不改设置)、GarbageCollect 无返回值成败不可知(个别上下文观测到紧跟调用不生效,验证永远靠标记)、Sleep 窗口内自动 GC 不触发;「创建与检查必须分处两个方法、标记文件必须时间戳唯一」两条实测方法论 + 完整自检示例

#15. 「url=https://www.sybasebbs.com/thread-90926-1-1.html」PowerBuilder 调用存储过程全解:DECLARE PROCEDURE、FETCH 取结果集、OUTPUT 参数与 RPCFUNC 实测(PB10 基准 · PB12.5 实测)[/url] —— 存储过程三路线分工实测(与嵌入式 SQL 实战、动态 SQL 全解、事务对象全解明确分工):嵌入式 DECLARE 四步取结果集、@参数 = :变量传输入参、结果集耗尽的 100 之后继续 FETCH 会自动接续下一个结果集(多结果集过程不用重新 EXECUTE);★★嵌入式 OUTPUT 参数编译放行、执行成功但值不回,RETURN 码同样拿不到——输出参数与返回码只有 RPCFUNC(transaction 标准类 + RPCFUNC ALIAS)一条正解(实测返回码 300 / 输出 C,30 全部正确回填);★DML 类过程 EXECUTE 后 SQLCode=100 不是 0、SQLNRows 恒为 0 别拿它判行数;RPCFUNC 调不存在的过程返回 0 须再查 SQLCode、调带结果集的过程结果集被静默丢弃;过程内 DML 服从外层事务(ROLLBACK 可撤销);SET NOCOUNT 对 PB 嵌入式路线非必须(FETCH 自动跳过状态块);13 条坑清单;PB10+PB12.5 双轨全量编译 0 错、PB12.5 连库实跑 15 用例全 PASS

三、本月统计


  • 本月发布:15 篇
  • 版块分布:fid=33 共 14 篇、fid=93 共 12 篇、fid=? 共 4 篇
  • 涉及主题分类:(15 篇)
  • 全部文章已同步收录到总目录对应分类小节


四、相关入口


  • 说明:本系列月度目录自 2026 年 11 月起建立,10 月及以前的文章请直接查全量总目录。
  • 本版块全量总目录:https://www.sybasebbs.com/thread-90846-1-1.html
  • PBIDEA 月度目录见 fid=93 同月目录帖。
共享共进共赢
Sharing And Win-win Results
SYBASEBBS - 免责申明1、欢迎访问“SYBASEBBS.COM”,本文内容及相关资源来源于网络,版权归版权方所有!本站原创内容版权归本站所有,请勿转载!
2、本文内容仅代表作者观点,不代表本站立场,作者自负,本站资源仅供学习研究,请勿非法使用,否则后果自负!请下载后24小时内删除!
3、本文内容,包括但不限于源码、文字、图片等,仅供参考。本站不对其安全性,正确性等作出保证。但本站会尽量审核会员发表的内容。
4、如本帖侵犯到任何版权问题,请立即告知本站 ,本站将及时删除并致以最深的歉意!客服邮箱:admin@sybasebbs.com
您需要登录后才可以回帖 登录 | 站点注册

本版积分规则

免责声明:
本站所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:Admin@SybaseBbs.com

客服微信:18669893686
挂谷猜想 · 探索

Archiver|PowerBuilder(PB)BBS社区 ( 鲁ICP备2021027222号-1 )

GMT+8, 2026-11-1 18:07 , Processed in 0.047211 second(s), 6 queries , MemCached On.

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表