SQL语法错误,找不到它

时间:2016-09-30 10:26:12

标签: sql vba ms-access stored-procedures

我正在申请一个学校项目。 当我尝试执行存储过程时,我会收到一条错误消息,说明语法无效。

这是我的代码来自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

我似乎无法让它发挥作用,任何人都可以帮忙吗?

3 个答案:

答案 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 & "'")

您在TxTArtikelNrTxTPrijs内输入单引号。您的存储过程需要integer这些参数,所以丢失行中的单引号并像这样传递它(我还在最后两个参数之间添加了一个缺少的逗号):

conn.Execute("EXEC spVeranderprijs  " & TxTArtikelNr & ", '" & TxTWijzigingsDatum & "', " & TxTPrijs)

答案 2 :(得分:0)

您的存储过程需要3个参数。所以你在TxTWijzigingsDatum之后错过了一个逗号。

Set rs = conn.Execute("EXEC spVeranderprijs " & TxTArtikelNr & ", '" & TxTWijzigingsDatum & "' ," & TxTPrijs)

无需引用整数值。只有日期或字符串。

但应避免使用此类编码。 如果您使用此代码插入包含单引号的字符串(&#39;),它们将破坏您的查询。您必须转义它们或更好地使用参数化查询。