Announcement

Collapse
No announcement yet.

DTS Pakete starten

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • DTS Pakete starten

    Hey Leute,
    hat jemand eine Idee, wie ich DTS Pakete
    mithilfe beines T-SQL-Befehls oder SP_'s starten kann.
    Habe nur DTSRun gefunden, der Rest war nur über den
    E-Manager zu realisieren.

    Danke im Vorraus..

  • #2
    Hallo,

    in T-SQL ist zur Zeit (SQL Server 2000) kein direkter Start eines DTS-Pakets möglich. Es gibt aber verschiedene Umleitungen für dieses Problem:<br>

    1. <b>xp_cmdshell</b> startet das Kommandozeilen-Tool dtsrun.exe<br>
    2. <b>sp_start_job</b> startet sofort einen Job über den <i>SQL Server Agent</i>, der dann das DTS-Paket ausführt <br>
    3. <b>sp_OACreate</b> ruft ein eigenes, mit Delphi geschriebenes COM-Objekt auf, welches über Automation das DTS-Paket ausführ

    Comment


    • #3
      Ich habe probiert, einen Job für den Agent einzurichten. Habe aber keinen Klicker oder Befehl zum ausführen von DTS-Paketen gefunden. Könntest Du mir Kurtz erläutern, wie man das macht..

      Danke Dir

      Comment


      • #4
        Hast du schon erfahrungen mit dem Com-Object "Microsoft DTSPackage Object Library" gemacht ? Mit diesem kann man wohl per Com ein Paket Laden ( Aus Datei / vom Server 9 und Ausführen ). Habe geschafft es vom Server zu laden aber nicht auszuführen

        Comment


        • #5
          Hallo,

          das könnte etwa so aussehen:
          <pre>
          var
          Form1: TForm1;
          oPackage : Package;

          implementation

          {$R *.DFM}

          procedure TForm1.Button1Click(Sender: TObject);
          var
          wsServerName, wsUserID, wsPassword, wsPackageName, ParamAll: OleVariant;
          begin
          oPackage := CoPackage.Create;
          wsServerName := WideString('(local)');
          wsUserID := WideString('sa');
          wsPassword := WideString('');
          wsPackageName := WideString('TESTDTS');
          oPackage.LoadFromSQLServer(wsServerName, wsUserID, wsPassword,
          ParamAll, ParamAll,ParamAll,ParamAll,wsPackageName,ParamAll) ;
          oPackage.Execute;
          end;
          </pre&gt

          Comment


          • #6
            Vielen Vielen Dank !

            Funktioniert Super

            Comment


            • #7
              Eine Sache hätte ich da noch.
              Wie komme ich am besten an das Sink-Object heran ?
              Es gibt 4 Events, die ich gern auswerten würde

              Danke Sasch

              Comment


              • #8
                Hallo,

                wenn beim Import der Typbibliothek eine VCL-Wrapperkomponente erzeugt wird (siehe Checkbox <i>Komponenten-Wrapper generieren</i>, legt Delphi eine neue Komponente auf der Palettenseite ab, so dass die Ereignisse <b>OnError, OnFinish, OnProgress, OnQueryCancel</b> und <b>OnStart</b> über den Objektinspektor ausgewertet werden können:
                <pre>
                unit Unit1;

                interface

                uses
                Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

                type
                TForm1 = class(TForm)
                Package1: TPackage;
                procedure Package1Error(Sender: TObject; var EventSource: OleVariant;
                ErrorCode: Integer; var Source, Description, HelpFile: OleVariant;
                HelpContext: Integer; var IDofInterfaceWithError,
                pbCancel: OleVariant);
                procedure Package1Finish(Sender: TObject; var EventSource: OleVariant);
                procedure Package1Progress(Sender: TObject; var EventSource,
                ProgressDescription: OleVariant; PercentComplete, ProgressCountLow,
                ProgressCountHigh: Integer);
                procedure Package1QueryCancel(Sender: TObject; var EventSource,
                pbCancel: OleVariant);
                procedure Package1Start(Sender: TObject; var EventSource: OleVariant);
                private
                { Private-Deklarationen }
                public
                { Public-Deklarationen }
                end;

                var
                Form1: TForm1;

                implementation

                {$R *.DFM}

                procedure TForm1.Package1Error(Sender: TObject;
                var EventSource: OleVariant; ErrorCode: Integer; var Source, Description,
                HelpFile: OleVariant; HelpContext: Integer; var IDofInterfaceWithError,
                pbCancel: OleVariant);
                begin

                end;

                procedure TForm1.Package1Finish(Sender: TObject;
                var EventSource: OleVariant);
                begin

                end;

                procedure TForm1.Package1Progress(Sender: TObject; var EventSource,
                ProgressDescription: OleVariant; PercentComplete, ProgressCountLow,
                ProgressCountHigh: Integer);
                begin

                end;

                procedure TForm1.Package1QueryCancel(Sender: TObject; var EventSource,
                pbCancel: OleVariant);
                begin

                end;

                procedure TForm1.Package1Start(Sender: TObject;
                var EventSource: OleVariant);
                begin

                end;

                end.
                </pre&gt

                Comment


                • #9
                  Das habe ich auch alles schon gemacht, ich habe auch schon eine eingene Komponente geschrieben, wo ich das Sink-Object selber angebunden habe. Ich habe vergessen zu schreiben, das sobald das Sink-Object also die Events angebunden sind, das ich dann beim Execute die Fehlermeldung EOLEException -> "Vom Provider generierte Ausnahme bei Programmausführung: EXCEPTION_ACCESS_VIOLATION". Wenn ich die Events (Das Sink Object) nicht anbinde, kann ich es ausführen.

                  Eine Idee ?
                  Danke im Vorrau

                  Comment


                  • #10
                    Hallo,

                    in der Tat scheint hier irgend etwas Schief zu gehen. Ich habe versucht, die Events-Unterstützung über ein eigenes TInterfacedObject nachzurüsten:
                    <pre>
                    aPackage := CoPackage.Create;
                    aPackage.LoadFromSQLServer('(local)', 'sa', '',
                    DTSSQLStgFlag_Default, '','','', 'OSDTSTask-Test1', v);

                    // Connection Point aktivieren
                    OleCheck(aPackage.QueryInterface(IConnectionPointC ontainer, aICPC));
                    OleCheck(aICPC.FindConnectionPoint(IID_PackageEven ts, FICP));
                    // Treffer ?
                    if(FICP <> nil) then
                    begin
                    FSinkObj := TPackageEventsObj.Create;
                    OleCheck(FICP.Advise(FSinkObj, FConnEventsID));
                    ShowMessage('PackageEvents aktiviert: ' + IntToStr(FConnEventsID));
                    end ;
                    for i := 1 to aPackage.Steps.Count do
                    aPackage.Steps.Item(i).ExecuteInMainThread := WordBool(True);
                    aPackage.FailOnError := False;
                    aPackage.Execute;
                    ShowMessage('Fertig');
                    if(FICP <> nil) then
                    FICP.Unadvise(FConnEventsID);
                    FICP := nil;
                    </pre>
                    Das Ganze wird auch fehlerfrei abgearbeitet - nur kommt keine Benachrichtigung bei meinem Sink-Objekt an

                    Comment


                    • #11
                      Gibt es Chancen, das man direct von Microsoft über diese Problematik auskunft bekommt ? Es scheint sich hier ja über einen "Bug ?" zu handeln

                      Comment


                      • #12
                        Hallo,

                        das Problem wird auf der Borland-Seite (Delphi) liegen, denn auf der CDROM zur Borland Conference 2000 wurde ein Delphi-Beispielprojekt für den Aufruf eines DTS-Paktets inklusive der Events-Unterstützung vorgestellt. Die dort zu findende Implementierung (inklusive separate IUnknown- und IDispatch-Methoden) ist sehr umfangreich (3 Hilfs-Units mit 16 kByte Größe). Und mit Visual Basic funktioniert das Ganze ja auch

                        Comment


                        • #13
                          Woher kann ich diese CD beziehen ?

                          Gruß Sasch

                          Comment


                          • #14
                            Hallo,

                            die erhielt damals jeder Teilnehmer der Borland Conference bzw. wurde auch den Teilnehmern der deutschen Entwickler Konferenz ausgehändigt. Da seitdem mehr als ein Jahr vergangen ist, steht dieses Beispiel sicherlich auch über die Borland-Newsgroups zur Verfügung. Eventuell liefert eine Suche über http://groups.google.com/ bereits einen Treffer, ansonsten ist die Borland-Newsgroup <i>borland.public.delphi.database.sqlservers</i> die richtige Stelle

                            Comment


                            • #15
                              Danke Dir,
                              ich werde mich mal durch die Newsgroups klicken.

                              Gruß Sasch

                              Comment

                              Working...
                              X