奇怪! 在dw的itemchanged事件中写了个判断, 错误发生后数据再也保存不了了??

ufo_ufo 2002-10-10 06:17:50
??
...全文
44 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiuyang_wang 2002-10-14
  • 打赏
  • 举报
回复
itemchanged事件中写RETURN 1,就会触发数据窗口的错误提示,从而使得难以移动焦点,并且这个数据也不被更新accepttext,所以保存不上。
将return 1改为return即可。
如果你写了return 1,则必须要求用户对这个错误做一个处理,直到正确为止。所以,你试一下在出现错误后修改数据直到正确,然后保存是否成功,如果成功就是这的原因,否则可能是数据窗口更新属性的原因。
ufo_ufo 2002-10-11
  • 打赏
  • 举报
回复
还是不行
ufo_ufo 2002-10-11
  • 打赏
  • 举报
回复
不是这个问题 :(

pufan 2002-10-11
  • 打赏
  • 举报
回复
你的保存按钮中的dw_1.accepttext()
改为if dw_1.accepttext()<>1 then return
应该没有问题了.
pufan 2002-10-11
  • 打赏
  • 举报
回复
if ls_code = is_code then return 0
有点多余,屏蔽运行试试.
ufo_ufo 2002-10-11
  • 打赏
  • 举报
回复
只和数据库的数据比较,外面的不管

关键问题是发生错误后,数据再也保存不了了。
ufo_ufo 2002-10-11
  • 打赏
  • 举报
回复
不行, 没什么区别阿
tiggerliu 2002-10-11
  • 打赏
  • 举报
回复
老弟,重复项能这样判断吧?如果未保存的相同s_wrappage_code不是不能判断?何不用一循环:

int li_Row,li_RowCount
string ls_code

if dwo.name = "s_wrappage_code" then
li_RowCount =this.Rowcount()

for li_Row =1 to row -1
ls_code =this.getitemstring(li_Row,"s_wrappage_code")
if ls_code = data then
messagebox("error","error")
return 1
end if
next

for li_Row =row +1 to li_RowCount
ls_code =this.getitemstring(li_Row,"s_wrappage_code")
if ls_code = data then
messagebox("error","error")
return 1
end if
next
end if
return 0
pufan 2002-10-11
  • 打赏
  • 举报
回复
int li_count
string ls_code

if dwo.name = "s_wrappage_code" then
ls_code = this.gettext()

if ls_code = is_code then return 0

select count(*)
into :li_count
from t_wrappage
where s_wrappage_code = :ls_code;
if li_count > 0 then
messagebox("error","error")
return 1
end if
end if
return 0
这样试试
ufo_ufo 2002-10-11
  • 打赏
  • 举报
回复
检查重复项阿,如果有,则报错
pufan 2002-10-11
  • 打赏
  • 举报
回复
你的用意是什么啊?
ufo_ufo 2002-10-11
  • 打赏
  • 举报
回复
int li_count
string ls_code

if dwo.name = "s_wrappage_code" then
ls_code = data

if ls_code = is_code then return 0

select count(*)
into :li_count
from t_wrappage
where s_wrappage_code = :ls_code;
if li_count > 0 then
messagebox("error","error")
return 1
end if
end if
return 0
pufan 2002-10-11
  • 打赏
  • 举报
回复
贴一下程序代码.
ufo_ufo 2002-10-11
  • 打赏
  • 举报
回复
的确同楼上说的, 有1,2 两项原因,我该怎么处理??
booksfount 2002-10-11
  • 打赏
  • 举报
回复
避免重复,在此字段建立索引就行了,不用自己编程,系统自动监测。
qiuyang_wang 2002-10-10
  • 打赏
  • 举报
回复
一、itemchanged事件中写了RETURN 1
二、有对话框弹出MESSAGEBOX。
三、保存前没有ACCEPTTEXT。
以上三种情况在特定的情况下都可能影响数据的保存,不知你是怎么回事,出错后又做了那些处理?
JIANXIN_LU 2002-10-10
  • 打赏
  • 举报
回复
把你的问题说得明白一些?
VS风格的ToolBox和QQ的界面很相似,都是有多个栏目,并且这些栏目可以展开和折叠,当鼠标在某个子栏目上时,可以高亮显示,另外在VS风格的ToolBox中,点击选中项目的时候,要用特殊的颜色标识出来。 1. 创建控件的边框,我在前边的文章也讲过(),直接将代码复制过来,稍做修改即可。 2. 添加滚动条,因为我们的控件只需要垂直的滚动,所以我只只加入一个垂直的滚动条。 3. ToolBox包含多个Category,我们不但要创建Category类,还要创建这个类的集合。 4. 每一个Category包含多个Item,我们不但要创建ToolBoxItem类,还要创建这个类的集合。 5. 重载OnPaint方法,绘制控件的内容,在绘制的时候要注意滚动条的当前值,由于采用了双缓冲机制,所以每次总是将所有的内容重绘一次,不考虑ClipRect。 6. 写一个方法,根据鼠标的坐标计算出鼠标指向的Item或者Category,这个方法是这个控件的核心。 7. 重载OnMouseMove方法,当鼠标指向某个Item的时候,高亮显示出来。 8. 重载 OnMouseDown方法,当鼠标在某个Item上按下的时候,用指定的颜色标识出来,如果鼠标按下的地方是一个Category,根据当前的情况展开或者时折叠这个category。 9. 计算控件当前状态的内容的总的高度,用于设置滚动条的可见与不可见。 10. 暴露一个属性,用于为用户提供当前选中的Item。 11. 声明一个ItemChanged事件,便于用户在选择另一个Item时添加处理的代码。 实现了上述的内容,这个控件也就基本完成了。由于代码并不复杂,我就不将代码列出来讲解了,我将提供代码的下载,大家在看代码的时候,如有不明白的地方,可以参考我前面的控件教程。因为只花了几个小时写的这个控件,难免还有一些问题,请大家指出。
关于进程&线程查看器 用过vc++自带的Process Viewer,觉得这个小程序简单易用,有时候作用还很大,我就产生了自己做一个类似程序的想法,想着想着就着手作了起来。  首先我查看了有关进程和线程的api函数(在tlhelp32.h中)了解了他们的用法。  具体实施阶段:   界面设计:该实用程序的界面几乎完全参考vc++自带的Process Viewer,以前从未接触过CListView,这回是从头开始作,我参考了"MFC Windows程序设计"里面有详细的关于CListView的介绍和实例,不过有些地方它并未讲清楚,你只能看mfc源代码凭经验猜测某个函数的用法以及某些事件产生的消息,比如当所选Item改变时产生消息LVN_ITEMCHANGED,这个消息使我能在选中某一个Item时能通知线程视图更新。界面设计的另一个问题是分割窗口,这也是我第一次接触CSplitterWnd类,我使用了静态分割创建窗口的方法,以加入两个不同的视图其类分为:CThreadList和CProcessView. 下面简单介绍一下,该程序的功能正如其名,当你启动该程序时,它会检索当前在该系统中的进程和线程,并将进程的基本信息以列表的形式列出来,当你选中某一进程时,程序会在下面的线程视图中列出该进程的所有线程的基本信息。由于刚刚作玩,所以没有进行系统的测试,里面可能有一些bug希望用户发现后能与我联系,谢谢。

1,079

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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