问题描述
我想建立一个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无法识别的数据库格式
[我觉得我的问题在
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列顺序应调整或某些列不再存在。