VBA - SQL 从 Excel Sheet 导入以访问数据库 - 执行错误 3343
VBA - SQL Import From Excel Sheet To Access DB - EXECUTION ERROR 3343
我想构建一个 SQL
请求,以便将我所有的 sheet 内容存储到一个访问数据库中,为此我构建了以下请求:
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 unrecognized database format
[I feel like my issue is in 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 Auto102020 - Copie.xlsx"
sDb = "C:\******\BaseFp21.accdb"
Set ws = DBEngine.Workspaces(0)
Set db = ws.OpenDatabase(sDb)
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 & """"
db.Execute sSQL
End Sub
注意 此 SQL 请求的目标是添加来自 sheet 'Feui1.Range(A:R)` 的所有数据进入我的访问 Table。
我无法逐行完成,因为我有 37K 行来填写 Access。
我错过了什么?您将如何使用 VBA 填充 Access DB 中 excel 的 37K 行?
通过 Access 连接从 Excel 工作簿内联查询不使用 IN
运算符,而是使用括号内的标识符和设置参数,例如 headers 和工作簿类型。如果您正在查询外部 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 命名列,尤其是在 insert-select 追加 column-to-column 映射的查询中。 SELECT Col1, Col2, Col3, ... FROM
更具可读性和可维护性,以防 Excel 列顺序应该调整或某些列不再存在。
我想构建一个 SQL
请求,以便将我所有的 sheet 内容存储到一个访问数据库中,为此我构建了以下请求:
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 unrecognized database format
[I feel like my issue is in
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 Auto102020 - Copie.xlsx"
sDb = "C:\******\BaseFp21.accdb"
Set ws = DBEngine.Workspaces(0)
Set db = ws.OpenDatabase(sDb)
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 & """"
db.Execute sSQL
End Sub
注意 此 SQL 请求的目标是添加来自 sheet 'Feui1.Range(A:R)` 的所有数据进入我的访问 Table。 我无法逐行完成,因为我有 37K 行来填写 Access。
我错过了什么?您将如何使用 VBA 填充 Access DB 中 excel 的 37K 行?
通过 Access 连接从 Excel 工作簿内联查询不使用 IN
运算符,而是使用括号内的标识符和设置参数,例如 headers 和工作簿类型。如果您正在查询外部 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 命名列,尤其是在 insert-select 追加 column-to-column 映射的查询中。 SELECT Col1, Col2, Col3, ... FROM
更具可读性和可维护性,以防 Excel 列顺序应该调整或某些列不再存在。