怎样才能不让用户在update()之后看到一大队的错误信息?什么between之类!

freegzc 2003-12-09 03:48:31
我想这应该是dberror的问题,怎样才能写一套中文的完整错误集对应英文的sqldbcode和sqlerrtext呢?望大家踊跃讨论,多多发言!
...全文
90 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
11407 2003-12-12
  • 打赏
  • 举报
回复
String err

CHOOSE CASE Left(sqlerrtext,9)
CASE "ORA-00001"
err="主键重复。"
CASE "ORA-01400"
err="主键为空。"
... ...
CASE ELSE
err=sqlerrtext
END CHOOSE

MessageBox("数据错误","第"+String(row)+"行"+"发生数据错误!"+"~r~n~r~n错误类别:"+err,Stopsign!)

return 1

insert2003 2003-12-11
  • 打赏
  • 举报
回复
代码写对不就行啦
xirumin 2003-12-11
  • 打赏
  • 举报
回复
不想看到"数据已改变"太多的话, 数据窗口更新方式中选择只按主键
qianduo 2003-12-11
  • 打赏
  • 举报
回复
jlwei888(血仍未冷) 和 klbt(快乐白兔) 好像都可以。
试试先。 :)
duttian 2003-12-11
  • 打赏
  • 举报
回复
同意 klbt(快乐白兔)的说法
andyyang007 2003-12-11
  • 打赏
  • 举报
回复
有簡單的方法就是在 聯結database 的時候
sqlca.Autocommit = false
的後面加一句sqlca.DBParm = "CommitOnDisconnect='No',DisableBind=1"
就可以看到相應的值
treesoft 2003-12-11
  • 打赏
  • 举报
回复
折衷的方法是收集常见的Sqldbcode,并将其翻译出来不就OK吗?没必要全部翻译吧!如果用的是支持中文的RDBMS的话,则sqlErrText会以中文提供,所以可以直接显示即可!

:)
workhand 2003-12-10
  • 打赏
  • 举报
回复
Rows changed between retrieve and update. 这样的错误不应该有,应该是代码的问题,而且就是有了你也要判断出然后rollback;
workhand 2003-12-10
  • 打赏
  • 举报
回复
也可以在应用的syserror事件里写,所有错误都将走这个事件。

return 1
liuliu13654002686 2003-12-10
  • 打赏
  • 举报
回复
快乐白兔的RETURN 1应写在
每个CASE的里面
否则,将屏蔽所有的错误
liuliu13654002686 2003-12-10
  • 打赏
  • 举报
回复
sqldbcode
有1400,1401,0001,2291,1407
我就知道这些
给分
liuliu13654002686 2003-12-10
  • 打赏
  • 举报
回复
中数据窗口里有一个事件dberror
里面写一句话
return 1
就行了!
我正在做这样的程序
刚刚做完
肯定好用
dotnba 2003-12-10
  • 打赏
  • 举报
回复
我也没完整的哦
hkzhou 2003-12-10
  • 打赏
  • 举报
回复
Rows changed between retrieve and update.
是并发操作出现的问题
同意ldy

需要退出再做一遍才可以 :)
(转贴)
PowerBuilder中的并发控制

PowerBuilder中可以通过数据窗口的更新属性(Update Properties)来实现并发控制。打开 DataWindow 画笔板,点击 Rows->Update Properties菜单,进入“Specify Updatae Properties”对话框,其中“Where Clause for Update/Delete”组合框中的三个选项就是三种处理数据并发问题的策略。

1、选项“Key Columns”:

这种情况是比较更新前后Table的关键字是否发生了变化,即当前数据库中关键字的实际值和最初查询的值做比较,如果没有改变,则可以更新,反之不能更新。

如用户A将员工号为100的职员的salary字段值改为1200并保存后,B用户也将员工号为100的职员的salary字段值改为950并点击“存盘”按钮,我们可以看到数据窗口sqlpreview事件中的sqlsyntax返回如:

UPDATE "personnel" SET "salary" = 950 WHERE "id" = 100

因为关键字id=100没有发生变化,Where条件成立,更新成功,将A用户的修改覆盖,salary值变为950元,员工损失了200元。显然这样没有达到并发控制的目的,未能保证数据的完整性。



2、选项“Key and Updateable Column”:

这种情况是比较更新前后Table的关键字和可修改(更新)的列值是否发生了变化,如果没有一项发生改变,更新成功;反之,若数据库中当前值中若任一项与数据窗口最初检索出的值不一致,则更新失败。对于此例,因所有字段都是可修改(更新)的,即检测是否有任一字段变化。

同上,当用户A更新完后,B用户点击“存盘”按钮,我们可以看到sqlsyntax返回如:

UPDATE "personnel" SET "salary" = 950 WHERE "id" = 100 AND "name" = '令狐冲' AND "birthday" = '1975-05-01' AND "technical_post" = '工程师' AND "salary" = 1000 AND "notes" = '软件开发'

显然,id字段没有改变,而可修改(更新)列之一salary的值经A用户修改存盘后,已由1000变为了当前的1200,where条件不成立,因此更新失败,并弹出出错信息如下:

Row changed between retrieve and update.

No changes made to database.

UPDATE "personnel" SET "salary" = 950 WHERE "id" = 100 AND "name" = '令狐冲' AND "birthday" = '1975-05-01' AND "technical_post" = '工程师' AND "salary" = 1000 AND "notes" = '软件开发'

此时点击《刷新》按钮,我们可以看到,salary的值仍为1200,达到了并发控制的目的,保证数据的完整性。



3、选项“Key and Modified Columns”:

这种情况是比较更新前后Table的关键字和要修改(更新)的列值是否发生了变化,如果没有改变,更新成功,反之更新失败。对于本例,即判断关键字id和将要修改字段salary是否发生变化。

同上,当用户A更新完后,B用户点击“存盘”按钮,我们可以看到sqlsyntax返回如:

UPDATE "personnel" SET "salary" = 950 WHERE "id" = 100 AND "salary" = 1000

这里id字段没有改变,而此次将要修改的列salary值已由1000变为了1200,where条件不成立,因此更新失败,并弹出出错信息如下:

Row changed between retrieve and update.

No changes made to database.

UPDATE "personnel" SET "salary" = 950 WHERE "id" = 100 AND "salary" = 1000

此时我们点击《刷新》按钮,我们可以看到,salary的值仍为1200,也达到了并发控制的目的。



再举一个例子:

如果A用户更新的是备注notes字段,而B用户更新的是薪水salary字段,按照业务,这种操作是允许的,而在PB中会如何处理呢?

1、对于选项“Key Columns”: 因为关键字没有改变,更新成功。

2、对于选项“Key and Updateable Column”:

当用户A更新完后,B用户点击“存盘”按钮,我们可以看到sqlsyntax返回如:

UPDATE "personnel" SET "salary" = 950 WHERE "id" = 100 AND "name" = '令狐冲' AND "birthday" = '1975-05-01' AND "technical_post" = '工程师' AND "salary" = 1000 AND "notes" = '软件开发'

这里,id字段没有改变,salary字段也没有改变,但可修改(更新)列之一notes的值经A用户的修改,已由“软件开发”变为了“硬件维护”,where条件不成立,因此更新失败,系统将报出错信息。

此时点击《刷新》按钮,可以看到,salary的值仍为1200,notes的值为“硬件维护”。



3、对于选项“Key and Modified Columns”:

当用户A更新完后,B用户点击“存盘”按钮,我们可以看到sqlsyntax返回如:

UPDATE "personnel" SET "salary" = 950 WHERE "id" = 100 AND "salary" = 1000

这里,id字段没有改变,而将要修改的列salary值也没有改变(A用户只是修改了notes字段),where条件成立,因此更新成功。

此时点击《刷新》按钮,可以看到,salary的值为950,notes的值为“硬件维护”。注意这里B用户只是修改salary字段,并不修改notes字段,因此notes保留了A用户修改后的值。



从上面例子中我们可以得出如下结论:

1、“Key Columns”选项在控制数据完整性方面最弱,它所允许的并发操作是最多的,所禁止的并发操作发生的可能性非常小,只有当主键被更改后才起并发控制作用,当一条记录的关键字改变了才进行控制,这显然没有多大意义。实际上这种方法一般只在单机版的应用程序中使用,而在Client/Server模式中是很少使用的。

2、“Key and Updateable Columns”的是PB的默认选项,控制最为严格,可以实现最安全的并发控制,充分保证数据的完整性,但它也会禁止我们做一些本当允许的并发修改(如上面所说的第二例),是并发能力最差的方法。

3、“Key and Modified Columns”选项可以说是前两者的折衷,在控制数据完整性和严格性方面比第一项强,比第二项弱,在允许的并发操作数量方面比第一项少,比第二项多。

至于在程序中选取哪一种控制比较合适,我们应该根据应用的具体情况来选择。

对于并发控制,我们还需要在程序中捕获 DBMS 的出错号,再显示相应的错误信息,否则PowerBuilder给出的那些出错信息,一般用户是看不懂的。这项功能可在数据窗口的dberror事件中编写代码实现。



thelazyman 2003-12-09
  • 打赏
  • 举报
回复
在数据窗口的dberror事件中
先检查错误所在,然后把错误内容转换成容易理解的中文提示给用户;
最后 return 1
fannykl2003 2003-12-09
  • 打赏
  • 举报
回复
快乐白兔的好,支持
klbt 2003-12-09
  • 打赏
  • 举报
回复
我一般在dberror编码:

String err

CHOOSE CASE Left(sqlerrtext,9)
CASE "ORA-00001"
err="主键重复。"
CASE "ORA-01400"
err="主键为空。"
... ...
CASE ELSE
err=sqlerrtext
END CHOOSE

MessageBox("数据错误","第"+String(row)+"行"+"发生数据错误!"+"~r~n~r~n错误类别:"+err,Stopsign!)

return 1
liu08 2003-12-09
  • 打赏
  • 举报
回复
推荐采用 chenlong9610(剑魔)的方法
upcmill 2003-12-09
  • 打赏
  • 举报
回复
用case语句编程只能实现已经知道的部分错误的汉化,但是不知道oracle的那么多错误是如何来起错误号的。如果知道规则,坐起来就容易多了,有志之士可以研读oracle文档,给个解决方案。
mittee 2003-12-09
  • 打赏
  • 举报
回复
在 update()之前对需要填写内容做充分的判断
加载更多回复(4)
【植物检测】基于对称的作物田三维点云植物检测研究(Matlab代码实现)内容概要:本文围绕“基于对称的作物田三维点云植物检测研究”展开,提出了一种利用三维点云数据并通过几何对称性特征实现植物检测的技术方法。研究结合Matlab代码实现,通过对作物田间植物的三维点云数据进行预处理、特征提取与对称性分析,有效识别出植物个体,尤其适用于密集种植场景下的植物分割与定位。该方法充分利用植物在垂直方向上的对称结构特性,提升了复杂农田环境中植物检测的准确性与鲁棒性。文中还介绍了算法的具体实现流程,包括点云降采样、法向量估计、对称平面检测及聚类优化等关键步骤。; 适合人群:具备一定Matlab编程基础,从事农业信息化、计算机视觉、智能农机或遥感检测等相关领域的科研人员及研究生。; 使用场景及目标:①应用于精准农业中的植物生长监测、株距统计与表型分析;②为农业机器人自主导航与植保作业提供环境感知支持;③推动基于三维视觉的智能农业装备研发。; 阅读建议:建议读者结合提供的Matlab代码进行实践操作,重点关注点云处理流程与对称特征提取的实现细节,同时可根据实际农田数据调整参数以提升检测效果。
本系统采用Python编程语言中的Flask框架作为基础架构,实现了一个面向二手商品交易的网络平台。该平台具备完整的前端展示与后端管理功能,适合用作学术研究、课程作业或个人技术能力训练的实际案例。Flask作为一种简洁高效的Web开发框架,能够以模块化方式支持网站功能的快速搭建。在本系统中,Flask承担了核心服务端的角色,主要完成请求响应处理、数据运算及业务流程控制等任务。 开发工具选用PyCharm集成环境。这款由JetBrains推出的Python专用编辑器集成了智能代码提示、错误检测、程序调试与自动化测试等多种辅助功能,显著提升了软件编写与维护的效率。通过该环境,开发者可便捷地进行项目组织与问题排查。 数据存储部分采用MySQL关系型数据库管理系统,用于保存会员资料、产品信息及订单历史等内容。MySQL具备良好的稳定性和处理性能,常被各类网络服务所采用。在Flask体系内,一般会配合SQLAlchemy这一对象关系映射工具使用,使得开发者能够通过Python类对象直接管理数据实体,避免手动编写结构化查询语句。 缓存服务由Redis内存数据库提供支持。Redis是一种支持持久化存储的开放源代码内存键值存储系统,可作为高速缓存、临时数据库或消息代理使用。在本系统中,Redis可能用于暂存高频访问的商品内容、用户登录状态等动态信息,从而加快数据获取速度,降低主数据库的查询负载。 项目归档文件“Python_Flask_ershou-master”预计包含以下关键组成部分: 1. 应用主程序(app.py):包含Flask应用初始化代码及请求路径映射规则。 2. 数据模型定义(models.py):通过SQLAlchemy声明与数据库表对应的类结构。 3. 视图控制器(views.py):包含处理各类网络请求并生成回复的业务函数,涵盖账户管理、商品展示、订单处理等操作。 4. 页面模板目录(templates):存储用于动态生成网页的HTML模板文件。 5. 静态资源目录(static):存放层叠样式表、客户端脚本及图像等固定资源。 6. 依赖清单(requirements.txt):记录项目运行所需的所有第三方Python库及其版本号,便于环境重建。 7. 参数配置(config.py):集中设置数据库连接参数、缓存服务器地址等运行配置。 此外,项目还可能包含自动化测试用例、数据库结构迁移工具以及运行部署相关文档。通过构建此系统,开发者能够系统掌握Flask框架的实际运用,理解用户身份验证、访问控制、数据持久化、界面动态生成等网络应用关键技术,同时熟悉MySQL数据库运维与Redis缓存机制的应用方法。对于入门阶段的学习者而言,该系统可作为综合性的实践训练载体,有效促进Python网络编程技能的提升。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
在当代储能装置监控技术领域,精确测定锂离子电池的电荷存量(即荷电状态,SOC)是一项关键任务,它直接关系到电池运行的安全性、耐久性及整体效能。随着电动车辆产业的迅速扩张,业界对锂离子电池SOC测算的精确度与稳定性提出了更为严格的标准。为此,构建一套能够在多样化运行场景及温度条件下实现高精度SOC测算的技术方案具有显著的实际意义。 本文介绍一种结合Transformer架构与容积卡尔曼滤波(CKF)的混合式SOC测算系统。Transformer架构最初在语言处理领域获得突破性进展,其特有的注意力机制能够有效捕捉时间序列数据中的长期关联特征。在本应用中,该架构用于分析电池工作过程中采集的电压、电流与温度等时序数据,从而识别电池在不同放电区间的动态行为规律。 容积卡尔曼滤波作为一种适用于非线性系统的状态估计算法,在本系统中负责对Transformer提取的特征数据进行递归融合与实时推算,以持续更新电池的SOC值。该方法增强了系统在测量噪声干扰下的稳定性,确保了测算结果在不同环境条件下的可靠性。 本系统在多种标准驾驶循环(如BJDST、DST、FUDS、US06)及不同环境温度(0°C、25°C、45°C)下进行了验证测试,这些条件涵盖了电动车辆在实际使用中可能遇到的主要工况与气候范围。实验表明,该系统在低温、常温及高温环境中,面对差异化的负载变化,均能保持较高的测算准确性。 随附文档中提供了该系统的补充说明、实验数据及技术细节,核心代码与模型文件亦包含于对应目录中,可供进一步研究或工程部署使用。该融合架构不仅在方法层面具有创新性,同时展现了良好的工程适用性与测算精度,对推进电池管理技术的进步具有积极意义。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!

611

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder DataWindow
社区管理员
  • DataWindow社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧