gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 11:42:32 26 4
gpt4 key购买 nike

我需要使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com