【问题标题】:Push data from Excel to Access database将数据从 Excel 推送到 Access 数据库
【发布时间】:2013-01-06 16:46:41
【问题描述】:

我正在寻找一种将数据从 Excel 推送到 Access 数据库的方法。我找到了下面的代码,但我不知道如何改进它。

Dim wsQS As Worksheet
Dim sConnect As String
Dim sCommand As String
Dim adoCn As ADODB.Connection

Set wsQS = Worksheets("QueryStrings")
Set adoCn = New ADODB.Connection
sConnect = wsQS.Range("rngConnect").Value
sCommand = wsQS.Range("rngCommand").Value

' Get ADO connection to the workbook
adoCn.Open sConnect
' Append data from Excel worksheet
adoCn.Execute sCommand

' Close the connection to the workbook
adoCn.Close
Set adoCn = Nothing
Worksheets("CopyToDB").Range("DataToExport").Offset(1, 0).ClearContents
Worksheets("Proj DB").Activate

Set wsQS = Nothing

架构

                 ------------------
                |       web        |
                |       page       |
                 ------------------
                          |
                          |
                          |
            Python and BS4(Data Extraction)
                          |
                          |
                          |
                 ------------------                               
                |       Excel      |
                |       data       |
                 ------------------
                          |
                          |
                          |
             Python to Push Data(Oracle/Access)
                          |
                          |
                          |
                 ------------------
                |       Any        |
                |       DB         |
                 ------------------

【问题讨论】:

  • 你为什么在 Excel 端工作?接下来发生什么?为什么不简单地链接到 Access 或使用 Access 中的 Transferspeadsheet?
  • 看到我在python 中有脚本,它从网页收集数据。现在什么时候结束,然后我就完成了收集,然后想将数据推送到数据库!

标签: vbscript excel-2010 ms-access-2010


【解决方案1】:

可以从几乎任何地方(VBScript、VBA)运行并在 Excel 中的 Access 中创建表格的东西怎么样?您几乎可以运行任何有效的 SQL。

Set cn=CreateObject("ADODB.Connection")

cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=z:\docs\test.accdb"

sSQL = "SELECT * INTO FromExcel " _
     & "FROM [Excel 8.0;HDR=YES;DATABASE=Z:\Docs\Test.xls].[Sheet1$]"

cn.Execute sSQL, recs

MsgBox "Records: " & recs

Jet SQL

Fundamental Microsoft Jet SQL for Access 2000
Intermediate Microsoft Jet SQL for Access 2000
Advanced Microsoft Jet SQL for Access 2000

【讨论】:

  • 我应该用任何名称替换FromExcel还是keyword
  • FromExcel 是您想要调用的新表格。请注意,您不能将现有表名与SELECT * INTO .. 一起使用,但您可以使用INSERT INTO tablenamefere 附加到表中
  • 我不明白您的上述评论。如果您愿意,请详细说明!
  • 代码创建了一个新表。如果您已经创建了一个新表,则必须使用不同的名称。如果您希望添加到数据库中的表,则必须使用不同的代码。代码的规则显示在链接中。
【解决方案2】:

我尝试了@Remou 的建议,但从未设法让它与我的配置一起使用(Office 2010)。这是我从Microsoft Dev Forums窃取的内容,这对我来说非常适合各种类型的 SQL 查询(选择/插入/删除等)

Public Sub updateAccess()

Dim con As New ADODB.Connection
Dim connectionString As String

Dim sql, newTable As String
Filename = "C:\test.accdb"
connectionString = "Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=" & Filename

con.Open connectionString

' Save current table ("BEFORE") to another table ("BEFORE_yyyymmdd_hh_mmss")
newTable = "BEFORE_" & Format(Date, "yyyymmdd") & "_" & Format(Now, "hhmmss")
sql = "SELECT CODE, STORE INTO " & newTable & " FROM BEFORE"
con.Execute sql

' Delete rows of current table ("BEFORE")
sql = "DELETE FROM BEFORE"
con.Execute sql

' Insert new rows into current table ("BEFORE") from my Excel Sheet
sql = "INSERT INTO BEFORE ([CODE], [STORE]) " & _
      "SELECT * FROM [Excel 8.0;HDR=YES;DATABASE=" & ThisWorkbook.FullName & "].[" & ThisWorkbook.Sheets("CODE_BY_STORE").Name & "$]"
con.Execute sql

con.Close
Set con = Nothing

End Sub

这就像一个魅力!希望这会有所帮助...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-24
    • 2016-02-09
    • 2011-12-23
    • 2014-04-19
    • 1970-01-01
    • 1970-01-01
    • 2015-10-23
    相关资源
    最近更新 更多