2012-01-15 78 views
0

我不知所措就在這裏。我試圖通過ADO在VBA中使用SQL連接兩個CSV表。該功能將匹配特定日期和貨幣類型的外匯匯率。我使用由日期和貨幣代碼組成的字符串作爲KEY來嘗試匹配這些,因爲加入匹配的日期和貨幣代碼不起作用。加入使用SQL/ADO在VBA 2周的CSV - 無效數據

而不是給適當的FX率,下面的代碼,而不是返回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 

奇怪的是,密鑰匹配罰款。爲什麼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 

UPDATE 我只是發現了問題 - 它只是採取的第一個數字在FX_PRICE上,所以1.xxx變爲1,0.xxx變爲0.我如何x這個?

+0

爲什麼不內部連接的日期和貨幣代碼?你能發佈一些樣本數據嗎? – Fionnuala 2012-01-16 11:07:28

+0

我試着在日期和貨幣代碼上進行內部連接,但這也不起作用。會發布一些數據。感謝您的關注。 – variant 2012-01-16 18:36:13

+0

是否有可能在數據中有額外的分隔符?如果有插圖中TRADE_DATE CURR_CODE一個額外的標籤,0或1在CURR_CODE可能是你所看到的,而不是什麼FX_PRICE。 – Vinnie 2012-01-16 19:04:37

回答

0

我知道這是相當薄弱的回答自己的問題,但是,好了,我沒有選擇。

原來,這個問題該查詢正在採取只FX_RATES的第一個數字,因爲這是數字是如何出現在文件的頂部 - 小數點後爲個位數,沒有任何數字。

我的解決方案

有固定的這幾種方法。我將FX_RATES轉換爲Excel =TEXT(A1, "0.00000")中小數點後5位數的文本值,然後重新保存FX CSV文件。

更改格式與小數點後5位的號碼的數量和重新保存CSV完成同樣的事情。

我想這是由設計ADO或SQL ...

+0

多年後,Google一直在搜索相同的問題,並在此找到自己的問題。由於張貼這,我找到了另一種解決方案,其中包括建立一個Schema.ini文件(http://msdn.microsoft.com/en-us/library/ms709353%28v=vs.85%29.aspx),指定輸入的格式。這要求單獨的文件與運行代碼的工作簿位於相同的目錄中,這並不總是最佳的。 – variant 2014-03-20 19:27:34