2014-04-23 37 views
1

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

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

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

您正在使用错误常量来创建第一个参数(@Fx)。您将它创建为dbDecimal,并且dbDecimal的值为20.您要使用adDecimal,其值为14.(对于ADODB.Parameter,dbDecimal = 20 = adBigInt,这解释了为什么您的参数值被四舍五入或截断为整数。 )

相关问题