Avatar billede damkel Nybegynder
24. februar 2006 - 14:29 Der er 7 kommentarer og
1 løsning

Export fra DTS til fil - kan man tilføje og ikke overskrive filen

Hej

Jeg laver noget dataudtræk via DTS, som henter nogle data fra et view og som jeg lægger ned i en tekstfil.
Dette sker af flere omgange og jeg har derfor brug at kunne tilføje til filen istedet for at overskrive, hvilket den gør som standart.

Er det muligt?
Hvordan?
Avatar billede lorentsnv Nybegynder
24. februar 2006 - 14:36 #1
Det godt kan lade sig gøre, ved brug af en global variable hvor du genererer filnavnet med ActiveX scripting (brug f.eks. dato i filnavnet), og derefter bruger du en Dynamic Properties Task til at sette filnavnet i source eller tareget objektet.
Avatar billede lorentsnv Nybegynder
24. februar 2006 - 22:23 #2
Der findes nok flere løsninger på dit ønske om at dynamisk kunne ændre filnavn, men jeg vil mene at brug af Dynamic Properties Task er den nemmeste og mest fleksible løsning, og også vil være nøglene til en løsning for dig.

Ved hjælp af Dynamic Properties Task, kan du nemt sette Datasource, som er filnavnet i et Textfile object. Dynamic Properties Task kan hente værdier fra flere forskellige type kilder, bl.a. Global variables og Queries. Ved at bruge en Query, kan du kalde en stored procedure, der holder styr på filnavn, ved at telle op for hver ny fil. Alternativt kan du generere navnet i en Global variables, f.eks. ved at bruge en ActiveX scripting task, til at generere et unikt filnavn.
Avatar billede damkel Nybegynder
25. februar 2006 - 15:44 #3
Tak for dine svar.
Men, det er ikke fordi jeg har brug for dynamisk at kunne ændre filnavnet - det jeg har brug for, er at kunne appende til filen.
Det er ikke en logfil, men kunne ligeså godt være det. Jeg skriver forskellige typer informationer ned i den samme fil.
Men, jeg kan ikke få det til at virke så den tilføjer - hver gang jeg skriver til filen, så overskriver den filen.
I øvrigt, så ved jeg en del om SQL, men meget lidt om DTS, som jeg lige er begyndt at bruge...
Avatar billede lorentsnv Nybegynder
01. marts 2006 - 14:21 #4
Du kan eventuelt bruge Te3xt File (Destination) objektet til at eksportere til en fast fil (dette objekt kan du ikke få til at legge til, da det vil overskrive), og efterfølgende lave noget vbs script i ActiveX scripting objektet hvor du appender den fil du eksporterer til, til en anden fil. Jeg tror det findes flere teknikker for at lægge to filer sammen.
Avatar billede lorentsnv Nybegynder
01. marts 2006 - 14:32 #5
Jeg kigget hurtig efter lidt kode som kan appende en textfil til en anden, og fandt noget kode, som jeg ikke har testet, men som du kunne teste i en ActiveX Script task i DTS. Jeg er ikke helt sikker på om Open File fungerer i VBScript. Alternativt er at bruge FileSystemObject som helt sikkert kan gøre det samme. Jeg mener også der findes en dos commad som kan appende to filer. Her er koden jeg fandt:

If by "puts it into the other file" you mean appends, then this code
does that

Dim FileNum As Long
Dim TotalFile As String
FileNum = FreeFile
' Reads the source file into memory all at once
Open "c:\temp\source.txt" For Binary As #FileNum
TotalFile = Space(LOF(FileNum))
Get #FileNum, , TotalFile
Close #FileNum
' Then append it to the destination file
FileNum = FreeFile
Open "c:\temp\destination.txt" For Append As #FileNum
Print #FileNum, TotalFile
Close #FileNum

The first part (up to, and including, the first Close statement) loads
the entire source file into the String variable named TotalFile. For an
append operation, you can simply Print #FileNum it to the destination
file opened for Append (which is what the rest of the code does).
However, if you want to place the source file's text anywhere else
(except at the end), you will have to read the entire destination file
into a String variable of its own, use String manipulation functions to
integrate them in whatever way you want, then open the destination file
for Output and finally Print #FileNum the combined text to it.

Rick - MVP
If by "puts it into the other file" you mean appends, then this code
does that

Dim FileNum As Long
Dim TotalFile As String
FileNum = FreeFile
' Reads the source file into memory all at once
Open "c:\temp\source.txt" For Binary As #FileNum
TotalFile = Space(LOF(FileNum))
Get #FileNum, , TotalFile
Close #FileNum
' Then append it to the destination file
FileNum = FreeFile
Open "c:\temp\destination.txt" For Append As #FileNum
Print #FileNum, TotalFile
Close #FileNum

The first part (up to, and including, the first Close statement) loads
the entire source file into the String variable named TotalFile. For an
append operation, you can simply Print #FileNum it to the destination
file opened for Append (which is what the rest of the code does).
However, if you want to place the source file's text anywhere else
(except at the end), you will have to read the entire destination file
into a String variable of its own, use String manipulation functions to
integrate them in whatever way you want, then open the destination file
for Output and finally Print #FileNum the combined text to it.

Rick - MVP
Avatar billede damkel Nybegynder
02. marts 2006 - 20:19 #6
Hej
Det ser meget interessant ud.
Jeg har pt. løst problemet på anden måde.
En anden programmør har givet mig en store procedure, som appender en streng til en fil.
Det jeg laver er filer med faktura opgørelser til kæder indeholdende fakturahoveder og fakturaliner. Jeg løser det så ved først at lave et view for hver - derefter er der et stykke kode med to curser inden i hinanden, som læser skiftevis fra det ene view og derefter fra det andet. Resultatet i hver af løkkerne converteres og concateneres som en streng og skrives til filen vha. den ovennævnte store procedure.
Måske ikke elegant, men det virker - har lige prøvet det idag.
I næste uge når jeg får lidt luft igen, så kigger jeg nærmere på dit.

Tak for hjælpen - du får naturligvis alle 200 point :-) (hvis jeg kan finde ud hvordan...det er første gang jeg lægger noget op herinde...)

Hilsen
David
Avatar billede damkel Nybegynder
02. marts 2006 - 20:29 #7
OK - jeg giver op.
Er det fordi du svarer med kommentar og ikke med et svar, at jeg ikke kan give point?
Hvis du kan guide mig til hvordan jeg giver point, så giver jeg dem gerne :-)
Avatar billede lorentsnv Nybegynder
02. marts 2006 - 21:33 #8
Du kan kun give point på svar, og ikke på kommentar. Så her er et svar. Hvis jeg får lidt luft (har det lidt travelt lige nu), så skal jeg se om jeg kan komme op med en mere konkret løsning til dig.    :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester