Newsgroup: it.comp.appl.access
Titolo: ESEGUIRE DTS DA CODICE - ERRORE

Ciao
ho provato a lanciare un DTS da codice in un db access utilizzando
questa funzione:
Private Sub Esegui_DTS()
    Dim objPackage As New DTS.Package
    objPackage.LoadFromStorageFile "C:\DTS_new
\Estrazioni_per_quadrature.dts", ""
    objPackage.Execute
    objPackage.UnInitialize
    Set objPackage = Nothing
End Sub
la prima volta che eseguo la funzione tutto funziona le successive
volte mi restituisce questo errore:
Step Error Description:Provider generated code execution exception:
EXCEPTION_ACCESS_VIOLATION
Step Error code: 80040005
Step Error Help File:sqldts80.hlp
Step Error Help Context ID:700
se chiudo il db e riapro tutto funziona solo per una volta
potete aiutarmi per favore?
grazie

 ha scritto nel messaggio 
news:f38e7e59-6f58-4ec1...@s8g2000prg.googlegroups.com...

non puoi crearti una sp sql server che ti esegua il dts? trovi marea di 
documentazione su come farla.
se si da access devi solamente mandare in esecuzione la sp
ciao, thomas

 - Mostra testo tra virgolette -
non ho mai provato hai un esempio semplice?
grazie

 ha scritto nel messaggio 
news:dea2406a-6024-45dd...@n77g2000hse.googlegroups.com...


=======================
http://www.sqldts.com/210.aspx
se non risolvi ti mando un esempio dall'ufficio domani
ciao

 - Mostra testo tra virgolette -
Ciao Thomas
attualmente eseguo il DTSRUN da un modulo visual in access per
lanciare un dts che mi alimenta delle tabelle nello stesso db access
il problema è che utilizzando il dtsrun visual non attende la fine
dell'esecuzione.
utilizzano il comando objPackage.Execute sembrava funzionare se nonper
il problema che ti ho descritto
cavolino non so proprio come fare ad eseguire da visual un dts e fare
in modo che attenda la fine

 - Mostra testo tra virgolette -
Grazie per il post ma ho già provato col dtsrun e il problema sta nel
fatto che
l'esecuzione parte ma il codice visual non attende il completamento e
prosegue
col programma.
In poche parole ho la necessità di lanciarlo e aspettare che finisca
(da visual access)
ah dimenticavo di dirti che il dts non è salvato sul serve ma in
locale e su server per
proplemi di autorizzazioni non poso salvare niente neanche sp
grazie ancora per la disponibilità ciao
F


megacut
io faccio così:
ovviamente il DTS sta memorizzato nel server non penso sia un problema per 
te memorizzarlo li.
da access/adp
DoCmd.RunSQL "exec sp_executepackage 'NomeMioDTS',null,null,null"
previa creazione delle seguenti  sp sul server:
if exists (select * from sysobjects where id =
object_id(N'[dbo].[sp_displaypkgerrors]') and OBJECTPROPERTY(id,
N'IsProcedure') = 1)
drop procedure [dbo].[sp_displaypkgerrors]
GO
if exists (select * from sysobjects where id =
object_id(N'[dbo].[sp_executepackage]') and OBJECTPROPERTY(id,
N'IsProcedure') = 1)
drop procedure [dbo].[sp_executepackage]
GO
if exists (select * from sysobjects where id =
object_id(N'[dbo].[sp_displayoaerrorinfo]') and OBJECTPROPERTY(id,
N'IsProcedure') = 1)
drop procedure [dbo].[sp_displayoaerrorinfo]
GO
if exists (select * from sysobjects where id =
object_id(N'[dbo].[sp_hexadecimal]') and OBJECTPROPERTY(id, N'IsProcedure')
= 1)
drop procedure [dbo].[sp_hexadecimal]
GO
CREATE PROCEDURE sp_hexadecimal
    @binvalue varbinary(255), @hexvalue varchar(255) OUTPUT AS
DECLARE @charvalue varchar(255)
DECLARE @i int
DECLARE @length int
DECLARE @hexstring char(16)
SELECT @charvalue = '0x'
SELECT @i = 1
SELECT @length = DATALENGTH(@binvalue)
SELECT @hexstring = '0123456789abcdef'
WHILE (@i <= @length) BEGIN
 DECLARE @tempint int
 DECLARE @firstint int
 DECLARE @secondint int
 SELECT @tempint = CONVERT(int, SUBSTRING(@binvalue,@i,1))
 SELECT @firstint = FLOOR(@tempint/16)
 SELECT @secondint = @tempint - (@firstint*16)
 SELECT @charvalue = @charvalue + SUBSTRING(@hexstring, @firstint+1, 1) +
SUBSTRING(@hexstring, @secondint+1, 1)
SELECT @i = @i + 1
END
SELECT @hexvalue = @charvalue
GO
CREATE PROCEDURE sp_displayoaerrorinfo
    @object int, @hresult int AS
DECLARE @output varchar(255)
DECLARE @hrhex char(10)
DECLARE @hr int
DECLARE @source varchar(255)
DECLARE @description varchar(255)
PRINT 'OLE Automation Error Information'
EXEC sp_hexadecimal @hresult, @hrhex OUT
SELECT @output = '  HRESULT: ' + @hrhex
PRINT @output
EXEC @hr = sp_OAGetErrorInfo @object, @source OUT, @description OUT
IF @hr = 0 BEGIN
 SELECT @output = '  Source: ' + @source
 PRINT @output
 SELECT @output = '  Description: ' + @description
 PRINT @output
END ELSE BEGIN
    PRINT "  sp_OAGetErrorInfo failed."
    RETURN
END
GO
create proc sp_displaypkgerrors
 @pkg as int
as
declare @numsteps int
declare @steps int
declare @step int
declare @stepresult int
declare @pkgresult int
declare @hr int
 select @pkgresult = 0
 EXEC @hr = sp_OAGetProperty @pkg, 'Steps', @steps OUTPUT
 IF @hr <> 0
 BEGIN
     print 'Unable to get steps'
     EXEC sp_displayoaerrorinfo @pkg , @hr
     RETURN
 END
 EXEC @hr = sp_OAGetProperty @steps, 'Count', @numsteps OUTPUT
 IF @hr <> 0
 BEGIN
     print 'Unable to get number of steps'
     EXEC sp_displayoaerrorinfo @steps , @hr
     RETURN
 END
 while @numsteps > 0
 Begin
  EXEC @hr = sp_OAGetProperty @steps, 'Item', @step OUTPUT, @numsteps
  IF @hr <> 0
  BEGIN
      print 'Unable to get step'
      EXEC sp_displayoaerrorinfo @steps , @hr
      RETURN
  END
  EXEC @hr = sp_OAGetProperty @step, 'ExecutionResult', @stepresult OUTPUT
  IF @hr <> 0
  BEGIN
      print 'Unable to get ExecutionResult'
      EXEC sp_displayoaerrorinfo @step , @hr
      RETURN
  END
  select @numsteps = @numsteps - 1
  select @pkgresult = @pkgresult + @stepresult
 end
 if @pkgresult > 0
  print 'Package had ' + cast(@pkgresult as varchar) + ' failed step(s)'
 else
  print 'Packge Succeeded'
GO
create proc sp_executepackage
  @packagename varchar(255)='NomeMioDts',  --package name, gets most recent 
version
 @userpwd varchar(255) = Null, --login pwd
@intsecurity bit = 0,  --use non-zero to indicate integrated security
 @pkgPwd varchar(255) = '' --package password
as
declare @hr int
declare @object int
 --create a package object
 EXEC @hr = sp_OACreate 'DTS.Package', @object OUTPUT
 if @hr <> 0
 Begin
  EXEC sp_displayoaerrorinfo @object, @hr
  RETURN
 end
 --load the package (ADD integrated security support)
 declare @svr varchar(15)
 declare @login varchar(15)
 select @login = SUSER_NAME()
 select @svr = HOST_NAME()
 declare @flag int
 select @flag = 0
 if @intsecurity = 0
  if @userpwd = Null
   EXEC @hr = sp_OAMethod @object, 'LoadFromSqlServer',NULL,
@ServerName=@svr, @ServerUserName=@login, @PackageName=@packagename,
@Flags=@flag, @PackagePassword = @pkgPwd
  else
   EXEC @hr = sp_OAMethod @object, 'LoadFromSqlServer',NULL,
@ServerName=@svr, @ServerUserName=@login, @PackageName=@packagename,
@Flags=@flag, @PackagePassword = @pkgPwd, @ServerPassword = @userpwd
 else
 begin
  select @flag = 256
  EXEC @hr = sp_OAMethod @object, 'LoadFromSqlServer',NULL,
@ServerName=@svr, @PackageName=@packagename, @Flags=@flag, @PackagePassword
= @pkgPwd
 end
 IF @hr <> 0
 BEGIN
     print 'LoadFromSQLServer failed'
     EXEC sp_displayoaerrorinfo @object , @hr
     RETURN
 END
 --execute it
 EXEC @hr = sp_OAMethod @object, 'Execute'
 IF @hr <> 0
 BEGIN
     print 'Execute failed'
     EXEC sp_displayoaerrorinfo @object , @hr
     RETURN
 END
 --return the step errors as a recordset
 exec sp_displaypkgerrors @object
 -- unitialize the package
 EXEC @hr = sp_OAMethod @object, 'UnInitialize'
 IF @hr <> 0
 BEGIN
     print 'UnInitialize failed'
     EXEC sp_displayoaerrorinfo @object , @hr
     RETURN
 END
 -- release the package object
 EXEC @hr = sp_OADestroy @object
 if @hr <> 0
 Begin
  EXEC sp_displayoaerrorinfo @object , @hr
  RETURN
 end
GO
===================
fammi sapere
Thomas

 ha scritto nel messaggionews:591df8cd-54d4-4859...@v3g2000hsc.googlegroups.com...

putroppo non posso scrivere sul server
per ordine della SWHouse
devo mantenere il DTS in locale e non posso ceare SP
grazie
comunque