起步软件技术论坛-X3

 找回密码
 立即注册
搜索
楼主: dragonsoft

【结贴】流程监控、待办任务问题**

[复制链接]
 楼主| 发表于 2008-10-23 15:45:09 | 显示全部楼层
我们改了后进去是比较快了,但是提交保存后去刷新的取数据会提示ttaskmessage.frperson标识符无效,如何处理。
回复 支持 反对

使用道具 举报

发表于 2008-10-23 15:56:54 | 显示全部楼层
30楼和31楼都是怎么改的?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-23 16:02:38 | 显示全部楼层
30楼的是修改你提供的sql在数据库执行,31楼是在程序修改,就是修改成我之前贴的sql语句格式,但是就在提交的时候会提示ora-00904 “TTASKMESAGE”.“FRPERSON”:标识符无效
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-23 16:16:50 | 显示全部楼层
procedure TTaskCenterInfo.TaskUpdate(const TaskGUID: array of string);
var
  S: string;
  I: Integer;
  Q: TSQLDataSet;
  SaveReadOnly, SaveFiltered: Boolean;
begin
  if not DataSetTaskIndex.Active then
    Exit;

  S := System.String.Join(''', ''', TaskGUID);
  Q := TSQLDataSet.Create(Self);
  try
    Q.Database.URL := DataSetTaskIndex.Database.URL;
    Q.SQL.Text := 'select * from TTASK where FGUID in (''' + S + ''')';
    Q.SQLFilter := DataSetTaskIndex.SQLFilter;
    Q.SQLFiltered := DataSetTaskIndex.SQLFiltered;
    Q.UserFilter := DataSetTaskIndex.UserFilter;
    Q.Open;
    Q.Order := 'FGUID';
    DataSetTaskIndex.DisableControls;
    SaveReadOnly := DataSetTaskIndex.ReadOnly;
    SaveFiltered := DataSetTaskIndex.Filtered;
    try
      DataSetTaskIndex.ReadOnly := False;
      DataSetTaskIndex.Filtered := False;
      DataSetTaskIndex.First;
      for I := Low(TaskGUID) to High(TaskGUID) do
      begin
        S := TaskGUID[I];
        if (FTask <> nil) and (FTask.GUID = S) then
          FTask := nil;
        if DataSetTaskIndex.Locate('FGUID', [S], []) then
          if Q.FindKey([S]) then
          begin
            DataSetTaskIndex.Edit;
            try
              CopyFields(Q, DataSetTaskIndex);
              DataSetTaskIndex.Post;
            except
              DataSetTaskIndex.Cancel;
              raise;
            end;
          end
          else
            DataSetTaskIndex.Delete
        else
          if Q.FindKey([S]) then
          begin
            DataSetTaskIndex.Append;
            try
              CopyFields(Q, DataSetTaskIndex);
              DataSetTaskIndex.Post;
            except
              DataSetTaskIndex.Cancel;
              raise;
            end;
          end;
      end;
    finally
      DataSetTaskIndex.Filtered := SaveFiltered;
      DataSetTaskIndex.ReadOnly := SaveReadOnly;
      DataSetTaskIndex.EnableControls;
    end;
  finally
    Q.Free;
  end;
end;



请解释一下这段话是啥意思,DataSetTaskIndex与Q的数据不是一样吗?为什么要再Copy一次,然后再Post呢?这个有更新到数据库里吗?如果有,我想改成用Sql来写,可以吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-23 16:36:13 | 显示全部楼层
出错的图片
回复 支持 反对

使用道具 举报

发表于 2008-10-23 17:15:13 | 显示全部楼层
楼主,系统中有很多地方用到了这个sql语句,而且它的查询条件都是通过函数动态生成的,不能直接修改。
我们现在只能想办法优化一下条件部分了。

对了,确认一下,
1、你的任务和任务消息表是多少条记录(我看1楼说,任务表200多万,消息表90万)

2、任务表和任务消息表都建了哪些索引
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-23 17:23:38 | 显示全部楼层
就是1楼的数据啊,抓紧吧如果能改成我贴的哪种写法就好,速度就非常快了,到了1TB数据我再考虑分区没有什么大问题了,不知道什么时候可以给出答案啊,
拜托了,已经快一个礼拜了,用户怨言铺天盖地
回复 支持 反对

使用道具 举报

发表于 2008-10-23 17:24:58 | 显示全部楼层
1、你的任务和任务消息表是多少条记录(我看1楼说,任务表200多万,消息表90万)
   任务消息表应该比任务表记录更多才对的

2、任务表和任务消息表都建了哪些索引

3、Oracle版本多少?

4、22楼的sql,楼主把排序部分去掉,速度如何
   ORDER BY MyField Desc, FCREATETIME desc
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-23 17:33:05 | 显示全部楼层
最初由 jiahaiming 发布
[B]1、你的任务和任务消息表是多少条记录(我看1楼说,任务表200多万,消息表90万)
   任务消息表应该比任务表记录更多才对的


2、任务表和任务消息表都建了哪些索引

3..

以下省略...... [/B]


1.消息表的数据量是2327673条
  任务表数据量是1001021条
2.任务表的索引有FGUID、fcreatetime、fflowguid、fstate、flastchangetime、fsdept、fsorgurl 、fsperson、fsposition、fstarttime;
消息表的索引有:FtaskGUID、fstate、fsdept、frorgurl 、fsperson、frdept、frperson、frpostion
3.oracle的版本oracle 10GR2    10.2.3
4.把排序去掉速度也是很慢没有效果。
回复 支持 反对

使用道具 举报

发表于 2008-10-23 17:33:52 | 显示全部楼层
还有两个问题
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-28 02:21 , Processed in 0.042238 second(s), 14 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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