西班牙语用户的 ADO 记录集编号字段无法正确传输



我有一个由Excel前端控制的Access数据库。 北美有 9 位用户没有问题,西班牙的第 10 位用户在数字格式方面有问题。

单击按钮时,将创建一个 PDF(该 PDF 对所有用户具有正确的格式)并创建一个数据库条目。对于在西班牙的用户,美分分隔符将从数据库条目中删除。

我正在使用 ADO 记录集来传输数据,并且所有值都在 Excel 的文本框控件中输入。我尝试分隔美元和美分字段,并添加未输入非数字字符的验证。单击该按钮时,它将合并 PDF 和数据库条目的美元和美分字段。

Private Sub AmountBoxCents_AfterUpdate()
If CheckValuesForNonNumbers(AmountBoxCents.Value) = True Then
    If IsNumeric(AmountBox.Value Then
        AmountBoxTotal.Value = (Left(AmountBoxCents.Value, 2)) / 100 + AmountBox.Value
    End If
Else
    AmountBoxCents.Value = ""
End If
End Sub

CheckValuesForNonNumbers检查刚刚更新的字段中的字母或符号。然后,IsNumeric 部分检查美元金额是否不为空。

Set cnn = New ADODB.Connection 'Connect to the Access database
With cnn
    .Provider = "Microsoft.ACE.OLEDB.12.0;Data Source=" & dbLocation & "" & dbName & ";Jet OLEDB:Database Password=" & DBPWord
    .Open dbLocation & "" & dbName
End With

Set rst = New ADODB.Recordset
rst.Open "tblEFTRec", cnn, adOpenKeyset, adLockOptimistic, adCmdTable
With rst
    .AddNew
        .Fields("CreatedBy") = Application.UserName
        .Fields("CreatedOn") = Now
        .Fields("Trans_Amnt") = AmountBoxTotal.Value
        .Fields("USD_Equ") = USDBox.Value
    .Update
End With

rst.Close
Set rst = Nothing
cnn.Close
Set cnn = Nothing

上面的代码从 tblEFTRec 表中打开一个 ADO 记录集,然后添加新记录、添加到字段、更新和关闭。

这是我

最好的猜测。如果这不是解决方案,它仍然可能有助于弄清楚:西班牙语系统使用,作为小数分隔符。分配(字符串)值时

AmountBoxTotal.Value = (Left(AmountBoxCents.Value, 2)) / 100 + AmountBox.Value

它生成一个字符串,,作为分隔符(这很好) 编辑:或不,请参阅下面的示例。现在当你这样做时

.Fields("Trans_Amnt") = AmountBoxTotal.Value

字符串被传递并在某个时候转换回双精度。我没有使用 ADO 记录集的经验,但似乎该转换正在使用.作为分隔符并删除所有,因为它们只是数千个分隔符。通过使用.Fields("Trans_Amnt") = CDbl(AmountBoxTotal.Value)它应该使用与以前相同的分隔符转换回来,然后作为数字而不是字符串传递,应该没问题。

当涉及字符串时,处理外来数字格式可能会很棘手。例如(在我的德语系统上测试):

AmountBoxTotal.Value = 1.5                      'AmountBoxTotal now shows "1.5"
AmountBoxTotal.Value = AmountBoxTotal.Value + 1 'AmountBoxTotal now shows "16"
'
AmountBoxTotal.Value = 3/2 'AmountBoxTotal now shows "1.5", same behavior as above
'
AmountBoxTotal.Value = "1,5"                    'AmountBoxTotal now shows "1,5"
AmountBoxTotal.Value = AmountBoxTotal.Value + 1 'AmountBoxTotal now shows "2.5"
AmountBoxTotal.Value = AmountBoxTotal.Value + 1 'AmountBoxTotal now shows "26"
'
AmountBoxTotal.Value = CStr(1.5) 'AmountBoxTotal now shows "1,5", same behaviour as above

所以总结一下...我不知道。为什么要用.在文本框中显示数字?我必须承认,虽然我有一个使用德语日期/时间/数字格式的Windows和Office的英语安装,所以也许这会引起更多的混乱?我在Excel设置中选择的分隔符对上述示例没有影响。

首先,您应该始终处理这样的数字,而不是字符串。不知道这是做什么的:

If IsNumeric(AmountBox.Value) Then
    AmountBoxTotal.Value = (Left(AmountBoxCents.Value, 2)) / 100 + AmountBox.Value
End If

但这肯定不是最佳方法。

然后,可以使用 CCur 转换本地化的格式化十进制:

.Fields("Trans_Amnt").Value = CCur(AmountBoxTotal.Value)

相关内容

最新更新