从MS访问到存储过程轮次的双重传递

时间:2014-04-23 06:54:48

标签: sql-server-2005 stored-procedures ms-access-2007

我有一个存储过程,从MS Access调用时传递一个变量。传递的变量是汇率,在0.8到0.999之间变化。当我通过SSMS运行sproc时,一切都是正确的,但如果我从MS Access调用,则表中插入的FxRate将舍入为1.

存储过程(剥离一点)是:

CREATE PROCEDURE [dbo].[usp_UpdateSKNDetailMaster] 
    -- Add the parameters for the stored procedure here
    @Fx decimal(4,3),
    @Ret int OUTPUT
AS
BEGIN
    INSERT INTO dbo.tblFxRate (TRUWeek,FxRate)
    VALUES (201412,@Fx)

END

要呼叫的功能是(再次被剥离)

Function RefreshSKNDetailMaster(dblFx As Double) As Long

[Connections, sproc anme etc...]

Set param = cmd.CreateParameter("@Fx", dbDecimal, adParamInput, , dblFx)
param.NumericScale = 3
param.Precision = 4
cmd.Parameters.Append param
Set param = cmd.CreateParameter("@Ret", 20, adParamOutput)
cmd.Parameters.Append param

CurrentDb.QueryTimeout = 0
cmd.Execute

RefreshSKNDetailMaster = cmd.Parameters("@Ret")

End Function

表格结构:

CREATE TABLE [dbo].[tblFxRate](
    [TruWeek] [int] NOT NULL,
    [FxRate] [decimal](4, 3) NOT NULL,
    [UID] [int] IDENTITY(1,1) NOT NULL
)

这种方法似乎适用于类似的sprocs,但我不能让它适用于这个。我希望我不会错过一些明显的东西!

1 个答案:

答案 0 :(得分:1)

您正在使用错误的常量来创建第一个参数(@Fx)。您将其创建为dbDecimaldbDecimal的值为20.您希望使用adDecimal,其值为14.(对于ADODB.Parameter,{{1} },这解释了为什么你的参数值被舍入或截断为整数。)