2013-05-03 61 views
1

我在VBA中轉換時遇到問題。我做了一個表格一個按鈕,當我按下它,它應該更新我的數據庫表中,但我得到一個錯誤:在VBA Access中轉換

arithmetic overflow error converting numeric to data type numeric 

如何才能解決這個問題呢?這裏是我的代碼:

Private Sub Inserare_Click() 
    Dim strSQL As String 
    Dim rst As New ADODB.Recordset 

    strSQL = "UPDATE dbo.Soferi_test SET number= '" & 
      Me![subform_soferi].Form!certificat_cipti & _ 
      "',drivers= '" & Me![subform_soferi].Form!categorii_permis & _ 
      "' WHERE IDNO = " & Forms!Forma_redactare_soferi!IDNO 

    Call AttServ(strSQL, rst) 
    MsgBox ("Datele au fost introduse cu success") 
End Sub 
+1

SQL注入任何人 – 2013-05-03 08:33:12

+0

可以給你一個解決方案? – Sergio 2013-05-03 08:36:17

+0

你可以簡化這個例子 - 什麼類型的certificat_cipti,categorii_permis等? – 2013-05-03 08:41:03

回答

1

numberreserved word。在您的UPDATE語句中包含該名稱,以便數據庫引擎知道它應該是字段名稱。

strSQL = "UPDATE dbo.Soferi_test SET [number]= '" & 

如果該更改無法解決問題,請檢查已完成的SQL語句。在將字符串存儲到strSQL之後插入此行。

Debug.Print strSQL 

您可以查看在立即窗口輸出(帶按Ctrl + 克去那裏)。然後,您可以將該語句文本複製到新的Access查詢的SQL視圖中進行測試。如果您無法正確使用它,請告訴我們您是否收到相同或不同的錯誤消息。

它也可能有助於告訴我們您的AttServ程序使用strSQL的代碼。

0

我認爲問題出在您嘗試更新表的字段類型。

例如:如果您嘗試將small integer字段的值設置爲long integer值,則Access將引發錯誤。

檢查您的字段的類型,並將它們設置爲適當的類型。


其他認爲可能是錯誤的是文本框的值。可以肯定的是,嘗試轉換這些值。

例如:Cdbl(Me![subform_soferi].Form!certificat_cipti)會將您的文本字段中的字符串轉換爲double值。

另外,我建議您使用value屬性的文本框:

Me![subform_soferi].Form!certificat_cipti.Value 

CDbl(Me![subform_soferi].Form!certificat_cipti.Value) 

請注意,如果您使用 「轉換」 功能(CDblCIntCDate,等等)如果轉換失敗將會拋出錯誤(例如,試圖將12abc轉換爲整數將失敗)