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

Делаю импорт из 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
Как заставить ODBC Connection перечитывать путь к таблицам
    #32065424
Sacha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сам спросил - сам ответил

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

Код: 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
Как заставить ODBC Connection перечитывать путь к таблицам
    #32065514
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то не пойму - а зачем так сложно ? Dynamic Properies Task разве не проще ?
...
Рейтинг: 0 / 0
Как заставить ODBC Connection перечитывать путь к таблицам
    #32065688
Sacha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дык, не работет Dynamic Properies Task ...
В первую очередь я использовал именно такой подход. Но ...
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как заставить ODBC Connection перечитывать путь к таблицам
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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