Соединение двух CSV с использованием SQL / ADO в VBA - неверные данные - PullRequest
0 голосов
/ 16 января 2012

Я в растерянности здесь. Я пытаюсь объединить две таблицы CSV, используя SQL через ADO в VBA. Функция заключается в сопоставлении курсов валют с конкретными датами и типами валют. Я использую строку, состоящую из даты и кода валюты, в качестве КЛЮЧА, чтобы попытаться сопоставить их, так как объединение совпадающих дат и кодов валют не сработало.

Вместо указания правильного курса валют, приведенный ниже код возвращает 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. Как мне это исправить?

1 Ответ

0 голосов
/ 17 января 2012

Я знаю, что ответить на свой вопрос довольно слабо, но у меня нет выбора.

Проблема оказалась в том, что запрос принимал только первую цифру FX_RATES, потому что именно такчисла отображаются в верхней части файла - как однозначные числа без цифр после запятой.

Мое решение

Существует несколько способов исправить это.Я преобразовал свой FX_RATES в текстовые значения с 5 цифрами после десятичного знака в Excel =TEXT(A1, "0.00000"), а затем сохранил файл FX CSV.

Изменив форматирование числа на число с 5 цифрами после десятичного разделителя и сохранив CSVвыполнил то же самое.

Полагаю, это по замыслу в ADO или SQL ...

...