Lot DTS

io_ost Messages postés 151 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 6 février 2009 - 30 mars 2006 à 09:34
io_ost Messages postés 151 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 6 février 2009 - 3 avril 2006 à 13:36
http://www.sqldts.com

Bonjour,

Je met à jour une base SQL depuis une page aspx

J'arrive bien à executer mon Lot DTS local depuis mon client (depuis ma page aspx)

Pour info : trouver sur le site Microsoft
http://support.microsoft.com/kb/252987/EN-US/

Je souhaiterais integrer le code de mon Lot (majvb.bas provenant d'un
serveur SQL2000) directement dans le code de ma page mais je me retrouve avec
plusieurs erreurs
Je ne sais pas si cela est vraiment l'endrois pour ce genre de question
donc je ne vais pas enumerer les erreur et le solution que j'ai trouver
pourriez vous m'indiquer une page traitant de la convertion du code de mon
lot ***vb.bas vers VB.net ??


en fait je voudrais juste passer en variable à mon lot le path du fichier
source de mise à jour (xls).

car pour le moment il conserve (bien evidement le path que j'ai creer dans le lot sur le serveur SQL) je suis donc obliger de mettre mon fichier de mise à jour exactement aux même endroit sur mon client .

merci !!!

6 réponses

Mindiell Messages postés 558 Date d'inscription jeudi 25 juillet 2002 Statut Membre Dernière intervention 5 septembre 2007 1
30 mars 2006 à 14:19
Peux tu nous montrer le début de ton lot au niveau requetes ? Parce que là, ca reste flou...
0
io_ost Messages postés 151 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 6 février 2009
30 mars 2006 à 18:54
ok je commence :

j'excecute mon lot à partir de ma page aspx comme ça :
C'est juste pour info pour ceux que ça intéressse ^_^ mon problème est plus bas !!
j'utilise le code behind :



Protected
Sub BtnMaj_Click(
ByVal sender
As
Object,
ByVal e
As System.EventArgs)
Handles BtnMaj.Click



Dim oPkg, oStep, sMessage, bStatus


oPkg = Server.CreateObject(
"DTS.Package")



Const DTSSQLStgFlag_UseTrustedConnection = 256


oPkg.LoadFromSQLServer(
"SERVEUR",
"",
"", DTSSQLStgFlag_UseTrustedConnection,
"",
"",
"", "
Maj2")


oPkg.Execute()


bStatus =
True



For
Each oStep
In oPkg.Steps



If oStep.ExecutionResult = 1
Then


sMessage = sMessage &
"" &
"Step [" & oStep.Name &
"] "


sMessage = sMessage &
" a termin‚
"


bStatus =
False



End
If



Next



If bStatus
Then


sMessage = sMessage &
"Package [" & oPkg.Name &
"] éxécuter avec succès

"



Else


sMessage = sMessage &
"Package [" & oPkg.Name &
"] a échoué.

"



End
If


oStep =
Nothing


oPkg =
Nothing


LblReponse.Text = (sMessage)



End
Sub

bon ça ça marche nickel !!
il faut au préalable créer son lot sur son serveur !

mon problème c'est que je voudrais passer en variable la source de ce lot :

j'ai donc enregitrer mon lot en vb.bas à partir de l'entreprise manager...
ça nous donne : après ajout des référence DTS :
Après correction trouver sur dtssql.com ça donne ça :

J'ai mis presque tous le code de mon lot mais je n'est que 3 erreurs écrite en très gros et en rouge et j'ai mis quelques commentaires en rouge également (j'espère ne pas être trop relou !!!)


Option
Explicit
On ''A AJOUTER


Imports DTS ''A AJOUTER


Imports DTSPump ''pareil


Imports DTSCustTasks '' la je suis pas sûr


Partial
Class param



Inherits System.Web.UI.Page





Private
Sub Main()


dim goPackageOld
As
New DTS.Package



dim goPackage
As DTS.Package2

goPackage = goPackageOld


goPackage.Name = "Maj2"


goPackage.Description =
"Description de lot DTS"


goPackage.WriteCompletionStatusToNTEventLog =
False


goPackage.FailOnError =
False


goPackage.PackagePriorityClass = 2


goPackage.MaxConcurrentSteps = 4


goPackage.LineageOptions = 0


goPackage.UseTransaction =
True


goPackage.TransactionIsolationLevel = 4096


goPackage.AutoCommitTransaction =
True


goPackage.RepositoryMetadataOptions = 0


goPackage.UseOLEDBServiceComponents =
True


goPackage.LogToSQLServer =
False


goPackage.LogServerFlags = 0


goPackage.FailPackageOnLogFailure =
False


goPackage.ExplicitGlobalVariables =
False


goPackage.PackageType = 0






Dim oConnProperty
As DTS.OleDBProperty



'---------------------------------------------------------------------------



' create package connection information



'---------------------------------------------------------------------------



Dim oConnection
As DTS.Connection2



'------------- a new connection defined below.



'For security purposes, the password is never scripted


'oConnection = goPackage.Connections.New(
"Microsoft.Jet.OLEDB.4.0")

'oConnection.ConnectionProperties(
"Data Source") =
'"C:\Inetpub\wwwroot\upload\Maj.xls" ''c'est ça que je veux en variable !!!!

''Sinon il vient le chercher aux même endroit sur le client!!!



oConnection.ConnectionProperties(
"Extended Properties") =
"Excel 8.0;HDR=YES;"

''CODE QU'IL FAUT D'AILLEUR MODIFIER EN :

oConnection.ConnectionProperties.item("Data Source") .value= "C:\Inetpub\wwwroot\upload\Maj.xls"


oConnection.ConnectionProperties.item(
"Extended Properties").value =
"Excel 8.0;HDR=YES;"


oConnection.Name = "Connexion 1"


oConnection.ID = 1


oConnection.Reusable =
True


oConnection.ConnectImmediate =
False


oConnection.DataSource =
"C:\Inetpub\wwwroot\upload\Maj.xls"


oConnection.ConnectionTimeout = 60


oConnection.UseTrustedConnection =
False


oConnection.UseDSL =
False



'If you have a password for this connection, please uncomment and add your password below.



'oConnection.Password = ""


goPackage.Connections.Add(oConnection)


oConnection =
Nothing



'------------- a new connection defined below.



'For security purposes, the password is never scripted


oConnection = goPackage.Connections.New(
"SQLOLEDB")


oConnection.ConnectionProperties.Item(
"Integrated Security").Value =
"SSPI"


oConnection.ConnectionProperties.Item(
"Persist Security Info").Value =
True


oConnection.ConnectionProperties.Item(
"Initial Catalog").Value =
"Bd"


oConnection.ConnectionProperties.Item(
"Data Source").Value =
"SERVEUR"


oConnection.ConnectionProperties.Item(
"Application Name").Value =
"Assistant Importation/exportation DTS (Data Transformation Services)"


oConnection.Name =
"Connexion 2"


oConnection.ID = 2


oConnection.Reusable =
True


oConnection.ConnectImmediate =
False


oConnection.DataSource =
"SERVEUR"


oConnection.ConnectionTimeout = 60


oConnection.Catalog =
"exclus"


oConnection.UseTrustedConnection =
True


oConnection.UseDSL =
False



'If you have a password for this connection, please uncomment and add your password below.



'oConnection.Password = ""


goPackage.Connections.Add(oConnection)


oConnection =
Nothing



'---------------------------------------------------------------------------



' create package steps information



'---------------------------------------------------------------------------



Dim oStep
As DTS.Step2



Dim oPrecConstraint
As DTS.PrecedenceConstraint



'------------- a new step defined below


oStep = goPackage.Steps.New


oStep.Name =
"Copy Data from Feuil1$ to [Bd].[dbo].[Bd] étape"


oStep.Description =
"Copy Data from Feuil1$ to [Bd].[dbo].[Bd] étape"


oStep.ExecutionStatus = 1


oStep.TaskName =
"Copy Data from Feuil1$ to [Bd].[dbo].[Bd] Tâche"


oStep.CommitSuccess =
False


oStep.RollbackFailure =
False


oStep.ScriptLanguage =
"VBScript"


oStep.AddGlobalVariables =
True


oStep.RelativePriority = 3


oStep.CloseConnection =
False


oStep.ExecuteInMainThread =
True


oStep.IsPackageDSORowset =
False


oStep.JoinTransactionIfPresent =
False


oStep.DisableStep =
False


oStep.FailPackageOnError =
False


goPackage.Steps.Add(oStep)


oStep =
Nothing



'---------------------------------------------------------------------------



' create package tasks information



'---------------------------------------------------------------------------



'------------- call Task_Sub1 for task Copy Data from Feuil1$ to [exclus].[dbo].[exclus] Tƒche (Copy Data from Feuil1$ to [exclus].[dbo].[exclus] Tƒche)



Call Task_Sub1(goPackage)



'---------------------------------------------------------------------------



' Save or execute package



'---------------------------------------------------------------------------



'goPackage.SaveToSQLServer "(local)", "sa", ""


goPackage.Execute()


tracePackageError(goPackage)


goPackage.Uninitialize()



'to save a package instead of executing it, comment out the executing package line above and uncomment the saving package line


goPackage =
Nothing


goPackageOld =
Nothing



End
Sub






'-----------------------------------------------------------------------------



' error reporting using step.GetExecutionErrorInfo after execution



'-----------------------------------------------------------------------------



Public
Sub tracePackageError(
ByVal oPackage
As DTS.Package)



Dim ErrorCode
As
Long



Dim ErrorSource
As
String



Dim ErrorDescription
As
String



Dim ErrorHelpFile
As
String



Dim ErrorHelpContext
As
Long



Dim ErrorIDofInterfaceWithError
As
String



Dim i
As
Integer



For i = 1
To oPackage.Steps.Count



If oPackage.Steps(i).ExecutionResult = DTSStepExecResult_Failure
Then



''L'interface DTS Step ne peut être indexé !!!

oPackage.Steps(i).GetExecutionErrorInfo(ErrorCode, ErrorSource, ErrorDescription, _


ErrorHelpFile, ErrorHelpContext, ErrorIDofInterfaceWithError)


MsgBox(oPackage.Steps(i).Name & " failed" & vbCrLf & ErrorSource & vbCrLf & ErrorDescription)



End
If



Next i



End
Sub



'------------- define Task_Sub1 for task Copy Data from Feuil1$ to [exclus].[dbo].[exclus] Tƒche (Copy Data from Feuil1$ to [exclus].[dbo].[exclus] Tƒche)



Public
Sub Task_Sub1(
ByVal goPackage
As
Object)



Dim oTask
As DTS.Task



Dim oLookup
As DTS.Lookup



Dim oCustomTask1
As DTS.DataPumpTask2


oTask = goPackage.Tasks.New(
"DTSDataPumpTask")


'' un appel à un constructeur est valide uniquement en tant que ''première instruction dans un constructeur d'instance

oTask.Name =
"Copy Data from Feuil1$ to [Bd].[dbo].[Bd] Tâche"


oCustomTask1 = oTask.CustomTask


oCustomTask1.Name =
"Copy Data from Feuil1$ to [Bd].[dbo].[Bd] Tâche"


oCustomTask1.Description =
"Copy Data from Feuil1$ to [Bd].[dbo].[Bd] Tâche"


oCustomTask1.SourceConnectionID = 1


oCustomTask1.SourceSQLStatement =
"select `nom`,`prenom`,`surnom`,`dn........ from `Feuil1$`"


oCustomTask1.DestinationConnectionID = 2


oCustomTask1.DestinationObjectName =
"[exclus].[dbo].[exclus]"


oCustomTask1.ProgressRowCount = 1000


oCustomTask1.MaximumErrorCount = 0


oCustomTask1.FetchBufferSize = 1


oCustomTask1.UseFastLoad =
True


oCustomTask1.InsertCommitSize = 0


oCustomTask1.ExceptionFileColumnDelimiter =
"|"


oCustomTask1.ExceptionFileRowDelimiter = vbCrLf


oCustomTask1.AllowIdentityInserts =
False


oCustomTask1.FirstRow = 0


oCustomTask1.LastRow = 0


oCustomTask1.FastLoadOptions = 2


oCustomTask1.ExceptionFileOptions = 1


oCustomTask1.DataPumpOptions = 0



Call oCustomTask1_Trans_Sub1(oCustomTask1)





goPackage.Tasks.Add(oTask)


oCustomTask1 =
Nothing


oTask =
Nothing



End
Sub



Public
Sub oCustomTask1_Trans_Sub1(
ByVal oCustomTask1
As
Object)



Dim oTransformation
As DTS.Transformation2



Dim oTransProps
As DTS.Properties



Dim oColumn
As DTS.Column


oTransformation = oCustomTask1.Transformations.New(
"DTS.DataPumpTransformCopy")


'' un appel à un constructeur est valide uniquement en tant que ''première instruction dans un constructeur d'instance
oTransformation.Name =
"DirectCopyXform"


oTransformation.TransformFlags = 63


oTransformation.ForceSourceBlobsBuffered = 0


oTransformation.ForceBlobsInMemory =
False


oTransformation.InMemoryBlobSize = 1048576


oTransformation.TransformPhases = 4


oColumn = oTransformation.SourceColumns.New(
"nom", 1)

Le reste il est Content !!!
0
Mindiell Messages postés 558 Date d'inscription jeudi 25 juillet 2002 Statut Membre Dernière intervention 5 septembre 2007 1
30 mars 2006 à 19:00
''CODE QU'IL FAUT D'AILLEUR MODIFIER EN :
oConnection.ConnectionProperties.item("Data Source").value = "C:\Inetpub\wwwroot\upload\Maj.xls"

Euh, et un simple :
Dim chemin
chemin = le chemin que je veux & "\Maj.xls"
oConnection.ConnectionProperties.item("Data Source").value = chemin

Le reste je comprends pas... Mais pourquoi encore utiliser excel nondidiou ? quelle horreur !
0
io_ost Messages postés 151 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 6 février 2009
31 mars 2006 à 09:42
C'est ce que je veux faire (chemin=......) !!!!!

le fichier excel n'est pas le problème que cela soit lui un fichier texte ou autre chose j'ai toujours le même problème ::
passer en variable la source de mon lot DTS creer dans l'entreprise manager dans les Lots locaux dans le dossier Data Transformation Service

le code ci dessus est issus de l'enregistrement de ce lot en vb c'est une option à la fin de la création du lot je voulais gerer ce code mais j'ai toujours c'est erreur qui me bloque !!

un problème de compatibilité du vb de l'entreprise mananger et du vb.net de visual studio 20005

je crois que je vais plancher sur les serveur distant et faire la mise à jour via le net à partir de mon serveur je désespère de gerer le code DTS

tu crois qu'il y a des admin sur ce site sur aspfr il sont beaucoup plus actifs enfin bref ...

si quelqu'un à une soluce aux secour!!!!!

matt
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mindiell Messages postés 558 Date d'inscription jeudi 25 juillet 2002 Statut Membre Dernière intervention 5 septembre 2007 1
31 mars 2006 à 09:53
Il y a des admins partout mais le SQL est délaissé ;o)

Je comprends pas bien le probleme, si tu pouvais l'expliquer etape par etape...
0
io_ost Messages postés 151 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 6 février 2009
3 avril 2006 à 13:36
je veux faire une mise à jour de ma base donc j'ai creer un lot dts qui à pour source un fichier excel

mon problème c'est que le path du fichier source est en dur dans mon lot

donc quand je l'execute à partir d'internet explorer (depuis une page apsx) le lot dts vient chercher le fichier source dans le repetoire que je lui à définit mais pas sur le serveur !! aux même endoit mais sur le client!!

je me suis donc dis que je pouvais enregistrer mon lot en vb.bas (c'est une option à la fin de la création du lot dts dans entreprise manager) puis integrer tout le code de ce lot dans ma page aspx pour pouvoir passer en variable le path de ma source de mise à jour.

mais j'ai des erreur de vb dans le code de mon lot (qui est en vb6 ou moins) par rapport au vb.net

je posait dons cette question dans ce forum en esperant qu'il y avais des develloppeur de lot dts qui aurais eu la soluce
0
Rejoignez-nous