我的调用程序是这样:
procedure TLoginForm.Button6Click(Sender: TObject);
var
  ObjPackage, ObjStep, ObjTask, ObjExecPkg: variant;
begin
                  ObjPackage := CreateOLEObject('DTS.Package2');
                  ObjPackage.failonerror := true;
                  ObjStep    := ObjPackage.steps.new;
                  ObjTask    := ObjPackage.tasks.new('DTSExecutePackageTask');
                  ObjExecPkg := ObjTask.customtask;                  ObjExecPkg.PackagePassword := 'user';
                  ObjExecPkg.FileName := ExtractFilePath(ParamStr(0))+'DTS_YPLS.dts';;
                  ObjExecPkg.Name := 'ExecPkgTask';                  ObjStep.TaskName := objExecPkg.Name;
                  ObjStep.Name := 'ExecPkgStep';
                  ObjStep.ExecuteInMainThread := True;                  ObjPackage.Steps.Add(ObjStep);
                  ObjPackage.Tasks.Add(ObjTask);
                  ObjPackage.Execute;                  ObjExecPkg := Null;
                  ObjTask := Null;
                  ObjStep := Null;
                  ObjPackage.UnInitialize;end;DTS包里是几步导数据的,请问为什么在最后一步出现"执行已被用户取消"的异常?
在delphi7直接运行后点按钮执行又没有事,但编译后运行Exe文件点按钮就有上面的异常.
我在网上查了说有个OnQueryCancel 事件的要设为假但又不知道在那里加上,什么加?
请各位大侠帮我看看是什么原因,急阿,老板叫赶工已经两天了搞不定再搞不定就下走人了.....

解决方案 »

  1.   

    自己顶一下,说实在的就因为赶工所以没有时间真正去学习SQL的DTS包的问题,
    请大侠们先救急先,完工以后肯定要去学习DTS包的问题.........
      

  2.   

    我是用C#写的程序,也出现了你说的问题,提示“执行已被用户取消”。
    经过分析终结出以下几种解决办法:程序大概功能:使用了多个线程调用多个DTS,有执行完的就在FORM上更新执行结果。运行时有时会出现以上错误。1.单线程执行,使各个DTS调用不会产生并发,也就不会出现错误了。2.在执行前让数据库执行
    ALTER DATABASE MyDB SET MULTI_USER WITH ROLLBACK IMMEDIATE
    这样就可以多用户访问了,也不会出现错误。
      

  3.   


      ObjPackage.Execute;   ObjExecPkg := Null; 
      ObjTask := Null; 
      ObjStep := Null; 
      ObjPackage.UnInitialize; 
      //DTS导入导出没结束就执行了  UnInitialize 会调用OnQueryCancel 取消操作