在访问中使用VBA将单/双类型插入到DB

时间:2016-09-14 12:30:04

标签: vba ms-access locale

我需要帮助解决一个问题。 我需要在访问中更新数据库,并且它在使用Long和Integers时工作正常。

看看这段代码。

sql = "UPDATE DBNAME SET Long_Field = " & Long_Variable & " WHERE ID = " & id
DoCmd.SetWarnings (False)
DoCmd.RunSQL sql

此代码运行完美,它需要一个很长的变量并将其放入正确的字段中,该字段设置为Long。

但是,如果我想填充单个/双字段(香港专业教育学院考试过)

sql = "UPDATE DBNAME SET Double_Field = " & double_Variable & " WHERE ID= " & id
DoCmd.SetWarnings (False)
DoCmd.RunSQL sql

我一直收到运行时错误3144:update语句中出现语法错误。 我可以简单地切换出字段名称和变量名称,代码运行完美,但只要我尝试将双值(例如(5,8))发送到表中设置为double的字段,它给了我这个错误。

任何?

2 个答案:

答案 0 :(得分:3)

我假设您想在字符串中使用点作为小数点分隔符。

从double到string的转换是使用系统区域设置中的分隔符完成的,因此在您的情况下是逗号。

这意味着

double_variable = 5.8
sql = "... " & double_variable & " ..."

将在sql变量中生成... 5,8 ...。 解决这个问题的最简单方法是使用

"..." & Replace(CStr(double_variable), ",", ".") & "..."

这会将所有,替换为.。我把CStr放在那里以确保它首先被转换为字符串。如果系统区域设置发生更改,它也会起作用,因为如果没有,则不会发生任何事情。唯一需要注意的是,如果由于某种原因转换插入1000s分隔符,它将失败,但这只会在其他情况下相关,因为我认为CStr不会这样做。

答案 1 :(得分:2)

目前的答案并不是最简单的,也不是最简单的答案。

通用方法是使用 Str ,因为它总是返回一个点作为小数分隔符:

sql = "UPDATE DBNAME SET Double_Field = " & Str(double_Variable) & " WHERE ID = " & id & ""