在VBA Access中转换
问题描述:
我在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
答
number
是reserved word。在您的UPDATE
语句中包含该名称,以便数据库引擎知道它应该是字段名称。
strSQL = "UPDATE dbo.Soferi_test SET [number]= '" &
如果该更改无法解决问题,请检查已完成的SQL语句。在将字符串存储到strSQL
之后插入此行。
Debug.Print strSQL
您可以查看在立即窗口输出(带按Ctrl + 克去那里)。然后,您可以将该语句文本复制到新的Access查询的SQL视图中进行测试。如果您无法正确使用它,请告诉我们您是否收到相同或不同的错误消息。
它也可能有助于告诉我们您的AttServ
程序使用strSQL
的代码。
答
我认为问题出在您尝试更新表的字段类型。
例如:如果您尝试将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)
请注意,如果您使用 “转换” 功能(CDbl
,CInt
,CDate
,等等)如果转换失败将会抛出错误(例如,试图将12abc
转换为整数将失败)
SQL注入任何人 – 2013-05-03 08:33:12
可以给你一个解决方案? – Sergio 2013-05-03 08:36:17
你可以简化这个例子 - 什么类型的certificat_cipti,categorii_permis等? – 2013-05-03 08:41:03