[VB6] Remote DTS executing

Pagina: 1
Acties:

  • Hoover
  • Registratie: Augustus 2004
  • Laatst online: 03-09-2025
Ik heb een prog gebouwd in VB6 om een DTS package op afstand uit te voeren.(source van www.sqldts.com geleend)

De bedoeling is dat een gebruiker deze EXE kan opstarten en zo op een knop drukt om wat bestanden te importeren.
In de achtergrond wordt dan een package gestart

De exe file werkt perfect als ik deze rechtreeks uitvoer op de SQL server.

Voer ik deze uit vanaf een client, krijg ik de melding zoals deze hieronder in de link staat:
http://home.planet.nl/~ben00058/melding.jpg

De source:
Visual Basic:
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
Private Sub ExecutePackage()

    Dim oPKG As DTS.Package, oStep As DTS.Step
    Set oPKG = New DTS.Package
    
    Dim sServer As String, sUsername As String, sPassword As String
    Dim sPackageName As String, sMessage As String
    Dim lErr As Long, sSource As String, sDesc As String
    
    ' Dim pkgID As String
    ' Dim pkgVersion As String
    
   
    
    ' Set Parameter Values
    sServer = "servernaam"
    sUsername = "gebruikersnaam of domein/gebruikersnaam"
    sPassword = "wachtwoord"
    sPackageName = "packagenaam"
 
    
    ' Load Package
    oPKG.LoadFromSQLServer sServer, sUsername, sPassword, _
        DTSSQLStgFlag_UseTrustedConnection, , , , sPackageName
        
    ' Set Exec on Main Thread
    For Each oStep In oPKG.Steps
        oStep.ExecuteInMainThread = True
    Next
    
    ' Execute
    oPKG.Execute
    
    ' Get Status and Error Message
    For Each oStep In oPKG.Steps
        If oStep.ExecutionResult = DTSStepExecResult_Failure Then
            oStep.GetExecutionErrorInfo lErr, sSource, sDesc
            sMessage = sMessage & "Step """ & oStep.Name & _
                """ Failed" & vbCrLf & _
                vbTab & "Error: " & lErr & vbCrLf & _
                vbTab & "Source: " & sSource & vbCrLf & _
                vbTab & "Description: " & sDesc & vbCrLf & vbCrLf
        Else
            sMessage = sMessage & "Step """ & oStep.Name & _
                """ Succeeded" & vbCrLf & vbCrLf
        End If
    Next
    
    oPKG.UnInitialize
    
    Set oStep = Nothing
    Set oPKG = Nothing
    
    ' Display Results
    MsgBox sMessage
    
End Sub


De melding heb ik in google en op msdn gezocht en het enige wat er staat is dat er problemen zijn met de rechten in de SQL server.
Dit zou niet moeten kunnen omdat de gebruiker ook in een PHP script wordt gebruikt om rechtreeks verbinding te maken met onze SQL server.Plus vanaf de sqlserver werkt de EXE wel zoals ik al aangaf.

Alle benodigde dll's staan op de clients.
Ik heb verschillende login technieken geprobeerd.Allen zonder resultaat

Ook heb ik geprobeerd om de GUID van de package aan te geven , maar ook dat geeft hetzelfde resultaat.

Ik heb het het ook in ASP en in VBscript geprobeerd. Ook weer hetzelfde verhaal

Wel was ik ergens tegen gekomen dat DTS altijd lokaal wordt uitgevoerd.
Kan het zo zijn dat ik dat de DTS package op een of andere manier moet exporteren als bestand en deze dan op een of andere manier kan oproepen via VB6?

Zo ja.......... Hoe moet ik dat doen?

  • watzie
  • Registratie: Juni 2001
  • Laatst online: 21-04 07:06
effe ter controle:
heb je wel op je clients een odbc entry aangemaakt en getest?

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Hmm, de parameter DTSSQLStgFlag_UseTrustedConnection doet mij vermoeden dat er een trusted connectie gebruikt wordt, dus niet een gebruikersnaam/wachtwoordcombinatie.

Ik ken het object onvoldoende om dit zeker te weten maar het lijkt er wel op. Ik zal eens googlen


Jep, het lijkt er wel op: klik.

Je moet DTSSQLStgFlag_Default gebruiken.

[ Voor 25% gewijzigd door P_de_B op 25-05-2005 20:57 ]

Oops! Google Chrome could not find www.rijks%20museum.nl


  • Hoover
  • Registratie: Augustus 2004
  • Laatst online: 03-09-2025
watzie schreef op woensdag 25 mei 2005 @ 20:04:
effe ter controle:
heb je wel op je clients een odbc entry aangemaakt en getest?
Gewoon een SQL odbc koppeling maken?

Kan ik proberen

  • Hoover
  • Registratie: Augustus 2004
  • Laatst online: 03-09-2025
P_de_B schreef op woensdag 25 mei 2005 @ 20:53:
Hmm, de parameter DTSSQLStgFlag_UseTrustedConnection doet mij vermoeden dat er een trusted connectie gebruikt wordt, dus niet een gebruikersnaam/wachtwoordcombinatie.

Ik ken het object onvoldoende om dit zeker te weten maar het lijkt er wel op. Ik zal eens googlen


Jep, het lijkt er wel op: klik.

Je moet DTSSQLStgFlag_Default gebruiken.
Ook geprobeerd.
Dat stond al in de originele source.
Werkte ook niet :(

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Hoover schreef op donderdag 26 mei 2005 @ 08:34:
[...]


Ook geprobeerd.
Dat stond al in de originele source.
Werkte ook niet :(
Zelfde foutmelding?

Oops! Google Chrome could not find www.rijks%20museum.nl


  • Hoover
  • Registratie: Augustus 2004
  • Laatst online: 03-09-2025
Ik heb een ODBC koppeling gebouwd, maar moet die een bepaalde naam hebben of zo?
Want ik heb deze gewoon SQL genoemt en dat werkte dus ook niet........

De koppeling zelf werkt wel goed.

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 21:41
Hoover schreef op donderdag 26 mei 2005 @ 08:40:
Ik heb een ODBC koppeling gebouwd, maar moet die een bepaalde naam hebben of zo?
Want ik heb deze gewoon SQL genoemt en dat werkte dus ook niet........

De koppeling zelf werkt wel goed.
Ik heb het vermoeden dat dit verhaal niet via ODBC loopt, dus die koppeling heb je waarschijnlijk niet veel aan.

Vermoedelijk zit er iets in de connection perameters.

[ Voor 7% gewijzigd door farlane op 26-05-2005 09:54 ]

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Hoover
  • Registratie: Augustus 2004
  • Laatst online: 03-09-2025
Nou, als ik het op de SQL server zelf uitvoer, werkt het wel.
Dus die gegevens kloppen.

Maar ik heb iets gevonden met OSQL.
Misschien dat ik daar een batchfile van kan bakken

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 21:41
Hoover schreef op donderdag 26 mei 2005 @ 10:17:
Nou, als ik het op de SQL server zelf uitvoer, werkt het wel.
Dus die gegevens kloppen.
Da's een rare aanname. Dat was namenlijk voor mij een hint dat er bij die parameters juist iets niet goed zit.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

code:
1
2
3
4
5
    ' Set Parameter Values 
    sServer = "servernaam" 
    sUsername = "gebruikersnaam of domein/gebruikersnaam" 
    sPassword = "wachtwoord" 
    sPackageName = "packagenaam"

Deze gegevens kloppen echt? Niet dat je - ik noem maar iets stoms - "localhost" of "(local)" hebt ingevuld bij de servernaam. En hoe zit het met de connecties die in de DTS package zelf zijn gedefinieerd?

Kan de package wel uitgevoerd worden met dtsrun vanaf de client?

Today's subliminal thought is:


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 21:41
Misschien een SQL server instancenaam die er nog bij moet? Zijn je netwerk libs uberhaupt ingeschakeld? ( lokaal kan hij er altijd bij nl )

Maak eens een ado verbinding met je db. Kun je er bij?

[ Voor 55% gewijzigd door farlane op 26-05-2005 11:28 ]

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Hoover
  • Registratie: Augustus 2004
  • Laatst online: 03-09-2025
Annie schreef op donderdag 26 mei 2005 @ 10:55:
code:
1
2
3
4
5
    ' Set Parameter Values 
    sServer = "servernaam" 
    sUsername = "gebruikersnaam of domein/gebruikersnaam" 
    sPassword = "wachtwoord" 
    sPackageName = "packagenaam"

Deze gegevens kloppen echt? Niet dat je - ik noem maar iets stoms - "localhost" of "(local)" hebt ingevuld bij de servernaam. En hoe zit het met de connecties die in de DTS package zelf zijn gedefinieerd?

Kan de package wel uitgevoerd worden met dtsrun vanaf de client?
De gegevens kloppen 100%
Ik heb op alle manieren getracht in te loggen.

gebruikersnaam
domein\gebruikersnaam
Gebruikersnaam@domein.nl
enz. enz.

Als ik een ADO verbinding maak met dezelfde gegevens, kom ik er gewoon op.
Alle ASP,PHP pagina's, maken mert dezelfde gegevens wel verbinding.
Die staan overigs op een andere server.... dus het kan wel

In de DTS package wordt geen gebruik gemaakt enige wachtwoorden of iets dergelijks.
Overigs maakt de SA gebruiker verbinding vanuit het script
SA is ook aanwezig in het domein.

  • Hoover
  • Registratie: Augustus 2004
  • Laatst online: 03-09-2025
farlane schreef op donderdag 26 mei 2005 @ 11:26:
Misschien een SQL server instancenaam die er nog bij moet? Zijn je netwerk libs uberhaupt ingeschakeld? ( lokaal kan hij er altijd bij nl )

Maak eens een ado verbinding met je db. Kun je er bij?
Ik kan met een ADO er wel op komen, maar dan kun je geen dts uitvoeren.
De libs zijn ingeschakeld

  • Hoover
  • Registratie: Augustus 2004
  • Laatst online: 03-09-2025
Annie schreef op donderdag 26 mei 2005 @ 10:55:

Deze gegevens kloppen echt? Niet dat je - ik noem maar iets stoms - "localhost" of "(local)" hebt ingevuld bij de servernaam. En hoe zit het met de connecties die in de DTS package zelf zijn gedefinieerd?

Kan de package wel uitgevoerd worden met dtsrun vanaf de client?
Jep dat kan wel.
ER is verder geen ww of iets dergelijks aan de dts gekoppeld

  • Hoover
  • Registratie: Augustus 2004
  • Laatst online: 03-09-2025
farlane schreef op donderdag 26 mei 2005 @ 10:44:
[...]


Da's een rare aanname. Dat was namenlijk voor mij een hint dat er bij die parameters juist iets niet goed zit.
idd, nu ik er verder over nadenk.
MAar ik heb alle opties die msdn aangaf geprobeerd en geen enkele wil lukken :'(
Voer ik het uit vanaf de server zelf werkt elke optie die ik probeer.

Ik nu trouwens eens na te denken.
De DTS package zet een file klaar op de d-schijf van de sql server.

waarschijnlijk moet ik daar dus \\server\d$\dir van maken ipv d:\ :+

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Hoover schreef op donderdag 26 mei 2005 @ 12:37:
[...]
waarschijnlijk moet ik daar dus \\server\d$\dir van maken ipv d:\ :+
Dat klopt, maar verklaart niet de errormeldingen die je in je TS hebt gemeld.
Heb je nu al gekeken naar de connecties in je dts package?

Today's subliminal thought is:


  • Hoover
  • Registratie: Augustus 2004
  • Laatst online: 03-09-2025
Daar had ik al in gekeken en de SA is de owner ervan.
ER staat geen ww of iets dergelijks in opgegeven in de package.

edit:

In de package ZELF (;)) wordt er gebruik gemaakt van Windows authentication in twee ms ole db sql connecties.
Deze maar eens op SQL authentication gezet, maar nog steeds de melding.

[ Voor 47% gewijzigd door Hoover op 26-05-2005 14:08 ]


  • Hoover
  • Registratie: Augustus 2004
  • Laatst online: 03-09-2025
Niemand enig idee??

  • Hoover
  • Registratie: Augustus 2004
  • Laatst online: 03-09-2025
Jammer dat niemand meer gereageerd heeft, maar ik heb het ondertussen opgelost.
Wel op een volledig andere manier.

Nml: Telnet sessie openen op de SQLserver. Daarna een batfile uitvoeren wat een DTSrun commandline uitoverd.
Tis omslachtig, maar het werkt goed.


deze kan dus gesloten worden.

  • JapJap
  • Registratie: Maart 2001
  • Laatst online: 07-01 11:02
Wat je ook kan doen is de DTS package uitvoeren m.b.v. een stored procedure.
Zoek op "execute dts stored procedure" voor wat links.

Edit: deze had ik nog liggen:
code:
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
create proc sp_executedts
    @server varchar(255),
    @pkgname varchar(255),                -- package name (defaults to most recent version)
    @serverpwd varchar(255) = null,     -- server password if using sql security to load package (uid is suser_name())
    @intsecurity bit = 0,                 -- 0 = sql server security, 1 = windows integrated security
    @pkgpwd varchar(255) = ''             -- package password
as

set nocount on


/*
    return values
    - 0 successfull execution of package
    - 1 error
*/

declare @hr int, @ret int, @opkg int, @cmd varchar(1000)

-- create a pkg object
exec @hr = sp_oacreate 'dts.package', @opkg output
if @hr <> 0
begin
   raiserror('package creation failed', 16, 1)
    return 1
end

-- evaluate security and build loadfromsqlserver statement
if @intsecurity = 0
    set @cmd = 'loadfromsqlserver("' + @server +'", "' + suser_sname() + '", "' + @serverpwd + '", 0, "' + @pkgpwd + '", , , "' + @pkgname + '")'
else
    set @cmd = 'loadfromsqlserver("' + @server +'", "", "", 256, "' + @pkgpwd + '", , , "' + @pkgname + '")'


exec @hr = sp_oamethod @opkg, @cmd, null
if @hr <> 0
begin
   raiserror('package load failed', 16, 1)
   return 1
end

-- execute pkg
exec @hr = sp_oamethod @opkg, 'execute'
if @hr <> 0 
begin
    raiserror('package execution failed', 16, 1)
    return 1
end


-- unitialize the pkg
exec @hr = sp_oamethod @opkg, 'uninitialize'
if @hr <> 0
begin
   raiserror('package uninitialize failed', 16, 1)
   return 1
end

-- clean up
exec @hr = sp_oadestroy @opkg
if @hr <> 0
begin
   raiserror('package clean-up failed', 16, 1)
    return 1
end

return 0

go


De gebruikers moeten execute rechten hebben op de SP_OA* extended procedures in de master db.

[ Voor 88% gewijzigd door JapJap op 07-06-2005 17:41 ]


  • Lorn
  • Registratie: Maart 2000
  • Laatst online: 13-01-2025

Lorn

I have a bad feeling...

Ik heb vandaag een soort gelijk probleem gehad. In mijn SQL server had ik een DTS package die wat deed op mijn lokale SQL server. Via een VB applicatie roep ik de package aan en dit werkt prachtig zolang de applicatie maar op mijn eigen PC staat. Zodra ik wou proberen de applicatie vanaf een andere PC te draaien kreeg ik een zelfde foutmelding als jij.

Na lang zoeken heb ik voor mij de oplossing gevonden. In mijn package had ik een connectie naar de database. Als server had ik hier '(local)' voor gebruikt. Ik vermoed dat de DTS package wordt uitgevoerd op de client en niet de server waardoor '(local)' dus opeens een hele andere PC is (ik heb verder geen verstand van DTS dus wellicht ga ik met deze uitspraak gruwelijk de mist in). Toen ik de server instelling wijzigde naar de naam van de PC werkte de package opeens wel vanaf andere PC's.

Ik weet natuulijk niet hoe jij je connectie hebt gedefinieerd maar het is wellicht de moeite waard om er even naar te kijken.

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Lorn schreef op dinsdag 02 augustus 2005 @ 16:39:
[knip]
Na lang zoeken heb ik voor mij de oplossing gevonden. In mijn package had ik een connectie naar de database. Als server had ik hier '(local)' voor gebruikt.
[knip]
En de oplossing had je natuurlijk in dit topic gevonden ;)
[rml]Annie in "[ VB6] Remote DTS executing"[/rml]

Today's subliminal thought is:


  • Lorn
  • Registratie: Maart 2000
  • Laatst online: 13-01-2025

Lorn

I have a bad feeling...

Ahum... :X

Ik had m'n probleem zelf opgelost, ben toen op Tweakers gaan zoeken naar meer informatie over DTS. Kwam dit topic tegen en zag dat de TS een of andere vage oplossing met Telnet had bedacht, heb vervolgens zonder echt goed het topic te lezen m'n reactie geplaatst... stom, stom, stom :)
Pagina: 1