我在MSDN找到interesting article,其中说:
ADO可以将Excel工作簿视为数据库。
Excel工作簿是否可以连接到本身,并将其中一个工作表视为数据库表并对其执行查询? - 这可以通过VBA编程吗?
答案 0 :(得分:3)
这是可能的,但这将是一个非常糟糕的主意!如果需要数据库,则应使用真实数据库。您需要数据类型和索引以及PK / FK约束等内容,并能够轻松查询和限制数据库中放置的信息类型。我从未见过一个Excel电子表格,它对数据所需的数据有各种限制,以确保数据完整性。
答案 1 :(得分:2)
Excel可以将自己用作RDBMS吗?
不,但您可以将其用作没有关系功能的“DBMS”。
因此,Excel工作簿可以将自己用作数据库吗?
不进入设计,DRI,BCP,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)