【问题标题】:Parsing JSON into Access table将 JSON 解析为 Access 表
【发布时间】:2020-05-07 05:56:43
【问题描述】:

我正在处理上一个线程: Parsing JSON feed automatically into 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

【问题讨论】:

    标签: json vba ms-access


    【解决方案1】:

    您的第一列是一个名为 ID 的 TEXT 字段。但是,您插入的第一个值是日期时间Now()。在追加查询中,您需要按位置或按名称对齐列。理想情况下,您应该始终在 INSERT INTO 子句中指定列,而不是依赖隐式列顺序。

    因此,将所需的日期时间列指定为第一个插入值的位置。此外,请考虑使用已保存的 Access 查询而不是临时 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
    

    【讨论】:

    • 谢谢;这对我来说应该是一个明显的解决办法。不幸的是,它提出了一个新问题。运行代码时没有任何反应,并且在此代码或 ParseJson 调用中没有引发任何错误。 JsonConverter.bas 代码还有其他已知问题吗?
    • 但是数据是否附加到您的表中?如果使用适当的错误处理(即 no On Error Goto 0On Error Resume Next)正常运行,则不会生成弹出消息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-05
    相关资源
    最近更新 更多