我有一个存储过程,从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,但我不能让它适用于这个。我希望我不会错过一些明显的东西!
答案 0 :(得分:1)
您正在使用错误的常量来创建第一个参数(@Fx
)。您将其创建为dbDecimal
,dbDecimal
的值为20.您希望使用adDecimal
,其值为14.(对于ADODB.Parameter,{{1} },这解释了为什么你的参数值被舍入或截断为整数。)