使用逗号千分隔符INSERT INTO数值

时间:2015-03-17 03:56:22

标签: ms-access sql-insert

我的SQL是

"INSERT INTO table1 (Item, Price) VALUE ('" & ItemString & "', " & PriceValue & ")"

工作正常。但是,如果价格为12,345.67.,则SQL错误消息为

查询值和目标字段的数量不同。

这是因为千位逗号分隔值。我应该如何修改我的SQL以使数字值具有逗号分隔符(以及可能的$符号)?

提前致谢。

6 个答案:

答案 0 :(得分:2)

这是您始终必须使用Str将十进制数转换为美国格式的字符串表达式而忽略您的本地设置:

"INSERT INTO table1 (Item, Price) VALUE ('" & ItemString & "', " & Str(PriceValue) & ")"

关于Str的神奇之处在于总是插入一个点作为小数分隔符,仅此而已。这使它成为防弹和最简单的解决方案。

在小数点分隔符不是点的国际环境中,大多数其他方法都会失败。

答案 1 :(得分:1)

您可以使用Recordset代替INSERT INTO查询:

Dim RS As DAO.Recordset
Set RS = CurrentDb.OpenRecordset("select * from table1 where 1=0")
RS.AddNew
RS("Item") = ItemString
RS("Price") = PriceValue
RS.Update
RS.Close
Set RS = Nothing

注意:

  • Recordset自动处理所有讨厌的问题,例如不同的小数分隔符,字符串中的引号,正确的日期/时间值等。
    因此,您不需要乱用字符串,转换数字等。
  • 为了使此代码有效,您的Access数据库需要引用任何版本的Microsoft DAO Object Library ...在大多数较新的Access版本中应该已经是这种情况
  • WHERE子句(where 1=0)是因为Recordset需要“连接”到表以了解列名等。
    但是我们只添加新行,因此我们实际上不需要加载任何现有行,因此where 1=0

答案 2 :(得分:0)

以下查询假定您的Price列的类型为MONEY

"INSERT INTO table1 (Item, Price) VALUE ('" & ItemString & "', CAST(" & PriceValue & ") AS MONEY))"

我正在投射PriceValue参数以键入MONEY,只要格式为$XXX,XXX.XX

,该参数就可以正常工作

答案 3 :(得分:0)

由于mysql数据库中没有'currency'数据类型,只需存储该值即可。将其格式化为前端的货币。同样,您可以在插入表格之前处理价格以剥离格式。

答案 4 :(得分:0)

无法在逗号查询中将逗号附加到数值或整数值。 而是插入支持列的数据类型的值,并且可以将其转换为UI中所需的格式。 对于检索,您可以使用以下内容:

选择testCol,替换(转换(varchar,cast(价格为金钱),1),' .00',#39;')来自testTbl。

结果:

testCol(无列名) asd 12,346 asd 12,346

答案 5 :(得分:0)

我在下面使用,它的工作原理。

INSERT INTO table1 (Item, Price) VALUE ('" & ItemString & "', " & Format(PriceValue,"General Number") & ")