sql - Access 将带小数点逗号的数字插入 Postgresql

标签 sql vba postgresql ms-access decimal-point

我需要使用 Access VBA 将订单行插入到链接的 PostgreQL 表中。为了便于报告,我决定包括 netto 价格,这是一个数字 18,2 字段。 我的电脑有一个使用逗号作为小数点分隔符的比利时句号。即 0.8 表示为 0,8

如果插入语句,这是有问题的部分

mijnSQL = "INSERT INTO tblOrderLijnen (OrderID, Nettoprijs )"
mijnSQL = mijnSQL & " VALUES (" & NieuwOrderId& "', " & MijnTempOrderLijn!Prijs * ((100 - Korting) / 100) & ");"

计算的结果是0.8(我电脑上是0,8)

DoCmd.RunSQL mijnSQL

转换为十进制值无效的查询,因为小数点是逗号。我该如何解决这个问题?

INSERT INTO tblOrderLijnen (OrderID, OrderNr,ArtikelID,Aantal,Nettoprijs ) 
VALUES (216, 0,8);

字段数不匹配

我将插入更改为引用十进制值。这似乎有效,但它有效吗?我以后会遇到问题吗?

如果插入语句,这是有问题的部分

mijnSQL = "INSERT INTO tblOrderLijnen (OrderID, Nettoprijs )"
mijnSQL = mijnSQL & " VALUES (" & NieuwOrderId& "', " & MijnTempOrderLijn!Prijs * ((100 - Korting) / 100) & ");"

最佳答案

除了简单地防止 SQL 注入(inject)之外,还应考虑 SQL 参数化(用于应用层代码(如 VBA)中的任何 SQL 语句的行业标准)。不仅适用于 Access 或 Postgres。参数化有助于避免引号括起来、转义特殊字符、字符串连接以及指定数据类型以与区域设置保持一致。

在 MS Access 中,您可以使用 PARAMETERS 子句(在 Access SQL 方言中有效)并使用 querydefs 在 VBA 中绑定(bind)值.此外,正如所见,代码更清晰且更易于维护。

Dim qdef As QueryDef
...

' PREPARED STATEMENT (NO DATA)
mijnSQL = "PARAMETERS [firstparam] Long, [secondparam] Double;" _
           & " INSERT INTO tblOrderLijnen (OrderID, Nettoprijs)" _ 
           & " VALUES ([firstparm], [secondparam]);"

' INITIALIZE QUERYDEF
Set qdef = CurrentDb.CreateQueryDef("", mijnSQL)

' BIND PARAMS
qdef![firstparam] = NieuwOrderId
qdef![secondparam] = MijnTempOrderLijn!Prijs * ((100 - Korting) / 100)

' EXECUTE ACTION QUERY
qdef.Execute dbFailOnError

Set qdef = Nothing

关于sql - Access 将带小数点逗号的数字插入 Postgresql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47062951/

相关文章:

sql - 如何合并两行相同零件,但添加数量?

database - 巨大的 PostgreSQL 表可能出现性能问题

postgresql - 在继承的表上使用触发器来替换外键

java - 在 Spring Data JPA 的 native SQL 查询中使用命名参数

mysql游标需要很长时间才能执行

mysql - sql 上周总计

vba - excel vba中出现错误 “Out of Memory”

vba - 重命名书籍时出现运行时错误 13

vba - 将每个 ID 的最新修订复制到新工作表

postgresql - 为什么长时间运行的查询在 postgresql 日志中是空白的?