在VBA访问中转换

时间:2013-05-03 08:31:37

标签: vba ms-access access-vba

我对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

2 个答案:

答案 0 :(得分:1)

numberreserved 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)

请注意,如果您使用“转化”功能(CDblCIntCDate等),则转换失败时会引发错误(例如,尝试将12abc转换为整数将失败)