我在这里不知所措。我正在尝试通过VBA中的ADO使用SQL连接两个CSV表。该功能是将外汇汇率与特定日期和货币类型相匹配。我使用由日期和货币代码组成的字符串作为KEY来尝试匹配这些字符串,因为加入匹配日期和货币代码不起作用。
而不是给出适当的汇率,而是下面的代码返回1或0.
adoRS.Open "SELECT tmpFile.[KEY], fxFile.[KEY], tmpFile.[TRADE_DATE]," & _
"tmpFile.[CURR_CODE]," & _
"tmpFile.[VOLUME]," & _
"tmpFile.[TRADE_PRICE]," & _
"tmpFile.[CAD_VAL]," & _
"fxFile.[FX_PRICE]" & _
" FROM tempFile.csv tmpFile, " & _
" 2011FXRates.csv fxFile" & _
" WHERE tmpFile.[KEY]=fxFile.[KEY]", _
adoCxn, _
adOpenForwardOnly, _
adLockReadOnly, _
adCmdText
奇怪的是,KEYs很好。为什么FX_PRICE没有像我期望的那样进入?有什么想法吗?
样本数据
来自tempFile.csv
KEY TRADE_DATE CURR_CODE VOLUME TRADE_PRICE CAD_VAL
40554-000 40554 0 600 1.5 900
40556-000 40556 0 800 0.75 600
40556-000 40556 0 1500 0.25 375
40556-000 40556 0 800 2.8 2240
40574-000 40574 0 300 1.3 390
来自2011FXRates.csv
KEY TRADE_DATE CURR_CODE FX_PRICE
40554-000 40554 0 1.2605
40555-000 40555 0 1.1609
40556-000 40556 0 1.1494
40557-000 40557 0 1.1362
40560-000 40560 0 1.128
更新的 我刚发现问题 - 它只取FX_PRICE上的第一个数字,所以1.xxx变为1,0.xxx变为0.如何解决这个问题?
答案 0 :(得分:0)
我知道回答一个人自己的问题很难,但是,我没有选择。
问题是,查询只占用了FX_RATES的第一个数字,因为这是数字出现在文件顶部的方式 - 在小数位后没有任何数字的单个数字。
我的解决方案
有几种方法可以解决这个问题。我将我的FX_RATES转换为Excel =TEXT(A1, "0.00000")
中小数位后5位数的文本值,然后重新保存FX CSV文件。
将数字格式更改为小数点后5位数字并重新保存CSV完成相同的操作。
我认为这是ADO或SQL中的设计......