起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 305|回复: 10

错误!**

[复制链接]
发表于 2009-7-3 14:34:36 | 显示全部楼层 |阅读模式
测试时没测出问题,但给用户使用时偶尔会出现图中的错误!

aa.jpg

183.96 KB, 下载次数: 132

回复

使用道具 举报

 楼主| 发表于 2009-7-3 14:38:39 | 显示全部楼层
想问下这个错误一般是在什么情况下出现,我现在测试没有发现这个问题。因此代码也无法跟踪。
回复 支持 反对

使用道具 举报

发表于 2009-7-3 15:03:57 | 显示全部楼层
这个要结合具体的代码分析,从图上看不出原因来。
建议:
1、在客户机器上装个建模工具直接调试运行
2、或者,尽量搜集用户的使用情况,将错误范围缩小到窗体甚至函数,然后分析代码。

方法2会比较麻烦
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-7-3 15:09:08 | 显示全部楼层
从用户的贴图来看是在以个DataGrid的单击事件上发生的。
这个事件的代码只是执行了几个UPDATE语句。
   楼上的能帮我翻译下 图中的错误吗?  非常感谢!
回复 支持 反对

使用道具 举报

发表于 2009-7-3 15:22:54 | 显示全部楼层
重点检查一下代码中系统模型相关的对象使用。

另外确认一下,是否只执行了这一个事件
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-7-3 15:37:38 | 显示全部楼层
刚才问过了 ,确实是只是在数据网格的单击事件中发生的。
  代码里面我当时写的时候,UPDATE后的动作是DataSet.Refresh  结果报错,错误停留在刷新语句上。

  后来我换成了 DataSet.Close;DataSet.Open;就不报错了。

今天检查代码的时候我又换回 DataSet.Refresh 没有出现以前的错误。这之间没有变动其他代码。
回复 支持 反对

使用道具 举报

发表于 2009-7-3 15:47:20 | 显示全部楼层
贴出代码来看看吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-7-3 15:50:32 | 显示全部楼层
if  ( not WORK_TASK_HIS_DT.DataSet.IsEmpty )  then
    begin
         if (s_status=2) and (sysutils.Trim(memo1.Text)<>m_text) then
                begin
                  if   jsdialogs.ConfirmBox('任务汇报更新后未保存,是否保存','确认提示',1) then
                      begin
                        query.Close;
                        query.CommandText:='update work_task_his set REPORT = '''+sysutils.Trim(memo1.Text)+''',FEED_BACK='''+sysutils.Trim(memo2.Text)+''',new_status=2,sta_date=sysdate  where  task_his_no = '+s_no+'';
                        query.Execute;
                        WORK_TASK_HIS_DT.DataSet.Refresh;
                        //WORK_TASK_HIS_DT.DataSet.Close;
                        //WORK_TASK_HIS_DT.DataSet.Open;
                        WORK_TASK_HIS_DT.DataSet.Order:='task_his_no';
                        WORK_TASK_HIS_DT.DataSet.Last;
                      end
                  else WORK_TASK_HIS_DT.DataSet.CancelUpdates;
                end;
         if (s_status=2) and (sysutils.Trim(memo2.Text)<>n_text) then
                begin
                  if   jsdialogs.ConfirmBox('任务反馈更新后未保存,是否保存','确认提示',1) then
                      begin
                        query.Close;
                        query.CommandText:='update work_task_his set REPORT = '''+sysutils.Trim(memo1.Text)+''',FEED_BACK='''+sysutils.Trim(memo2.Text)+''' where  task_his_no = '+s_no+'';
                        query.Execute;
                        WORK_TASK_HIS_DT.DataSet.Refresh;
                       // WORK_TASK_HIS_DT.DataSet.Close;
                       //WORK_TASK_HIS_DT.DataSet.Open;
                        WORK_TASK_HIS_DT.DataSet.Order:='task_his_no';
                        WORK_TASK_HIS_DT.DataSet.Last;
                      end
                  else WORK_TASK_HIS_DT.DataSet.CancelUpdates;
                end;
         s_status:=2;
         if checkbox1.Checked=true then
             ScrollBox2.Visible:=true
         else ScrollBox2.Visible:=false;
     if ( FuncBroker.Func.ID = 'TASK_REPORT_FUN' ) and( WORK_TASK_COPY_DT.DataSet.FieldByName('dutyer').AsString = Variants.VarToStr(sLOGIN_USER_ID.Value)) then
           begin
              if dateutils.DateOf(WORK_TASK_HIS_DT.DataSet.FieldByName('sta_date').AsDateTime) <> dateutils.DateOf(syssrv.SysService.Time) then
                 begin
                   dataedit1.Enabled:=false;
                   Memo1.ReadOnly:=true;
                 end
              else
                 begin
                   dataedit1.Enabled:=true;
                   Memo1.ReadOnly:=false;
                 end;
           end;
     if ( FuncBroker.Func.ID = 'TASK_REPORT_FUN' ) and( WORK_TASK_COPY_DT.DataSet.FieldByName('dutyer').AsString <> Variants.VarToStr(sLOGIN_USER_ID.Value)) then
            begin
             Memo1.ReadOnly:=true;
             dataedit1.Enabled:=false;
            end;
      if ( FuncBroker.Func.ID = 'TASK_MANAGE_FUN' ) and ((WORK_TASK_HIS_DT.DataSet.FieldByName('NEW_STATUS').AsString = '1') or (WORK_TASK_HIS_DT.DataSet.FieldByName('NEW_STATUS').AsString = '2')) then
          begin
             Query.Close;
             Query.CommandText:='update work_task_his set new_status = 0 where task_his_no ='+WORK_TASK_HIS_DT.DataSet.FieldByName('task_his_no').AsString+'';
             Query.Execute;
              WORK_TASK_HIS_DT.DataSet.Refresh;
            // WORK_TASK_HIS_DT.DataSet.Close;
             //WORK_TASK_HIS_DT.DataSet.Open;
             WORK_TASK_HIS_DT.DataSet.Order:='task_his_no';
             WORK_TASK_HIS_DT.DataSet.Last;
          end;
         s_no:=WORK_TASK_HIS_DT.DataSet.FieldByName('TASK_HIS_NO').AsString;
         memo1.Text:= WORK_TASK_HIS_DT.DataSet.FieldByName('REPORT').AsString;
         memo2.Text:= WORK_TASK_HIS_DT.DataSet.FieldByName('FEED_BACK').AsString;
         m_text:= sysutils.Trim(memo1.Text);
         n_text:= sysutils.Trim(memo2.Text);
    end;
end;
回复 支持 反对

使用道具 举报

发表于 2009-7-3 16:05:45 | 显示全部楼层
从代码上也看不出问题,楼主,你在重点怀疑的代码上加一些messagebox
通过这些对话框信息分析一下程序的执行轨迹,以及出错的大概位置
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-7-3 16:17:56 | 显示全部楼层
谢谢贾老师的回答,先结贴吧。我再找找,另外能帮我翻译下图片中错误的意思吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-19 07:57 , Processed in 0.039405 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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