2013-05-03 78 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转换为整数将失败)