我对VBA中的转换有疑问。我在表单中创建了一个按钮,当我按下它时,它应该在我的数据库表中进行更新,但是我得到了一个错误:
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
答案 0 :(得分:1)
number
是reserved word。在UPDATE
语句中对名称进行括号,以便db引擎知道它应该是字段名称。
strSQL = "UPDATE dbo.Soferi_test SET [number]= '" &
如果该更改无法解决问题,请检查已完成的SQL语句。将字符串存储到strSQL
后插入此行。
Debug.Print strSQL
您可以在立即窗口中查看该输出(使用 Ctrl + g )。然后,您可以将该语句文本复制到新的Access查询的SQL视图中以进行测试。如果您无法使其正常工作,请将该语句添加到您的问题中,并告诉我们您是否收到相同或不同的错误消息。
向我们展示使用AttServ
的{{1}}程序中的代码也可能有所帮助。
答案 1 :(得分:0)
我认为问题出在您要更新的表的字段类型中。
示例:如果您尝试将small integer
字段的值设置为long integer
,则值将导致错误。
检查字段的类型并将其设置为适当的类型。
其他人认为可能出错的是文本框的价值。只是为了确定,尝试转换值。
示例: 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
转换为整数将失败)