2012-07-19 138 views
0

我有一个MS Access 2007数据库。哥伦比亚和厄瓜多尔的一些客户的编号格式与美国不同,我遇到了一个问题(我敢肯定会有更多的问题),他们使用“。”。它们的百万和千位分隔符的小数点(或周期)字符,并使用逗号字符作为小数位。这可能会导致类型不匹配错误,或者我自己的验证会将其作为错误捕获,尽管我只使用IsNumeric()函数来检查字段内容。带Access数字字段的MS Access数据库

我会假设MS Access会识别用户Windows设置中设置的任何区域键盘格式。

任何人都可以为我阐述一些这方面的信息吗?到目前为止,唯一的解决方法是将用户键盘设置更改为使用“,”表示数百万和数千个分隔符以及“。”。为小数。

任何帮助将不胜感激! :-)

回答

1

一种解决方案可能是在所有将逗号转换为句点(如果存在)的相关字段上运行replace()。

+0

这是一个想法......可能必须这样做。我有点希望我缺少一个Access设置,实际上它会根据Windows中的区域设置设置的数据来处理数字。我的意思是,微软与微软合作? ;-) – MultiGuy 2012-07-19 21:41:10

1

这应该由本地PC上的区域设置来控制。您可以设置小数分隔符和数字分组分隔符,然后Access以与其他语言环境中的1,000.21相同的方式与1.000,21交互。

?Format(1000,"currency") 
€1.000,00 
+0

好吧,我就是这样处理的,但是要做到这一点似乎是一种耻辱,尤其是当用户很可能需要将其更改为每个运行的其他应用程序时。不过谢谢。 – MultiGuy 2012-07-19 21:38:11

+0

不,他们不应该。 PC应设置为适合其语言环境。访问尊重语言环境。 – Fionnuala 2012-07-19 21:39:27

+1

那么访问不符合语言环境,否则这不会是一个问题。改变它们的区域设置(十进制,分组分隔符等)会改变它们的所有程序,不是吗?当他们发送邮件给他们的朋友并提及您的一千欧元时,他们希望它读取1.000,00而不是1,000.00。不是所有Windows的全局设置?或者我错过了什么? – MultiGuy 2012-07-19 21:45:19

0

好吧,这里是我发现:

首先,我对他说这是一个“类型不匹配”道歉。事实并非如此。这是#2432错误:“您输入的表达式包含无效的语法,或者您需要将文本数据用引号引起来”。我意识到错误发生在EVAL()函数上,必须在字符串上完成。我首先将数字转换为字符串,将小数点和组分隔符的区域设置设置为逗号而不是小数点。在我的情况下,代码为:

If Eval(CStr(cCtl.Value) & ">+" & strMinVal = True Then 

所以我用IAmBatman的建议,做了REPLACE()在球场上。由于这只是在实地验证过程,它不改变实际数据,如:

If Eval(CStr(Replace(cCtl.Value),",",".")) & ">+" & strMinVal = True Then 

Remou,你是对所有沿。我谦卑的道歉。 :-)

+0

如果您使用的是Eval,您可能没有采取从A到B的最短路线。这很少是一个好主意。 – Fionnuala 2012-07-19 22:51:34

+0

你可能就在那里。但是,我的字段验证将检查字段的.Tag属性中的说明。它可能会显示为:“EVAL> 0”或“BETWEEN 10 AND 20”。我使用EVAL函数将字符串转换为等式。 – MultiGuy 2012-07-19 22:58:10