在VBA中使用SQL / ADO连接两个CSV - 无效数据

时间:2012-01-15 22:41:13

标签: sql vba ado

我在这里不知所措。我正在尝试通过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.如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我知道回答一个人自己的问题很难,但是,我没有选择。

问题是,查询只占用了FX_RATES的第一个数字,因为这是数字出现在文件顶部的方式 - 在小数位后没有任何数字的单个数字。

我的解决方案

有几种方法可以解决这个问题。我将我的FX_RATES转换为Excel =TEXT(A1, "0.00000")中小数位后5位数的文本值,然后重新保存FX CSV文件。

将数字格式更改为小数点后5位数字并重新保存CSV完成相同的操作。

我认为这是ADO或SQL中的设计......