2016-11-05 46 views
0

我目前正在爲學校的一個項目,我必須做出一個程序,當我試圖創建訂單,我得到退還給我這個錯誤,我可以創造。 訂單INT轉換。找不到nvarchar的在我的代碼

將數據類型Nvarchar轉換爲Int時出錯。

在提前對不起,如果這是一個非常基本的問題是easely斑點。我和我的項目成員正在開始程序員,但我們根本無法發現哪裏出錯。

我們在VBA執行的代碼是這樣的:

Set rs = DbConn.Execute("EXEC spOrderPlaatsen '" & Me.tbTijd & "', " & Me.klantnr & ", '" & Me.tbOphaaldatum & "', '" & Me.tbAfleverdatum & "', '" & Me.tbOphaaladres & "', " & Me.tbPalletnr & ", " & Me.tbAantalpallets & "") 

此代碼執行的我們的存儲過程。 存儲過程如下所示。

CREATE PROCEDURE spOrderPlaatsen 
( 
@tijd    time(0), 
@klantnr   integer, 
@ophaaldatum  date, 
@afleverdatum  date, 

@palletnr integer, 
@aantal  integer, 
@Adres  Varchar(255) 

) 
AS 

BEGIN TRANSACTION 

DECLARE @ordernr int 
DECLARE @besteldatum date 

set @besteldatum = getdate() 

SELECT @ordernr = MAX(o.ordernr) + 1 
FROM orders o 

insert into orders values (@ordernr, @besteldatum, @tijd, @klantnr, @ophaaldatum, @afleverdatum, @adres) 
insert into orderregel values (@ordernr, @palletnr, @aantal) 

IF @@ERROR <> 0 
BEGIN 

ROLLBACK 

RAISERROR ('Error tijdens het plaatsen van order.', 16, 1) 
RETURN 
END 

COMMIT 
go 

不知何故,我們得到了一個我們找不到的轉換錯誤。

任何1可以爲我們解決這個問題嗎?這將不勝感激

+0

此代碼看起來像SQL服務器,而不是MS訪問,請適當地標記您的問題。 –

+0

對於VBA部分:'Debug.Print'你的SQL語句,請參見[如何在VBA中調試動態SQL](http://stackoverflow.com/a/1099570/3820271) – Andre

回答

2

有多個地方,這可能會錯誤。以下是一些建議:

  1. 使用顯式參數執行存儲過程(例如,參見here)。 有史以來只是將參數轉儲到查詢字符串中。
  2. 總是列出insert的列。所以,這應該是insert into orders(col1, col2, col3, . . .)爲你包括任何列。
  3. 使用identity所以ordernr是由數據庫自動計算。您可以使用INSERT中的OUTPUT子句獲取該值。
  4. 同樣,您可能需要besteldatum默認爲當前日期 - 否。我不確定這個列的真實含義,但默認情況下適用於創建日期列。
  5. 環繞在它自己的BEGIN/END塊存儲過程的整個身體(不依賴於BEGIN TRANSACTION