我的调用程序是这样:
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 事件的要设为假但又不知道在那里加上,什么加?
请各位大侠帮我看看是什么原因,急阿,老板叫赶工已经两天了搞不定再搞不定就下走人了.....
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 事件的要设为假但又不知道在那里加上,什么加?
请各位大侠帮我看看是什么原因,急阿,老板叫赶工已经两天了搞不定再搞不定就下走人了.....
请大侠们先救急先,完工以后肯定要去学习DTS包的问题.........
经过分析终结出以下几种解决办法:程序大概功能:使用了多个线程调用多个DTS,有执行完的就在FORM上更新执行结果。运行时有时会出现以上错误。1.单线程执行,使各个DTS调用不会产生并发,也就不会出现错误了。2.在执行前让数据库执行
ALTER DATABASE MyDB SET MULTI_USER WITH ROLLBACK IMMEDIATE
这样就可以多用户访问了,也不会出现错误。
ObjPackage.Execute; ObjExecPkg := Null;
ObjTask := Null;
ObjStep := Null;
ObjPackage.UnInitialize;
//DTS导入导出没结束就执行了 UnInitialize 会调用OnQueryCancel 取消操作