[SQL-Server 2000]Bestand kopieert niet goed in DTS

Pagina: 1
Acties:

  • UnderFlow
  • Registratie: November 2000
  • Laatst online: 15-01-2024
Mijn eerste post ooit in dit forum gedeelte :o , sla me niet als het niet helemaal volgens de richtlijnen is :).

Anyway, het volgende probleem doet zich voor in een DTS package in SQL server. We hebben een data transfer vanuit de sql server naar een excel bestand. Dit bestand is een template bestand wat in de volgende stap via een activex script wordt hernoemd en vervolgens gekopieerd. Alleen werkt die niet helemaal lekker als je de volledige DTS package uit laat voeren. Hij geeft geen foutmeldingen, maar het lijkt wel alsof het lege template excel bestand wordt gekopieerd en hernoemd wordt, en het gevulde template excel bestand in de werkdirectory blijft staan.

Wat het vreemde is, is dat als je de stappen handmatig een voor een uitvoert, dat je dat probleem dan niet hebt en dat het dan wel goed werkt. Het lijkt me daarom een soort timing issue waarbij het excel bestand wat gevuld werd nog niet vrij is gegeven of iets dergelijks.

Nu mijn vraag, is er een simpele mogelijkheid om binnen dat activex script te kunnen checken of het bestand al vrij is gegevens of iets in die geest en als dat niet het geval is, dat er een paar seconden gewacht wordt? Ik zou het ook iets gekunstelder kunnen proberen door een stap (bijvoorbeeld een mailtje) tussen het activex script en de data transfer te zetten, maar dat is niet echt een elegante oplossing :).

Dat of misschien weet iemand of er wellicht een optie beschikbaar is waardoor het script wacht.

Hoop dat dat een beetje duidelijk is :).

Alvast bedankt.

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Je kunt gewoon het Filescripting object instantieren en gebruiken om te controleren of een bepaalde file bestaat.

klik

Oops! Google Chrome could not find www.rijks%20museum.nl


  • Gé Brander
  • Registratie: September 2001
  • Laatst online: 15-04 19:43

Gé Brander

MS SQL Server

Je kan toch even om te testen of dat het probleem is, na elke stap een pauze van een paar seconden inlassen. Als het dan goed gaat, haal je 1 voor 1 de pauzes weg, totdat het fout gaat, dan weet je ook waar het probleem zit.

Vroeger was alles beter... Geniet dan maar van vandaag, morgen is alles nog slechter!


  • UnderFlow
  • Registratie: November 2000
  • Laatst online: 15-01-2024
Of het bestand bestaat checken, schiet niet op. Het template wordt namelijk netjes elke keer goed gekopieerd naar de werkdir en vervolgens gevuld. Dus het bestaat elke keer wel degelijk.

Het gekke is dat ik ook geen foutmelding krijg, maar dat uiteindelijk wel het lege template is gekopieerd ipv het gevulde. Het lege template is nl 15KB en het gevulde 3,5MB dus dat scheelt nogal en vandaar dat het ook opvalt.

Ik denk dat het te maken heeft met het locken van het excel bestand voor die data transfer task. Want als je zo'n task aan het aanmaken bent, kun je ook niet in het excel bestand wat bij die transfer task hoort. Het wordt gelocked of iets dergelijks. Vandaar dat ik het mooi zou vinden als er een mogelijkheid is om te kunnen checken of het bestand al vrij is gegeven.

Een pauze zal natuurlijk ook wel werken als het idd ligt aan wat ik hierboven aangeef. Maar dat vind ik een iets minder elegante oplossing. Of wellicht ben ik iets te ambitieus :D

ps: krijg zo snel niet terug gevonden in de helpfile hoe ik pauze's in activex in kan lassen :o

[ Voor 6% gewijzigd door UnderFlow op 29-12-2004 11:17 ]


  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

UnderFlow schreef op woensdag 29 december 2004 @ 11:15:
ps: krijg zo snel niet terug gevonden in de helpfile hoe ik pauze's in activex in kan lassen :o
Hoe het in een activex task werkt weet ik zo ook niet. Maar je kan ook een sql task toevoegen met daarin een WAITFOR.

Hiermee pak je de oorzaak natuurlijk niet aan, alleen de gevolgen. Houtje-touwtje dus ;)

Today's subliminal thought is:


  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
Wat je moet doen is de workflow goed zetten. Je kunt rechterclicken op de "copy excel" taak en dan workflow properties kiezen. Kies de source en destination step en kies als "Precedence" completion of succes. Dit zorgt er voor dat de destination step alleen uitgevoerd wordt als de source step klaar is. Precies wat jij nodig hebt dus.

Wij gebruiken altijd succes en hangen er een logtaak bij aan op failure. Die kun je dan weer mooi laten mailen, of in een tabel dumpen.

Om te checken of een bestand vrij is (wat niet nodig is als je je workflow goed zet, maar toch maar ff voor de volledigheid):

code:
1
2
3
4
5
6
7
8
9
10
11
12
Function Main()
    Set oBS = CreateObject("Scripting.FileSystemObject")
    path ="\\server\share"
    oMap = oBS.getFolder(path)
    If oBS.FileExists(oMap & "\bestand.CSV") Then
        Set textStreamObject = oBS.OpenTextFile(oMap & "\bestand.CSV",8,true,0)
        textStreamObject.Close()
        Main = DTSTaskExecResult_Success
    Else
        Main = DTSTaskExecResult_Failure
    End If
End Function


Dit stukje code (is een active script task) kijkt of de file bestaat, zo ja, dan probeert ie um te openen om te schrijven. Als dat goed gaat is de file beschikbaar. In dat geval geeft ie succes weer, en aan de hand daarvan kun je met workflow een volgende stap kiezen.

[ Voor 71% gewijzigd door zneek op 30-12-2004 20:11 ]

Pagina: 1