将 Access 用作 ODBC 数据库

Posted

技术标签:

【中文标题】将 Access 用作 ODBC 数据库【英文标题】:Using Access as an ODBC Database 【发布时间】:2016-02-22 14:31:43 【问题描述】:

这就是我想要做的: 我需要整合来自许多不同工作组的每周预测 Excel 模板。我为他们创建了一个表格,以填写他们所有的预测项目/计划/解释的差异。 那时我在 excel 模板上有一个按钮,它将所有数据逐行放入表单旁边的常规统一表格中。 我想要发生的事情是在所有内容都在统一的 excel 表中之后,他们单击另一个按钮并使用与我的访问数据库的 ODBC 连接使其将数据附加到我可以访问的表中?我以前听说过这样做,但我不确定如何。

我首先尝试使用 excel,方法是转到“数据”选项卡下的“来自其他来源”并单击“来自 Microsoft Query”,然后执行选择我的访问数据库作为数据源的步骤,然后执行这些步骤,直到我点击了一个按钮,上面写着“在 Microsoft Query 中查看数据或编辑查询”,但随后我迷失了如何使用该按钮通过 ODBC 连接将数据从 excel 工作表附加到 access 数据库。

谁能帮我弄清楚如何做到这一点?将有多个组从 excel 模板附加到此访问数据库。如果可以的话,访问将是我跟踪所有数据的一种简单方法。

谢谢!

【问题讨论】:

是否可以让用户在 Access 表单而不是 Excel 用户表单中输入数据? @HansUp 由于许多组无法访问相同的文件路径,因此与 excel 文件相比,分发访问数据库似乎更难。这也可能允许多人更轻松地将数据写入数据库。目前我让他们将数据复制并粘贴到共享点上的链接“列表”到访问数据库,但这不是很好的方法。 【参考方案1】:

使用 ADO 连接(请参阅 connectionstrings.com)。步骤是:

    在您的项目中设置对 Microsoft ActiveX 数据对象 6.1 库(或您拥有的任何版本)的引用。

    将 cn 调暗为 ADODB.Connection

    打开连接(Google 搜索会告诉您如何操作)

    将 Excel 工作表中的值加载到数组中

    遍历数组并将每条记录插入表中。例如:

cn.Execute "INSERT INTO SomeTable VALUES (" & array(i,1) & "," & array(i,2) &...

以上内容仅供参考,在语法上可能并不完全正确。

编辑:

将 conString 调暗为字符串

conString = "提供者=Microsoft.ACE.OLEDB.12.0;数据源=C:\myFolder\myAccessFile.accdb; 持久安全信息=假;"

设置 cn = New ADODB.Connection cn.Open 字符串

【讨论】:

我喜欢这个主意,你能给我一个更具体的链接来查找其中的一些信息吗?其中很多对我来说都是新的,我一直在梳理 connectionstrings.com 试图找到相关的东西。但我不完全知道什么是相关的大声笑。我一直在阅读了解连接字符串之类的内容,但是在那之后呢? 有很多选择。我在上面添加了一些代码。如果您需要更多帮助,这里有一个很有前途的例子:***.com/questions/16161865/… 非常感谢!我想出了一个办法,一会儿我会把它贴在这里!你给了我这个想法,然后我继续研究!谢谢!现在我想弄清楚如何在 excel 中制作一个可搜索的下拉框,我还可以在其中使用某种数据验证。 我还有一个问题。由于我的代码是逐行写入的,有没有办法确保在写入之前导入完整的表?例如,如果前 2 行数据很好并且写入了它们,但是它到了下一行并且数据在某种程度上有问题并且它没有写入,我们可以检查完整的代码吗在写之前,这样我就不会只得到一部分数据? 是的。设置记录集的LockType为adLockBatchOptmistic,去掉For循环中的.Update行,在For循环后做rs.BatchUpdate。【参考方案2】:

在其他人的帮助下,这是我上面遇到的问题的答案:

    Sub ADOFromExcelToAccess()
   ' exports data from the active worksheet to a table in an Access database
 ' this procedure must be edited before use
  Dim cn As ADODB.Connection, rs As ADODB.Recordset, r As Long
' connect to the Access database
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; " & _
    "Data Source=Path to the database;"
' open a recordset
Set rs = New ADODB.Recordset
rs.Open "Forecast_Items", cn, adOpenKeyset, adLockOptimistic, adCmdTable
' all records in a table
r = 3 ' the start row in the worksheet
Do While Len(Range("Q" & r).Formula) > 0
' repeat until first empty cell in column A
    With rs
        .AddNew ' create a new record
        ' add values to each field in the record
        .Fields("UserName") = Range("O" & r).Value
        .Fields("Forecast_Date") = Range("P" & r).Value
        .Fields("Area") = Range("Q" & r).Value
        .Fields("Description_Item") = Range("R" & r).Value
        .Fields("Account") = Range("S" & r).Value
        .Fields("RRDD") = Range("T" & r).Value
        .Fields("CostCenter") = Range("U" & r).Value
        .Fields("Fleet") = Range("V" & r).Value
        .Fields("ForecastAmount") = Range("W" & r).Value
        .Fields("PlanAmount") = Range("X" & r).Value
        .Fields("VarianceForecast") = Range("Y" & r).Value
        .Fields("Explanation") = Range("Z" & r).Value

        ' add more fields if necessary...
        .Update ' stores the new record
    End With
    r = r + 1 ' next row
Loop
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing




    End Sub

如果有错误,我应该批处理全部或不批处理的其他代码是。但是,当确实发生错误时,它仍然会写入成功通过的错误。

     Sub ADOFromExcelToAccess()

     If MsgBox("This Button Will Submit all Data in the Table to the Right & Clear the Table! Are you sure?", vbYesNo) = vbNo Then Exit Sub


     ' exports data from the active worksheet to a table in an Access database
    ' this procedure must be edited before use
    Dim cn As ADODB.Connection, rs As ADODB.Recordset, r As Long
' connect to the Access database
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; " & _
    "Data Source=Filepath.mdb;"
' open a recordset
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient
rs.Open "Forecast_Items", cn, adOpenKeyset, adLockBatchOptimistic, adCmdTable
' all records in a table
r = 3 ' the start row in the worksheet
Do While Len(Range("Q" & r).Formula) > 0
' repeat until first empty cell in column A
    With rs
        .AddNew ' create a new record
        ' add values to each field in the record
        .Fields("UserName") = Range("O" & r).Value
        .Fields("Forecast_Date") = Range("P" & r).Value
        .Fields("Area") = Range("Q" & r).Value
        .Fields("Description_Item") = Range("R" & r).Value
        .Fields("Account") = Range("S" & r).Value
        .Fields("RRDD") = Range("T" & r).Value
        .Fields("CostCenter") = Range("U" & r).Value
        .Fields("Fleet") = Range("V" & r).Value
        .Fields("ForecastAmount") = Range("W" & r).Value
        .Fields("PlanAmount") = Range("X" & r).Value
        .Fields("VarianceForecast") = Range("Y" & r).Value
        .Fields("Explanation") = Range("Z" & r).Value



        ' add more fields if necessary...

    End With
    r = r + 1 ' next row
Loop
rs.UpdateBatch 'injects full table from excel into access at the same time, eliminating possible errors with inserting certain rows over others
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing

MsgBox ("Data was Submitted Successfully!")

Exit Sub




  End Sub

【讨论】:

以上是关于将 Access 用作 ODBC 数据库的主要内容,如果未能解决你的问题,请参考以下文章

无法通过 ODBC 将 Access 连接到 SQLlite

将节点 odbc 与 Microsoft Access 一起使用

无法使用 MySQL 连接器/ODBC 将 Access DB 连接到 ODBC DSN

通过 ODBC 访问 - Oracle DEFAULT 不起作用

无法使用 ODBC 驱动程序将 Java 程序连接到 Access 2010 数据库

将链接表添加到 Access 2003,同时在 MDB 中保留 ODBC 连接信息