2012-07-19 87 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