我正在申请一个学校项目。 当我尝试执行存储过程时,我会收到一条错误消息,说明语法无效。
这是我的代码来自Vba和存储过程
CREATE PROCEDURE spVeranderPrijs
(
@ArtikelNr integer,
@WijzigingsDatum Date,
@NieuwePrijs integer
)
AS
BEGIN Transaction
Select * from artikelprijs
where artikelnr = @ArtikelNr
and einddatum = '2099-01-01'
if @@ERROR <> 0
update ArtikelPrijs set einddatum = @Wijzigingsdatum
INSERT INTO Artikelprijs
VALUES (@ArtikelNr, @NieuwePrijs, @WijzigingsDatum, '2099-01-01');
BEGIN
ROLLBACK
RAISERROR ('Error tijdens het uitvoeren', 16 , 1)
RETURN
END
Commit
GO
我的代码在Vba
Private Sub Command6_Click()
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim sConnString As String
sConnString = "Provider=SQLOLEDB;Data Source=.\SQLEXPRESS;" & _
"Initial Catalog=KlantArtikelApp;" & _
"Integrated Security=SSPI;"
Set conn = New ADODB.Connection
Set rs = New ADODB.Recordset
conn.Open sConnString
Set rs = conn.Execute("EXEC spVeranderprijs '" & TxTArtikelNr & "', '" & TxTWijzigingsDatum & "' '" & TxTPrijs & "'")
End Sub
我似乎无法让它发挥作用,任何人都可以帮忙吗?
答案 0 :(得分:0)
CREATE PROCEDURE spVeranderPrijs
(
DECLARE @ArtikelNr integer,
@WijzigingsDatum Date,
@NieuwePrijs integer
)
AS
BEGIN Transaction
Select * from artikelprijs
where artikelnr = @ArtikelNr
and einddatum = '2099-01-01'
if @@ERROR <> 0
update ArtikelPrijs set einddatum = @Wijzigingsdatum
INSERT INTO Artikelprijs
VALUES (@ArtikelNr, @NieuwePrijs, @WijzigingsDatum, '2099-01-01');
BEGIN
ROLLBACK
RAISERROR ('Error tijdens het uitvoeren', 16 , 1)
RETURN
END
Commit
GO
我刚刚添加了declare语句。也许这就是你收到无效错误信息的原因
答案 1 :(得分:0)
在这一行:
conn.Execute("EXEC spVeranderprijs '" & TxTArtikelNr & "', '" & TxTWijzigingsDatum & "' '" & TxTPrijs & "'")
您在TxTArtikelNr
和TxTPrijs
内输入单引号。您的存储过程需要integer
这些参数,所以丢失行中的单引号并像这样传递它(我还在最后两个参数之间添加了一个缺少的逗号):
conn.Execute("EXEC spVeranderprijs " & TxTArtikelNr & ", '" & TxTWijzigingsDatum & "', " & TxTPrijs)
答案 2 :(得分:0)
您的存储过程需要3个参数。所以你在TxTWijzigingsDatum之后错过了一个逗号。
Set rs = conn.Execute("EXEC spVeranderprijs " & TxTArtikelNr & ", '" & TxTWijzigingsDatum & "' ," & TxTPrijs)
无需引用整数值。只有日期或字符串。
但应避免使用此类编码。 如果您使用此代码插入包含单引号的字符串(&#39;),它们将破坏您的查询。您必须转义它们或更好地使用参数化查询。