24. februar 2006 - 14:29Der 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.
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.
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.
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...
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.
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.
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...)
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 :-)
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. :-)
Synes godt om
Ny brugerNybegynder
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.