Search

onze sponsors

microsoft_logo.gif


 

computrain_logo.JPG

Forum Login | Register
   Forum

 

Subject: read access with error 0xC0010001
Prev Next
You are not authorized to post a reply.

Author Messages
biesebejUser is Offline

Posts:0

14-03-2007 11:45:38 Alert 

Hallo,


We zijn bezig om m.b.v. een  Foreach Loop Container
een aantal zips uit te pakken en te laden in een database.
Dat proces verloopt goed.

We hebben een aantal "user variabelen" gedefinieerd.

voordat we laden in de database moeten we een bestand omzetten
van line2tab.
We hebben dit geprobeert via een script en via een copy file (file system task)
Geen van beide lukt niet.

melding:
Error: The script threw an exception: Could not find file 'D:\beheer\SSIS\Productie\berichten\uitpak\GD070131.PAT'.

Het stukje :'D:\beheer\SSIS\Productie\berichten\uitpak
en het stukje: GD070131 is de inhoud van de "user variabelen"
beide user variabelen wordt wel gevonden maar niet het bestand.
controle levert op dat het bestand er wel staat. ?

Wanneer we workaround via een file system task het proberen (copy of rename)
krijgen we :
Error: Failed to lock variable "D:\beheer\SSIS\Productie\berichten\uitpak\GD070131.pat" for read access with error 0xC0010001 "The variable cannot be found. This occurs when an attempt is made to retrieve a variable from the Variables collection on a container during execution of the package, and the variable is not there. The variable name may have changed or the variable is not being created.". 

Het gekke is dat de container D:\beheer\SSIS\Productie\berichten\uitpak\GD070131.pat
genereerd terwijl er direct ontkend wordt dat het bestand bestaat. En het bestand staat er wel ?

Weet iemand wat er aan de hand is?


We gebruiken het  onderstaande script:

Imports System

Imports System.Data

Imports System.Math

Imports System.IO

Imports Microsoft.SqlServer.Dts.Runtime

Public Class ScriptMain

' The execution engine calls this method when the task executes.

' To access the object model, use the Dts object. Connections, variables, events,

' and logging features are available as static members of the Dts class.

' Before returning from this method, set the value of Dts.TaskResult to indicate success or failure.

'

' To open Code and Text Editor Help, press F1.

' To open Object Browser, press Ctrl+Alt+J.

Public Sub Main()

'

Dim i As Integer

Dim aantalRegels As Integer

Dim aantalRegelsTotaal As Integer

Dim regel As String

Dim regelTotaal As String

Dim BasisBestand As String

Dim dummy As String

Dim uitpakFolder As String

Dim berichtnaamZonderExtensie As String

berichtnaamZonderExtensie = CStr(ReadVariable("berichtnaamZonderExtensie"))

uitpakFolder = CStr(Dts.Connections("uitpak").AcquireConnection(Dts.Transaction))

Dim pat As String = uitpakFolder + "\" + berichtnaamZonderExtensie + ".PAT"

Dim pid As String = uitpakFolder + "\" + berichtnaamZonderExtensie + ".pid"

BasisBestand = pat

FileOpen(3, uitpakFolder + "\" + "maak_tab.log", OpenMode.Output)

PrintLine(3, "pat = " + pat)

PrintLine(3, "BasisBestand = " + BasisBestand)

PrintLine(3, "berichtnaamZonderExtensie = " + berichtnaamZonderExtensie)

PrintLine(3, "uitpakFolder = " + uitpakFolder)

PrintLine(3, "pid = " + pid)

FileClose(3)

FileOpen(1, BasisBestand, OpenMode.Input)

If BasisBestand = pat Then aantalRegels = 27

' Eerst controleren of het bestand correct is

' Dit gebeurt door het aantal regels in het bestand te tellen

' En vervolgens te delen door het aantal regels dat 1 record vormt

' De rest van deze deling (MOD) moet 0 zijn

aantalRegelsTotaal = 0

While Not EOF(1)

aantalRegelsTotaal = aantalRegelsTotaal + 1

dummy = LineInput(1)

End While

FileClose(1)

FileOpen(3, uitpakFolder + "\" + "maak_tab.log", OpenMode.Output)

If aantalRegelsTotaal Mod aantalRegels = 0 Then

PrintLine(3, "Het bestand " & BasisBestand & " is correct")

Else

PrintLine(3, "Het bestand " & BasisBestand & " bevat een fout")

End If

FileClose(3)

'En vervolgens, als het bestand goed is, omzetten naar een tab-gescheiden bestand

If aantalRegelsTotaal Mod aantalRegels = 0 Then

FileOpen(1, BasisBestand, OpenMode.Input) ' Open file met new-line regeleinden.

While Not EOF(1) ' Loop door het hele bestand.

For i = 1 To aantalRegels

regel = LineInput(1)

If i = aantalRegels Then

regelTotaal = regelTotaal + regel

Else

regelTotaal = regelTotaal + regel & Chr(9)

End If

Next i

regelTotaal = regelTotaal & vbCrLf

FileOpen(2, pid, OpenMode.Output)

PrintLine(2, regelTotaal)

FileClose(2)

End While

FileClose(1)

End If

 

 

'

Dts.TaskResult = Dts.Results.Success

End Sub

Private Function ReadVariable(ByVal varName As String) As Object

Dim result As Object

Try

Dim Vars As Variables

Dts.VariableDispenser.LockForRead(varName)

Dts.VariableDispenser.GetVariables(Vars)

Try

result = Vars(varName).Value

Catch ex As Exception

Throw ex

Finally

Vars.Unlock()

End Try

Catch ex As Exception

Throw ex

End Try

Return result

End Function

 

 

Private Sub WriteVariable(ByVal varName As String, ByVal varValue As Object)

Try

Dim vars As Variables

Dts.VariableDispenser.LockForWrite(varName)

Dts.VariableDispenser.GetVariables(vars)

Try

vars(varName).Value = varValue

Catch ex As Exception

Throw ex

Finally

vars.Unlock()

End Try

Catch ex As Exception

End Try

End Sub

End Class

biesebejUser is Offline

Posts:0

21-03-2007 08:11:50 Alert 

Hoi,

 

We hebben het probleem opgelosd door een

wait script in te bouwe in de package.

Vooraf een aantal regels naar een log schrijven en dan pas het

line2tab script uitvoeren.

**************************************************

FileOpen(3, uitpakFolder + "\" + "wait.log", OpenMode.Output)

aantalRegelsTotaal = 0

MaxTeller = 10000

For i = 1 To MaxTeller

aantalRegelsTotaal = aantalRegelsTotaal + 1

PrintLine(3, "waitRegel = " & aantalRegelsTotaal)

Next i

FileClose(3)

**************************************************

niet echt een nette oplossing maar het werkt.

groetjes Jan Dirk

You are not authorized to post a reply.
Forums > Forums > Business Intelligence > read access with error 0xC0010001



ActiveForums 3.6
  
Copyright (c) 2012 PASS Nederland   Privacy Statement  Terms Of Use