将变量从Access2010传递到存储过程
Passing a variable from Access2010 to stored procedure
我创建了一个 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
您需要将 @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
我创建了一个 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
您需要将 @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