将变量从Access2010传递到存储过程

时间:2015-10-27 18:21:48

标签: sql-server-2005 ms-access-2010

我创建了一个SSIS包,它从以下存储过程运行:

DECLARE @SQLQuery ASVARCHAR(2000)
DECLARE @ServerName VARCHAR(200)
SET @ServerName ='myServerName'
SET @SQLQuery ='DTExec /F ^"\\...\...\My_Package.dtsx^" '
EXEC master..xp_cmdshell @SQLQuery

然后我有一个带有几个按钮的Access2010应用程序,它们运行3个程序,所有设置都与使用以下代码运行包的方式相同:

Dim conn As New ADODB.Connection
Dim cmd As New ADODB.Command
Dim sConnString As String

sConnString = "Provider=sqloledb; Server=MyServerName; Database=MyDB; Trusted_Connection=True; Integrated Security=SSPI;"

conn.Open sConnString

With cmd
  .ActiveConnection = conn
  .CommandType = adCmdText
  .CommandText = "EXEC my_sproc;"

现在我需要在触发用户输入文件名的过程的两个按钮上添加文本框。该按钮需要将该文件名传递给存储过程,然后存储过程需要在包中使用它。

非常感谢任何建议。这是我第一次做这样的事情,我有点失落。

谢谢,  斯科特

更新 我改变了我的程序,它适用于@FileName过程中的临时值。我现在不确定如何将Access中的值传入@FileName变量。

DECLARE @cmd VARCHAR(1000)
DECLARE @SSISPath VARCHAR(1000)
DECLARE @FilePath VARCHAR(1000)
DECLARE @FileName VARCHAR(1000)

SET @SSISPath = '\\Server\...\...\...\...\Package.dtsx'
SET @FilePath = '\Server\...\...\...\'
SET @FileName = 'myImportFile.txt' --temp value - need to get value from Access form text box

SELECT @cmd = 'dtexec /f "' + @SSISPath + '"'
SELECT @cmd = @cmd + ' /SET \Package.Variables[User::FileName].Properties[Value];"' + @FilePath + @FileName + '"'

EXEC master..xp_cmdshell @cmd

1 个答案:

答案 0 :(得分:1)

您需要将@FileName设为输入参数...

ALTER PROCEDURE my_sproc 
    -- input parameter:
    @FileName VARCHAR(1000)
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @cmd VARCHAR(1000)
    DECLARE @SSISPath VARCHAR(1000)
    DECLARE @FilePath VARCHAR(1000)        

    SET @SSISPath = '\\Server\...\...\...\...\Package.dtsx'
    -- and so on

...然后使用以下

行中的参数调用存储过程
With cmd
    .ActiveConnection = conn
    .CommandType = adCmdStoredProc
    .CommandText = "my_sproc"
    .Parameters.Append cmd.CreateParameter("@FileName", adVarChar, adParamInput, 1000, Me.SomeTextBox.Value)
    .Execute
End With