Разбор JSON в таблицу доступа - PullRequest
1 голос
/ 06 мая 2020

Я работаю над предыдущим потоком: Анализ JSON автоматически загружается в MS Access

Но я получаю ошибку несоответствия типов во всех qdef! линий. Вот моя часть кода:

For Each element In p
    strSQL = "PARAMETERS [id] Text(255), [class] Text(255), [exchange] Text(255), " _
                          & "[symbol] Text(255), [name] Text(255), [status] Text(255), [tradeable] Text(255), [marginable] Text(255), [shortable] Text(255), [easy_to_borrow] Text(255); " _
           & "INSERT INTO WRK_ALP_TICKER " _
                          & "VALUES(Now(), [id], [class], [exchange], [symbol], [name], [status], [tradeable], [marginable], [shortable], [easy_to_borrow]);"
    Set qdef = db.CreateQueryDef("", strSQL)

    qdef![id] = element("id")
    qdef![Class] = element("class")
    qdef![exchange] = element("exchange")
    qdef![symbol] = element("symbol")
    qdef![Name] = element("name")
    qdef![STATUS] = element("status")
    qdef![tradeable] = element("tradeable")
    qdef![marginable] = element("marginable")
    qdef![shortable] = element("shortable")
    qdef![easy_to_borrow] = element("easy_to_borrow")

    qdef.Execute
Next element

1 Ответ

0 голосов
/ 07 мая 2020

Ваш первый столбец - это поле TEXT с именем ID. Однако ваше первое вставленное значение - datetime, Now(). В запросах на добавление столбцы необходимо выравнивать по позициям или по имени. В идеале вы всегда должны указывать столбцы в предложении INSERT INTO и не полагаться на неявный порядок столбцов.

Следовательно, укажите необходимый столбец datetime в качестве позиции первого вставленного значения. Кроме того, рассмотрите возможность использования сохраненного запроса доступа, а не временного querydef, чтобы избежать разрывов строк и конкатенации в VBA.

SQL (сохранить как объект запроса; параметры переименованы, чтобы избежать путаница со столбцами)

PARAMETERS [id_prm] Text(255), [class_prm] Text(255), [exchange_prm] Text(255), 
           [symbol_prm] Text(255), [name]_prm] Text(255), [status_prm] Text(255), 
           [tradeable_prm] Text(255), [marginable_prm] Text(255), 
           [shortable_prm] Text(255), [easy_to_borrow_prm] Text(255);

INSERT INTO WRK_ALP_TICKER ([CreatedDatetime], [id], [class], [exchange], [symbol], [name],
                            [status], [tradeable], [marginable], [shortable], [easy_to_borrow])

VALUES (Now(), [id_prm], [class_prm], [exchange_prm], [symbol_prm], [name_prm], [status_prm], 
        [tradeable_prm], [marginable_prm], [shortable_prm], [easy_to_borrow_prm])

VBA

For Each element In p    
    Set qdef = db.QueryDefs("mySavedInsertQuery")

    qdef![id_prm] = element("id")
    qdef![class_prm] = element("class")
    qdef![exchange_prm] = element("exchange")
    qdef![symbol_prm] = element("symbol")
    qdef![Name_prm] = element("name")
    qdef![status_prm] = element("status")
    qdef![tradeable_prm] = element("tradeable")
    qdef![marginable_prm] = element("marginable")
    qdef![shortable_prm] = element("shortable")
    qdef![easy_to_borrow_prm] = element("easy_to_borrow")

    qdef.Execute  dbFailOnError
Next element
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...