我import type library一个dtsserver,生成了DtsServer_和DtsServerStorage90,可是不知道该怎么用?望指点一下,在里面也没找到exec之类的方法。
-----------------------
请不要回复为什么要调用dts的问题,原因有二:
1、相对简单
2、需要程序中触发,手工启动,而不是定时运行。

解决方案 »

  1.   

    一些相关的代码,供参考:procedure TForm1.Button1Click(Sender: TObject);
      procedure oCustomTask2_Trans_S1(oCustomTask2: DataPumpTask2);
      var
        oTransformationOld: Transformation;
        oTransformation: Transformation2;
      begin
        oTransformationOld := oCustomTask2.Transformations.New('DTS.DataPumpTransformCopy');
        oTransformation := oTransformationOld as Transformation2;
        oTransformation.Name := 'DirectCopyXform';
        oTransformation.TransformFlags := 63;
        oTransformation.ForceSourceBlobsBuffered := 0;
        oTransformation.ForceBlobsInMemory := False;
        oTransformation.InMemoryBlobSize := 1048576;
        oTransformation.TransformPhases := 4;
        oCustomTask2.Transformations.Add(oTransformation);
        oTransformation := nil;
        oTransformationOld := nil;
      end;
    var opackageold: package;
        opackage: package2;
        dts_conn,dts_conn2:connection;
        dts_task:task;
        dts_customtask:customtask;
        dts_pumptask:datapumptask2;
        dts_step:step;
    begin
      //package1.Execute;
      //CoInitialize;
      opackageold:=CoPackage.Create;
      opackage:=opackageold as package2;
      dts_conn:=opackage.Connections.new('Microsoft.Jet.OLEDB.4.0');
      dts_conn.ID:=1;
      dts_conn.DataSource:='c:\1.mdb';
      dts_conn2:=opackage.Connections.New('Microsoft.Jet.OLEDB.4.0');
      dts_conn2.ID:=2;
      dts_conn2.DataSource:='c:\2.mdb';
      opackage.Connections.Add(dts_conn);
      opackage.Connections.Add(dts_conn2);
      dts_step:=opackage.Steps.New;
      dts_task:=opackage.Tasks.New('DTSDataPumpTask');
      dts_task.Name:='Copy Data from 1.mdb to 2.mdb Task';
      dts_customtask:=dts_task.CustomTask;
      dts_pumptask:=dts_customtask as datapumptask2;
      dts_pumptask.Name:='Copy Data from 1.mdb to 2.mdb Task';
      dts_pumptask.SourceConnectionID:=1;
      dts_pumptask.SourceSQLStatement:='select * from table1';
      //dts_pumptask.SourceObjectName:='table1';
      dts_pumptask.DestinationConnectionID:=2;
      dts_pumptask.SourceSQLStatement:='select * from table1';
      //dts_pumptask.DestinationObjectName:='table1';
      dts_pumptask.ProgressRowCount:=100;
      dts_pumptask.ProgressRowCount := 1000;
      dts_pumptask.MaximumErrorCount := 0;
      dts_pumptask.FetchBufferSize := 1;
      dts_pumptask.UseFastLoad := True;
      dts_pumptask.InsertCommitSize := 0;
      dts_pumptask.ExceptionFileColumnDelimiter := '|';
      dts_pumptask.ExceptionFileRowDelimiter := #13#10;
      dts_pumptask.AllowIdentityInserts := False;
      dts_pumptask.FirstRow := 0;
      dts_pumptask.LastRow := 0;
      dts_pumptask.FastLoadOptions := 2;
      dts_pumptask.ExceptionFileOptions := 1;
      dts_pumptask.DataPumpOptions := 0;
      dts_step.Name:='LowerCaseStep';
      dts_step.TaskName:=dts_pumptask.Name;
      dts_step.ExecuteInMainThread:=true;
      oCustomTask2_Trans_S1(dts_pumptask);
      opackage.Tasks.Add(dts_task); 
      opackage.Steps.Add(dts_step);
      opackage.Execute;
      opackage.UnInitialize;
    end; 
      

  2.   

    看看这个链接http://cache.baidu.com/c?m=9d78d513d99516f11ab7cf690d6781205840c72362d88a5339968449e079461b1c71e3cc77714b5294d27c1050f21641a2aa6f336a5766aacb96d51fc0e0d47f7095213f721b824413d51cabcd4624c0219a5dbaff1eb3bdf43884aea589990b0d&p=cb759a46d79b12a059b6c0651142&user=baidu
      

  3.   

    卡庙兄弟,这是调用在sqlserver2000下的dts包,2005的测试了吗?首先DTSCustTasks_TLB,DTSPump_TLB,DTS_TLB;
    这3个单元就不存在了
      

  4.   

    Microsoft DTS Custom Tasks object Library(CustTask.dll) -> DTSCustTasks_TLB
    Microsoft DTSDataPump Scripting object Library(DTSPump.dll) -> DTSPump_TLB
    Microsoft DTS Runtime x (DTS.dll)-> DTS_TLB =>x表示版本号
      

  5.   

    我的调用方法如下,但是提示异常“指定的文件不是包存储文件”,dtsx格式该如何调用?
    execdts('testdtsx.dtsx');
    ------------------------------------------------------------------------------------------------function TForm1.execdts(strdts_name: string): boolean;
    var
      n:   variant;
      oconnection:   variant;
      ostep,otask,ocustomtask,mopackage:   variant;
    begin
      mopackage   :=   createoleobject('dts.package2');
      oconnection   :=   mopackage.connections.new('sqloledb');
      ostep   :=   mopackage.steps.new;
      otask   :=   mopackage.tasks.new('dtsexecutepackagetask');
      ocustomtask   :=   otask.customtask;
      mopackage.failonerror   :=   true;  ocustomtask.packagepassword   :='';
      ocustomtask.filename   :=   strdts_name;
      ocustomtask.name   := 'execpkgtask';  ostep.taskname   :=   ocustomtask.name;
      ostep.name   := 'execpkgstep';
      ostep.executeinmainthread   :=   true;  mopackage.steps.add(ostep);
      mopackage.tasks.add(otask);
      try
          mopackage.execute;
      except
          ocustomtask   :=   n;
          otask   :=   n;
          ostep   :=   n;
          mopackage.uninitialize;
          execdts   :=   false;   
          exit;   
      end;
        
      execdts   :=   true;
      ocustomtask   :=   n;
      otask   :=   n;
      ostep   :=   n;
      mopackage.uninitialize;
    end;
      

  6.   

    for i :=0 to workstations.Items.Count-1 do
      begin
            packagename:='temptransform';  //包名
            if databasetable.Text = 'T_FamilyWatchTV' then
            packagename:='transform';
            str:='dtsrun /S '+sServer+' /U sa /P fhwlcatv /N '+packagename+'  '+
            ' /A "areano":"8"='+copy(workstations.Items.Strings[i],1,6)+#37''+
            ' /A "database":"8"='+database.Text+' /A "begintime":"8"='+DateToStr(begintime.Date)+''+
            ' /A "tablename":"8"=['+database.Text+'].[dbo].[FamilyRating] '+
            ' /A "minsecond":"8"='+minsecond.Text+'  /A "maxhour":"8"='+maxhour.Text+'';
            str:='exec master.dbo.xp_cmdshell '''+str+' ''';
            ShowMessage(str) ;
            UnitDataModule.DataModule1.adoquery3.close;
            UnitDataModule.DataModule1.adoquery3.SQL.Clear;
            UnitDataModule.DataModule1.adoquery3.SQL.Add(str);
            UnitDataModule.DataModule1.ADOQuery3.open;
      end;我一直用的程序段
      

  7.   

    zhangzhifeng886:你这是调用了dtsrun外部工具吧?这样的话每个客户机还得安装该工具吧。另外,for循环中workstations是什么东东。
      

  8.   

    用c#编写调用dtsx的dll,Delphi调用该dll,一个思路,不知道是不是可行。try it
      

  9.   

    先要安装dtspkg.dll和dtspump.dlluses ..COMObj;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 := 'C:\DTS_UE\TestPkg\VarPubsFields.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;