Может ли Excel использовать себя в качестве базы данных? - PullRequest
1 голос
/ 08 октября 2009

Я нашел интересную статью на MSDN, в которой говорится:

ADO позволяет обрабатывать книгу Excel как базу данных.

Так возможно ли для книги Excel подключиться к самой , обработать одну из ее таблиц как таблицу базы данных и выполнить запросы к ней? - и возможно ли это через программирование на VBA?

Ответы [ 3 ]

3 голосов
/ 08 октября 2009

Возможно, но это будет действительно очень плохая идея! Вы должны использовать реальную базу данных, если вам нужна база данных. Вам нужны такие вещи, как типы данных и индексы, ограничения PK / FK и возможность легко запрашивать и ограничивать тип информации, размещаемой в базе данных. Я еще никогда не видел электронную таблицу Excel, в которой бы содержались ограничения на данные, необходимые для обеспечения целостности данных реальной базы данных.

2 голосов
/ 08 октября 2009

Может ли Excel использовать себя в качестве СУБД?

Нет, но вы можете использовать его как «СУБД» без реляционных функций.

Так может ли книга Excel использовать себя в качестве базы данных?

Не вдаваясь в дизайн, DRI, BCP, HA и т.д ... 2 основных блока:

  • Пределы строк
  • Файл заблокирован исключительно, нет общего доступа, поэтому один пользователь

После комментариев:

Независимо от того, поддерживает ли она реляционную модель, она не имеет функций, которые можно ожидать в СУБД: PK, FK, триггеры, ограничения, значения по умолчанию и т. Д.

На этом основании, как бы я однозначно идентифицировал строку?

Номер строки не имеет: суррогатным ключам все еще требуется уникальное ограничение (не поддерживается в Excel), чтобы гарантировать, что естественный ключ уникален.

1 голос
/ 08 октября 2009

да, вы можете подключиться к файлу Excel, используя DAO или ADO, из VBA. Иногда это полезный трюк. Например, я раздаю сводный отчет нескольким пользователям, и с помощью этого трюка я могу предоставлять данные транзакций на отдельном листе, а с помощью 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)
...