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

Database Excel可以将自己用作数据库吗?,database,excel,excel-2007,ado,rdbms,Database,Excel,Excel 2007,Ado,Rdbms,我在MSDN上找到了一个,上面写着: ADO可以将Excel工作簿视为数据库 那么,Excel工作簿是否可以连接到自身,并将其中一个工作表视为数据库表并对其执行查询这可以通过VBA编程实现吗 Excel可以将自己用作RDBMS吗 不,但您可以将其用作没有关系特性的DBMS 那么Excel工作簿是否可以将自身用作数据库 不涉及设计、DRI、BCP、HA等。。。2个主要街区: 行限制 文件被独占锁定,没有共享,所以只有一个用户 评论后: 它是否支持关系模型无关紧要,它没有RDBMS所期望的特性:PK

我在MSDN上找到了一个,上面写着:

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

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

Excel可以将自己用作RDBMS吗

不,但您可以将其用作没有关系特性的DBMS

那么Excel工作簿是否可以将自身用作数据库

不涉及设计、DRI、BCP、HA等。。。2个主要街区:

行限制 文件被独占锁定,没有共享,所以只有一个用户 评论后:

它是否支持关系模型无关紧要,它没有RDBMS所期望的特性:PKs、FKs、触发器、约束、默认值等

在此基础上,如何唯一标识一行

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

Excel可以将自己用作RDBMS吗

不,但您可以将其用作没有关系特性的DBMS

那么Excel工作簿是否可以将自身用作数据库

不涉及设计、DRI、BCP、HA等。。。2个主要街区:

行限制 文件被独占锁定,没有共享,所以只有一个用户 评论后:

它是否支持关系模型无关紧要,它没有RDBMS所期望的特性:PKs、FKs、触发器、约束、默认值等

在此基础上,如何唯一标识一行


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

是的,您可以从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)

是的,您可以从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)

这是可能的,但这将是一个非常糟糕的主意!如果需要数据库,应该使用真实的数据库。您需要数据类型和索引、PK/FK约束以及轻松查询和限制放置在数据库中的信息类型的能力。我还从来没有见过Excel电子表格对数据有这样的限制,你需要真实的数据库信息来保证数据的完整性。

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

对于现在所有可用的免费真实数据库,仅仅因为你可以,并不意味着你应该……Excel不是一个数据库。我花了太多的时间把excel数据库变成真实的数据库。请不要这样对待它。对于现在所有可用的免费真实数据库,仅仅因为你可以,并不意味着你应该…Excel不是一个数据库。我花了太多的时间把excel数据库变成真实的数据库。请不要那样对待它。更正我的问题标题以反映。谢谢。为什么不能是RDBMS呢?例如,我可以有一张客户表、一张订单表和一张产品表,这些表都有适当的id值来支持这些关系。不切实际但很有可能。Excel支持关系表/工作表、属性列和元组行。。。这符合RDBMS的定义,RDBMS是一种可以将数据视为行和列的集合的DBMS。更正了我的问题标题以反映。谢谢。为什么不能是RDBMS呢?例如,我可以有一张客户表、一张订单表和一张产品表,这些表都有适当的id值来支持这些关系。不切实际但很有可能。Excel支持关系表/工作表、属性列和元组行。。。哪个f
这是RDBMS的定义,一种可以将数据视为行和列的集合的DBMS。您能否将我们链接到一些页面,向您展示如何做到这一点?或者它只是一个简单的ADO/DAO连接,使用Excel引擎而不是{DB engine}连接到Excel文件?您可以将我们链接到一些页面,向您展示如何实现这一点吗?或者它只是使用Excel引擎而不是{DB engine}与Excel文件的简单ADO/DAO连接??