VBA-从Excel工作表导入SQL以访问DB-EXECUTION ERROR 3343

问题描述

我想建立一个sql请求,以便将所有工作表内容存储到Access DB中,为此,我建立了以下请求:

 ssql = "INSERT INTO Archive_FP21 (Date_Histo,Caisse,Libelle,Reference_Contrat,Date_de_Nego,Date_Valeur,Echeance_Finale,Libelle_Index,Taux_Actuel,Capital_Origine,Capital_Restant_Du,Marge,Taux_du_cap,Taux_du_Floor,Derniere_Echance_INT,Derniere_Echeance_AMO,Interet,Prochaine_Echeance) " & _
    "SELECT * FROM [Feuil1$A:R] IN """ & WbPath & """"

但是我面临以下问题:

3343无法识别的数据库格式

enter image description here

[我觉得我的问题在FROM [Feuil1$A:R] IN """ & WbPath & """" ]

下面是我的完整代码Sub:

Sub archiver()
    
    Dim ws As DAO.Workspace
    Dim db As DAO.Database
    Dim sDb As String
    Dim ssql As String
    Dim qdf As QueryDef
    Dim WbPath As String

    
WbPath = "C:\******\Extraction FP21 Mise en Forme Auto\16102020 - copie.xlsx"

sDb = "C:\******\BaseFp21.accdb"
Set ws = DBEngine.Workspaces(0)
Set db = ws.OpenDatabase(sDb)

ssql = "INSERT INTO Archive_FP21 (Date_Histo,Prochaine_Echeance) " & _
"SELECT * FROM [Feuil1$A:R] IN """ & WbPath & """"


db.Execute ssql

End Sub

注意:此sql请求的目标是将表'Feui1.Range(A:R)`中的所有数据添加到我的访问表中。 我无法逐行执行此操作,因为我有37,000行要填写Access。

我想念什么?您该怎么办才能用VBA在Access DB中填充Excel中的37K行?

解决方法

要从带有Access连接的Excel工作簿中进行内联查询,请不要使用IN运算符,而应使用带括号的标识符(带有标头和工作簿类型)的设置参数。按照惯例,如果您正在查询外部Access数据库但作为Excel工作簿,则IN可以正常工作,无法识别数据库格式。

sSQL = "INSERT INTO Archive_FP21 (Date_Histo,Caisse,Libelle,Reference_Contrat," _
        & "                       Date_de_Nego,Date_Valeur,Echeance_Finale," _
        & "                       Libelle_Index,Taux_Actuel,Capital_Origine," _
        & "                       Capital_Restant_Du,Marge,Taux_du_cap,Taux_du_Floor," _ 
        & "                       Derniere_Echance_INT,Derniere_Echeance_AMO,Interet," _
        & "                       Prochaine_Echeance) " _
        & " SELECT * FROM [Excel 12.0 Xml;HDR=Yes;Database=" & WbPath & "].[Feuil1$A:R]"

db.Execute sSQL

此外,请确保避免使用SELECT * FROM并显式选择命名的列,尤其是在用于列到列映射的插入选择追加查询中。 SELECT Col1,Col2,Col3,... FROM更具可读性和可维护性,以防Excel列顺序应调整或某些列不再存在。