Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как заставить ODBC Connection перечитывать путь к таблицам / 4 сообщений из 4, страница 1 из 1
06.11.2002, 11:29:23
    #32065287
Sacha
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заставить ODBC Connection перечитывать путь к таблицам
Првет !!!
Есть вопросик.

Делаю импорт из DBF-таблиц в MS SQL Server 2000.
Есть несколько баз данных (DBF), которые абсолютно идентичны по структуре, поэтому было принято решение написать один пакет (1 - "Шаблон импорта данных из БЭСТа в SnapShotBEST") с использованием параметров и глобальных переменных, который, собственно и выполняет импорт.

Написать второй пакет (2) из которого вызывается запуск первого пакета.

Собственно код функции второго пакета такой

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
Function Main()	

	Const DTSSQLStgFlag_Default =  0 
	Const DTSStepExecResult_Failure =  1 
	
	Dim oStep, sMessage, bStatus
	
	' используем пакет с шаблоном'
	Dim objPackage

             'для изменения парметров ODBC Connection'
	Dim FileDSN, FileDSNStream
             
             'список кодов складов и путей к базам данных'
	Dim countr, cnStr
	Dim RS

	set RS = CreateObject( "ADODB.Recordset" )
	set RS = DTSGlobalVariables( "rsPathsBest" ).Value
	RS.MoveFirst
	for countr =  1  to RS.RecordCount

		set FileDSN = CreateObject( "Scripting.FileSystemObject" )
		set FileDSNStream = FileDSN.CreateTextFile( "\\KOSMO\dsDataBase\Snapshotbest\DataSources\Magazin.dsn" , True)
		FileDSNStream.WriteLine( "[ODBC]" )
		FileDSNStream.WriteLine( "DRIVER=Microsoft Visual FoxPro Driver" )
		FileDSNStream.WriteLine( "UID=" )
		FileDSNStream.WriteLine( "Deleted=No" )
		FileDSNStream.WriteLine( "Null=Yes" )
		FileDSNStream.WriteLine( "Collate=RUSSIAN" )
		FileDSNStream.WriteLine( "BackgroungFetch=Yes" )
		FileDSNStream.WriteLine( "Exclusive=No" )
		FileDSNStream.WriteLine( "SourceType=DBF" )
		cnStr= "SourceDB="  & RS.Fields( "PathBest" ).value+ "\SCLAD" 
		FileDSNStream.WriteLine(cnStr)
		FileDSNStream.WriteBlankLines( 1 )
		set FileDSN = nothing
		set FileDSNStream = nothing

		Set objPackage = CreateObject( "DTS.Package" )
		objPackage.LoadFromSQLServer  "SQLSERVER" , "sa" , "",DTSSQLStgFlag_Default,"  ","  ","  "," Шаблон импорта данных из БЭСТа в SnapShotBEST "

		'присвоим глобальной переменной путь к текущей базе данных'
		objPackage.GlobalVariables.Item(" PathBest ").Value = RS.Fields(" PathBest ").value+" \SCLAD "
		
		'присвоим глобальной переменной код склада'
		objPackage.GlobalVariables.Item(" gID_Sclad ").Value = RS.Fields(" ID_Sclad ").value 
		
		'выполнение пакета '
		objPackage.Execute

		bStatus = True
		sMessage = " № слада -  " & objPackage.GlobalVariables.Item(" gID_Sclad ").Value & "   Путь -  " & objPackage.GlobalVariables.Item(" PathBest ").Value & Chr(13 ) & Chr( 10 )
		For Each oStep In objPackage.Steps
			sMessage = sMessage & "Step [ " & oStep.Name & " ]  "  & "  -  "
			If oStep.ExecutionResult = DTSStepExecResult_Failure Then
				sMessage = sMessage & "  failed " & Chr(13 ) & Chr( 10 )
				bStatus = False
			Else
				sMessage = sMessage & " succeeded " & Chr(13 ) & Chr( 10 )
			End If
			sMessage = sMessage & "Task " &  objPackage.Tasks(oStep.TaskName).Description &  "  -  "
		Next
	
		If bStatus Then
			sMessage = sMessage & "     Package [ " & objPackage.Name & " ] succeeded " & Chr(13 ) & Chr( 10 )
		Else
			sMessage = sMessage & "    Package [ " & objPackage.Name & " ] failed" & Chr( 13 ) & Chr( 10 )
		End If
		'MsgBox sMessage'

		objPackage.UnInitialize
		set objPackage = nothing
		set objConn = nothing

		RS.MoveNext
	Next
	
	Main = DTSTaskExecResult_Success
End Function


Но ?!
Дело в том, что пакет помнит путь к таблицам, заданный ранее при создании первого пакета.

Где я неправ?
...
Рейтинг: 0 / 0
06.11.2002, 14:54:37
    #32065424
Sacha
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заставить ODBC Connection перечитывать путь к таблицам
Сам спросил - сам ответил

Достаточно перед запауском пакета выполнить такие действия:

Код: plaintext
1.
2.
3.
4.
		cnProp =  "Driver={Microsoft Visual FoxPro Driver};UID=;PWD=;SourceDB=" 
		cnProp = cnProp & RS.Fields( "PathBest" ).value+ "\SCLAD;" 
		cnProp = cnProp &  "SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Collate=RUSSIAN;Null=Yes;Deleted=No;" 
		set objConn = objPackage.Connections( "Магазин" )
		objConn.ConnectionProperties( "Extended Properties" ).Value = cnProp


Может пригодиться кому-нибудь ...

З.Ы. Читайте MSDN - это не только укрепляет сон.
...
Рейтинг: 0 / 0
06.11.2002, 16:40:45
    #32065514
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заставить ODBC Connection перечитывать путь к таблицам
Что-то не пойму - а зачем так сложно ? Dynamic Properies Task разве не проще ?
...
Рейтинг: 0 / 0
07.11.2002, 14:42:22
    #32065688
Sacha
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заставить ODBC Connection перечитывать путь к таблицам
Дык, не работет Dynamic Properies Task ...
В первую очередь я использовал именно такой подход. Но ...
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как заставить ODBC Connection перечитывать путь к таблицам / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]