Announcement

Collapse
No announcement yet.

SQL-Server 2005: DTS-Paket erstellt Excel-Datei nicht

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

  • SQL-Server 2005: DTS-Paket erstellt Excel-Datei nicht

    Guten Tag zusammen,

    in unserer Firma haben wir folgendes Problem:

    Wir benutzen Prozeduren, welche DTS-Pakete aufrufen. Diese Pakete erstellen zum Beispiel eine Excel-Datei oder eine TXT-Datei und füllen diese dann mit den entsprechenden Daten. Das Problem ist, dass folgendes Paket, keine Excel-Datei erstellt.

    Das Problem wurde von unserer Seite hier nicht gefunden, deshalb habe ich beschlossen dieses jetzt mal ins Forum zu stellen. Vielleicht kann jemand von Euch uns helfen.

    Also erst mal zum Code der Prozedur:

    Code:
    USE [DatenbankName]
    GO
    /****** Objekt:  StoredProcedure [dbo].[eda_to_excel]    Skriptdatum: 12/01/2008 12:56:41 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER                                 procedure [dbo].[eda_to_excel]
    (@path varchar(200),
     @filename varchar(200),
     @in_clause varchar(1000)='')
    as
     
     DECLARE @hr int,  
     @paket int,
     @fullfilename varchar(400),
     @dummy int,
     @duplicates int,
     @export int ,
     @brutto int ,
     @spacer int,
     @sql varchar(4000),
     @statement varchar(4000),
     @server varchar(50),
     @sql_old varchar(4000)
     set @server = @@servername
     set @fullfilename = @path +'\'+@filename 
     set @dummy = 1 
       
     EXEC @hr = master.dbo.sp_OACreate 'DTS.Package', @paket output  
     EXEC @hr = master.dbo.sp_OAMethod    
                     @paket,  
                     'LoadFromSQLServer',   
                     NULL,  
                     '(local)',   
                     NULL,  
                     NULL,  
                     256,
                     NULL,  
                     NULL,  
                     NULL,  
                     'export_eda' -- Name des Pakets  
     set @sql_old ='Tasks("Copy Data from Ergebnisse to EDA Task").Properties("SourceSQLStatement").Value'
     execute @hr = sp_OAGetProperty @paket, @sql_old, @statement output
     
    
    
    if @in_clause !=''
     begin
    	 set @sql =replace(@statement, 'and vermerk=''EDA2''','and mailcode in ('+@in_clause+ ') and vermerk=''EDA2''')
     execute @hr = sp_OASetProperty @paket, 'Tasks("Copy Data from Ergebnisse to EDA Task").Properties("SourceSQLStatement").Value', @sql
     
    set @sql_old ='Tasks("Copy Data from Ergebnisse to EDA Task").Properties("SourceSQLStatement").Value'
     	execute @hr = sp_OAGetProperty @paket, @sql_old, @statement output
    
     end
     
     EXEC @hr = sp_OASetProperty @paket, 'connections("Ziel").DataSource',@fullfilename
     
     EXEC @hr = sp_OASetProperty @paket, 'GlobalVariables("fullfilename").Value',@fullfilename
     EXEC @hr = sp_OASetProperty @paket, 'connections("Quelle").DataSource',@server
     exec @hr = master.dbo.sp_OAMethod  @paket,  
          'Execute', NULL 
    
    
       
    EXEC @hr = master.dbo.sp_OADestroy @paket
    Nun, zum DTS-Paket:

    1. ActiveX-Skripttask: nicht definiert

    Code:
    '**********************************************************************
    '  Visual Basic-ActiveX-Skript
    '************************************************************************
    
    Option Explicit
    
    Function Main()
    	
    	Dim oFSO
      	Dim catDB
      	Dim catTBL
    	Dim oConn
                 dim Blatt(3)
    	dim x
    	Dim strPathFileName, xlApp, xlBook ,mysheet
    	strPathFileName = DTSGlobalVariables("fullfilename").Value
                 blatt(0)="Recherche_erfolglos"
    	blatt(1)="eda"
    	blatt(2)="ip"
    	blatt(3)="eda2"
                
     	 ' FSO - Objekt erstellen
      	Set oFSO = CreateObject("Scripting.FileSystemObject")
      
     	 ' Test, ob Datei bereits existiert. Gegebenenfalls löschen.
     	 If oFSO.FileExists(strPathFileName) Then
        oFSO.DeleteFile strPathFileName
      End If
      
      ' FSO - Objekt aufräumen
      Set oFSO = Nothing
      Set catDB = CreateObject("ADOX.Catalog")
      
      catDB.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Extended " _
        & "Properties=""Excel 8.0"";mode=share deny none;Data Source=" & strPathFileName
    
      
    for x= 0 to 3
     Set catTBL = CreateObject("ADOX.Table")
      With catTBL
        .Name =Blatt(x)       ' Name des Excel - Arbeitsblattes
        Set .ParentCatalog = catDB
        With .Columns
    	 .Append "paket", 3
    	.Append "mailcode", 202
    	.Append "contact_nr",3
    	.Append "mannr",3
    	.Append "adrnum",3
    	.Append "titel",202
    	.Append "vname",202
    	.Append "fname", 202
    	.Append "fname_zusa",202
    	.Append "strasse",202
                 .Append "name2",202
    	.Append "plz", 202
    	.Append "ort",202
    	.Append "telefon",202
    	.Append "buchdat", 7
    	.Append "cc_qual", 3
    	.Append "sternchen", 202
    	.Append "tel_ber",202
    	.Append "änderung", 202
    	.Append "recherche",202
        End With
      
    
      End With
      catDB.Tables.Append catTBL
     next 
    
    
      Set catTBL = Nothing
      Set catDB = Nothing
    
    
    	Main = DTSTaskExecResult_Success
    End Function
    Nun, die Fehlermeldung im Log-File des Paketes:

    ************************************************** ****************************** ********************
    Fehler beim Ausführen des folgenden DTS-Pakets:

    Fehlerquelle: Microsoft Data Transformation Services-Paket (DTS)
    Fehlerbeschreibung: Fehler bei Paket aufgrund von Fehler bei Schritt 'DTSStep_DTSActiveScriptTask_1'.
    Fehlercode: 80040428
    \Hilfedatei für Fehler: sqldts80.hlp
    Hilfekontext-ID für Fehler: 700


    Paketname: export_eda
    Paketbeschreibung: export_eda
    Paket-ID: {87E59CB2-1645-4D3C-BAB6-E89BD0175CD3}
    Paketversion: {8557532F-F3AB-4FA7-AF69-02A5254CEA82}
    Paketausführungsherkunft: {BEB75D8D-302F-4480-9C31-79F764233D92}
    Ausgeführt auf: PCName
    Ausgeführt von: SYSTEM
    Ausführung gestartet: 01.12.2008 13:04:51
    Ausführung abgeschlossen: 01.12.2008 13:04:51
    Gesamtausführungszeit: 0.047 Sekunden

    Paketschritt-Ausführungsinformationen:


    Schritt 'Copy Data from Ergebnisse to EDA Schritt' wurde nicht ausgeführt.

    Fehler bei Schritt 'DTSStep_DTSActiveScriptTask_1'.

    Schritt-Fehlerquelle: Microsoft Data Transformation Services-Paket (DTS)
    Schritt-Fehlerbeschreibung: Fehlercode: 0
    Fehlerquelle= Microsoft JET Database Engine
    Fehlerbeschreibung: Unbekannter Fehler

    Fehler in Zeile 33.

    Schritt-Fehlercode: 800403FE
    Schritt-Hilfedatei für Fehler: sqldts80.hlp
    Schritt-Hilfekontext-ID für Fehler: 4500

    Schrittausführung gestartet: 01.12.2008 13:04:51
    Schrittausführung abgeschlossen: 01.12.2008 13:04:51
    Gesamte Schrittausführungszeit: 0.015 Sekunden
    Fortschrittswert in Schritt: 0
    ************************************************** ****************************** ********************
    Noch zu unserem System:

    Betriebssystem: Windows XP Prof. Service Paket 2
    Office 2003 Service Paket 3
    SQL-Server 2005 (DTS-Designer ist installiert...)

    Hoffe ich habe alle Angaben geliefert. Falls ihr noch weitere Angaben benötigt, werde ich diese gerne nachliefern.

    Vielleicht noch zu erwähnen ist, dass das Paket die Excel-Datei erstellt und ohne Probleme mit Daten füllt, wenn ich es separat im DTS-Designer ausführe. Führe ich es jedoch aus der Prozedur hinaus auf, dann klappt es nicht und oben erwähnter Fehler erscheint.

    Ich hoffe ihr könnt mir helfen...

    Gruess Roger U.
    Attached Files
    Zuletzt editiert von worf1001; 04.12.2008, 15:46.

  • #2
    Hallo Roger,

    das einzige, was man aus der tollen Fehlermeldung lesen kann, ist das JET schuld ist.
    Also wird der Fehler genau dann entstehen, wenn die XLS neu erstellt werden soll.

    Ich tippe mal auf Berechtigungen & das die XLS auf einem Netzlaufwerk erzeugt werden soll, also nicht lokal auf dem Server!?

    Wenn ich nicht falsch liege (kommt vor) und Du es von Designer aus startest, läuft es unter Deinem Benutzer- NT Account mit Deinen Berechtigungen.
    Wird es aber von einer SP ausgeführt, dann geschieht das unter dem Account, unter dem der SQL Server Dienst läuft und das ist häufig "LOCAL SYSTEM"; der darf nur auf lokale Resourcen zugreifen und nirgends sonst im Netz.
    Liegt es vielleicht bei Euch daran?
    Lass mal die XLS auf eine lokale Platte des Servers erstellen.


    P.S.: Im 2005 gibt es übrigens den SSIS (statt DTS), das ist auch recht hübsch.
    Olaf Helper

    <Blog> <Xing>
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich

    Comment


    • #3
      Ciao Olaf,

      danke für Deine Antwort.

      Ich tippe mal auf Berechtigungen & das die XLS auf einem Netzlaufwerk erzeugt werden soll, also nicht lokal auf dem Server!?
      Nein, ich habe das DTS-Paket lokal und versuche auch lokal auf meine Festplatte zu schreiben. Interessant ist, dass ich mit anderen Paketen TXT-Dateien oder DBF-Dateien (Visual FoxPro) schreiben kann.

      Ich weiss von SSIS. Nur ist der momentane Aufwand sehr gross, alle Pakete und alle Prozeduren entsprechend umzubauen.

      Also an die Berechtigungen habe ich auch schon gedacht. Jedoch sehe ich nirgends etwas was diesen Umstand erklären kann.

      Gruess Roger U.

      Comment

      Working...
      X