Excel可以将自己用作数据库吗?

时间:2009-10-08 04:42:39

标签: database excel excel-2007 ado rdbms

我在MSDN找到interesting article,其中说:

  

ADO可以将Excel工作簿视为数据库。

Excel工作簿是否可以连接到本身,并将其中一个工作表视为数据库表并对其执行查询? - 这可以通过VBA编程吗?

3 个答案:

答案 0 :(得分:3)

这是可能的,但这将是一个非常糟糕的主意!如果需要数据库,则应使用真实数据库。您需要数据类型和索引以及PK / FK约束等内容,并能够轻松查询和限制数据库中放置的信息类型。我从未见过一个Excel电子表格,它对数据所需的数据有各种限制,以确保数据完整性。

答案 1 :(得分:2)

  

Excel可以将自己用作RDBMS吗?

不,但您可以将其用作没有关系功能的“DBMS”。

  

因此,Excel工作簿可以将自己用作数据库吗?

不进入设计,DRI,B​​CP,HA等...... 2个主要块:

  • 行限制
  • 文件被独占锁定,没有共享,因此单个用户

评论后:

它是否支持关系模型是无关紧要的,它没有人们在RDBMS中可以预期的功能:PK,FK,触发器,约束,默认等等

在此基础上,我如何唯一地识别一行?

行号不会:代理键仍需要唯一约束(Excel不支持)以确保自然键是唯一的。

答案 2 :(得分:1)

是的,您可以在VBA中使用DAO或ADO连接到Excel文件。有时是一个有用的技巧。例如,我向几个用户提供了摘要报告,并使用此技巧我可以在单独的工作表中提供事务数据,并使用VBA提供从摘要到详细信息的深入分析。

有Microsoft支持页面向您展示如何操作。

您的链接显示了ADO的基础知识。这是我用过的那个!

这是我使用DAO的示例中的代码。您可以看到它的连接方式以及汇编查询的示例。

Dim mPath As String
Dim mName As String
Dim ColcnT As Long
Dim C As Long
Dim RecCnt As Long
Dim mPeriod As String

mPath = ActiveWorkbook.Path
mName = ActiveWorkbook.Name
mPeriod = Range("mperiod")

Dim dbtmp As dao.Database
Dim tblobj As dao.TableDef
Dim rs As Recordset
Dim qd As dao.QueryDef



Set dbtmp = OpenDatabase(mPath & "\" & mName, False, True, "Excel 8.0;")

DoEvents
If PeriodType = 1 Then Set qd = dbtmp.CreateQueryDef("", "SELECT * FROM mDrillDATA WHERE (((SubOwner1)=[msubowner]) AND ((ACC)=[mACC]) AND ((period)=[mperiod]))")
If PeriodType = 2 Then Set qd = dbtmp.CreateQueryDef("", "SELECT * FROM mDrillDATA WHERE (((SubOwner1)=[msubowner]) AND ((ACC)=[mACC]))")
    qd.Parameters("msubowner") = mOwner
    qd.Parameters("mACC") = mACC
    If PeriodType = 1 Then qd.Parameters("mperiod") = mPeriod
Set rs = qd.OpenRecordset(dbOpenDynaset)