【发布时间】:2019-11-30 19:43:15
【问题描述】:
我正在尝试使用存储过程将值从 VB6 插入 SQL Server,但是当我想执行该过程时,我收到此错误:
精度无效
我已经改变了很多次尝试输入它们的方式,以至于我不再知道该怎么做。
这是VB6中的代码
Dim strSQL As String
strSQL = "INSERT INTO FacturasPendientes (IdFactura,FechaFactura,CodigoProveedor,NombreProveedor," _
& " SubTotal,Iva,Total,FechaVencimiento,DiasDescuento,DescProntoPago,Pagado) VALUES (?,?,?,?,?,?,?,?)"
Dim CmdCont As ADODB.Command
Set CmdCont = New ADODB.Command
With CmdCont
Set .ActiveConnection = Cnn
.CommandType = adCmdStoredProc
.CommandText = "sp_FacturasCompras"
.Parameters.Append CmdCont.CreateParameter("@IdFactura", adVarChar, adParamInput, 50, TxtFactura.Text)
.Parameters.Append CmdCont.CreateParameter("@FechaFactura", adDate, adParamInput, 50, dtpFactura.Value)
.Parameters.Append CmdCont.CreateParameter("@CodigoProveedor", adVarChar, adParamInput, 50, TxtCodigoProveedor.Text)
.Parameters.Append CmdCont.CreateParameter("@NombreProveedor", adVarChar, adParamInput, 100, txtProveedor.Text)
.Parameters.Append CmdCont.CreateParameter("@SubTotal", adNumeric, adParamInput, 18, Round(Val(m_Subtotal), 2))
.Parameters.Append CmdCont.CreateParameter("@Iva", adNumeric, adParamInput, 18, Round(Val(m_Iva), 2))
.Parameters.Append CmdCont.CreateParameter("@Total", adNumeric, adParamInput, 18, Round(Val(m_Total), 2))
.Parameters.Append CmdCont.CreateParameter("@FechaVencimiento", adDate, adParamInput, 50, FechaFinal)
.Parameters.Append CmdCont.CreateParameter("@DiasDescuento", adVarChar, adParamInput, 50, txtDias.Text)
.Parameters.Append CmdCont.CreateParameter("@DescProntoPago", adVarChar, adParamInput, 50, txtDescuento.Text)
.Parameters.Append CmdCont.CreateParameter("@Pagado", adBigInt, adParamInput, chkPago.Value)
.Prepared = True
.Execute
End With
MsgBox "Se Grabaron los datos"
存储过程是这样的:
ALTER PROCEDURE [dbo].[sp_FacturasCompras]
-- agregamos los valores de la consulta
@IdFactura VARCHAR(50),
@FechaFactura DATE,
@CodigoProveedor VARCHAR(50),
@NombreProveedor VARCHAR(100),
@SubTotal NUMERIC(18),
@Iva NUMERIC(18),
@Total NUMERIC(18),
@FechaVencimiento DATE,
@DiasDescuento VARCHAR(50),
@DescProntoPago VARCHAR(50),
@Pagado BIGINT
AS
BEGIN
INSERT INTO FacturasPendientes (IdFactura, FechaFactura, CodigoProveedor, NombreProveedor,
SubTotal, Iva, Total, FechaVencimiento,
DiasDescuento, DescProntoPago, Pagado)
VALUES (@IdFactura, @FechaFactura, @CodigoProveedor, @NombreProveedor,
@SubTotal, @Iva, @Total, @FechaVencimiento,
@DiasDescuento, @DescProntoPago, @Pagado)
END
【问题讨论】:
-
您将
chkPago.Value传递给Size参数,用于@Pagado。我还会从日期参数中删除大小。 -
这是一个 STORED 过程 - 就像存储在 SQL Server 中一样 - 它与“存储”无关......
-
旁注:您应该不为您的存储过程使用
sp_前缀。微软有reserved that prefix for its own use (see Naming Stored Procedures),你确实会在未来某个时候冒着名称冲突的风险。 It's also bad for your stored procedure performance。最好只是简单地避免sp_并使用其他东西作为前缀 - 或者根本不使用前缀!
标签: sql-server vb6 adodb