最近寫一個vba程序的時候不間歇的出現 「存取器不是參數存取器 」或者「列值被截斷」的錯誤。後來發現對於我等不專業人士,遇到這樣的錯誤還挺e的。下面是綜合各種資料了解到的一些東西。
問題多出現在有乘法或者除法或者其它產生高精度小數的時候,這類錯誤應該是Oracle和vba裡的數據精度不一致導致的,Oracle裡的數據精度為38位,而微軟VB ADO系統的精度最高只能支持28位的精度,導致對接出了問題。具體可見http://support.microsoft.com/?scid=kb;en-us;327557&x=16&y=11
目前兩個解決方案:
1. 不要用Oracle客戶端自帶的 Ole驅動,用微軟的 Old驅動。
Provider=MSDAORA
這個應該是微軟提供的驅動解決了數據連接的問題。這個方法基本上解決了大部分問題,但麻煩在於微軟自帶的驅動不支持Oracle一些功能,比如調用某些存儲過程。
2. 直接改查詢語句,利用trunc和round函數,將所有可能產生高精度數值的結果主動截斷。
select trunc(1.11231234122312, 3) from dual
這個方法是有效的,但是我覺得很奇怪,上面的截斷是用十進制位數,但保存的時候應該是二進制的,十進制的截斷代表什麼意思呢?