Используя Excel как фронтэнд к базе данных Access (с VBA)

getRandom (min, max) {
  return Math.floor(Math.random() * (max - min)) + min
}

getNRandom (min, max, n) {
  const numbers = []
  if (min > max) {
    return new Error('Max is gt min')
  }

  if (min === max) {
    return [min]
  }

  if ((max - min) >= n) {
    while (numbers.length < n) {
      let rand = this.getRandom(min, max + 1)
      if (numbers.indexOf(rand) === -1) {
        numbers.push(rand)
      }
    }
  }

  if ((max - min) < n) {
    for (let i = min; i <= max; i++) {
      numbers.push(i)
    }
  }
  return numbers
}
27
задан DJ. 10 March 2009 в 15:36
поделиться

12 ответов

Если конечный пользователь имеет Доступ, могло бы быть легче разработать все это в Доступе. Доступ имеет некоторые встроенные средства проектирования формы WYSIWYG.

8
ответ дан Scott 14 October 2019 в 12:35
поделиться

Если нет сильного преимущества при запуске вашей пользовательской формы в Excel, тогда я бы выбрал решение 100% -ного доступа, которое экспортировало бы отчеты и данные в Excel на специальной основе.

Из того, что вы описываете, Access кажется более сильным конкурентом, поскольку он создан для работы с данными :
у вас будет гораздо больше инструментов для решения любых проблем с данными, чем нужно обойти ограничения Excel и сделать из них Access ...

Что касается ваших вопросов:

  1. Очень просто. На эту тему были некоторые другие вопросы по SO.
    Смотрите, например, этот и этот .

  2. Не знаю, но я предполагаю, что может быть небольшой штраф.
    Самая большая трудность, которую я вижу, - это попытаться получить все функциональные возможности, которые предоставляет вам Access, и заново создать некоторые из них в Excel.

  3. Да, у вас может быть несколько пользователей Excel и одна база данных Access.
    Здесь снова использование Access в качестве внешнего интерфейса и хранение данных в связанной базе данных Access в вашей сети будет более разумным, и это просто, как пирог, в Access даже есть мастер, который поможет вам сделать это: это всего лишь 1 щелкните мышью .

На самом деле, как сказал большинство других людей, для ознакомления с Access потребуется совсем немного времени, это сэкономит вам много времени и хлопот.
Возможно, вы лучше знаете Excel, но если вы уже прошли 80% пути, если вы знаете VBA и знакомы с объектной моделью Office.

Другие преимущества использования в Access: среда выполнения Access 2007 является бесплатной , а это означает, что если вы развернете приложение на 1 или 30 ПК, это будет стоить вам столько же: ничего [ +1123].
Для разработки вам нужна только одна полная версия Access (у Runtime нет дизайнеров).

7
ответ дан Community 14 October 2019 в 12:35
поделиться

Просто пропустите часть Excel - пользовательские формы Excel - это всего лишь версия для более бедных людей, как более надежные формы доступа. Кроме того, Access VBA идентичен Excel VBA - вам просто нужно изучить объектную модель Access. С простым приложением вам в любом случае не нужно будет писать много VBA, потому что в Access вы можете легко соединить все вместе.

9
ответ дан DJ. 14 October 2019 в 12:35
поделиться

Это действительно зависит от приложения. Для нормального проекта я рекомендовал бы использовать только Доступ, но иногда, потребности конкретны, и электронная таблица Excel могла бы быть более соответствующей.

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

, Так как форма использовала тяжелое перемалывание чисел, имело больше смысла создавать его в Excel.

рабочие книги Excel для различных людей были созданы из шаблона с помощью VBA, затем сохранили в надлежащем месте с правами доступа на папке.

Все рабочие книги были присоединены как Внешние таблицы к рабочим книгам, с помощью названный диапазонами. Я мог тогда запросить рабочие книги из Приложения Доступа. Весь административный материал был сделан из дб, но конечные пользователи только имели доступ к своей соответствующей рабочей книге.

Developping приложение Excel/доступа этим путем было приятное впечатление, и UI был более удобным для пользователя, чем это будет использовать Доступ.

я должен сказать, что в этом случае, потребовалось бы намного больше времени, делая его в Доступе, чем это взяло использованию Excel. Кроме того, Модель Объекта приложения кажется лучше хотя в Excel, чем в Доступе.

, Если Вы планируете использовать Excel в качестве фронтенда, не забывайте блокировать все ячейки, но доступные для редактирования, и не бойтесь использовать замаскированные строки и столбцы (чтобы создать таблицы выходных данных для базы данных доступа, выполнить промежуточные вычисления, и т.д.).

необходимо также выключить автовычисление при импорте данных.

3
ответ дан Martin 14 October 2019 в 12:35
поделиться

Я делаю это все время. При использовании ADO Вы действительно не используете Доступ, но Струю, базовую базу данных. Это означает, что кто-либо с Excel может использовать приложение - Доступ, не требуемый. О, я должен упомянуть, место, я работаю, купило набор лицензий Малого бизнеса Office - никакой Доступ. До работы здесь, я предположил бы, что у любого, у кого был Excel, также будет Доступ. Не так.

я создаю один класс для каждой таблицы в Доступе. Я очень редко выполняю запросы через ADO, вместо этого я сохраняю ту логику в модулях класса. Я читал в с оператором SELECT и выписываю с и ОБНОВЛЯЮ или ВСТАВЛЯЮ использование Выполнить метода объекта ADODB.Connection.

Видят http://www.dailydoseofexcel.com/archives/2008/12/21/vba-framework-ii/

, если Вы хотите видеть, как я установил свой кодекс.

Для ответа на вопросы: Это будет небольшая кривая обучения для Вас, если Вы уже будете знать Excel VBA, но будет некоторое обучение сделать; Вы заплатите потерю производительности по выполнению всего этого в Доступе, но дело не в этом плохой и только можно решить, стоит ли это того; и у Вас может быть несколько человек, получающих доступ к базе данных.

15
ответ дан Dick Kusleika 14 October 2019 в 12:35
поделиться

Довольно просто и эффективно использовать Excel в качестве инструмента отчетности для доступа к данным. Быстрый подход «без программирования» заключается в создании списка или сводной таблицы, связанной с вашим внешним источником данных. Но это выходит за рамки Stackoverflow.
Программный подход может быть очень простым:

strProv = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & SourceFile & ";"
Set cnn = New ADODB.Connection  
cnn.Open strProv
Set rst = New ADODB.Recordset
rst.Open strSql, cnn
myDestRange.CopyFromRecordset rst

Вот и все!

2
ответ дан Patrick Honorez 14 October 2019 в 12:35
поделиться

Учитывая простоту использования Доступа, я не вижу неопровержимых оснований для использования Excel вообще кроме экспортировать данные для перемалывания чисел. Доступ разработан для легкого создания форм данных и, по-моему, будет порядками величины, легче и менее трудоемкими, чем использование Excel. Несколько часов для изучения объектной модели Доступа заплатят за себя много раз с точки зрения времени и усилия.

1
ответ дан pro3carp3 14 October 2019 в 12:35
поделиться

Я сделал это в одном из моих проектов. Я использовал MDB для хранения данных о счетах и ​​использовал Excel для их рендеринга, предоставляя пользователю возможность адаптировать их.

В этом случае лучшее решение:

  1. Не использовать ADO / DAO в Excel . Я реализовал все как публичные функции в модулях MDB и вызывал их прямо из Excel. Вы можете возвращать даже сложные объекты данных, такие как массивы строк и т. Д., Вызывая функции MDB с необходимыми аргументами. Это похоже на архитектуру клиент-сервер современных веб-приложений: ваше веб-приложение выполняет рендеринг и взаимодействие с пользователем, база данных и средний уровень находятся на стороне сервера.

  2. Используйте формы Excel для взаимодействия с пользователем и для визуализации данных.

  3. У меня обычно есть последний лист с некоторыми областями имен для настроек: путь к файлам MDB, некоторые настройки (текущий пользователь, пароль при необходимости и т. Д.) - так что вы можете легко адаптировать свою реализацию Excel к различным местонахождение ваших "back-end" данных.

1
ответ дан Alexander Galkin 14 October 2019 в 12:35
поделиться

Подключать Excel к Доступу с помощью VBA очень полезно, я использую его в своей профессии каждый день. Строка подключения, которую я использую, согласно программе, найденной в ссылке ниже. Программа может быть автоматизирована для выполнения в многочисленных связях или задачах на выстреле, но основной код соединения выглядит одинаково.Удачи!

http://vbaexcel.eu/vba-macro-code/database-connection-retrieve-data-from-database-querying-data-into-excel-using-vba-dao

0
ответ дан 14 October 2019 в 12:35
поделиться

Я уверен, что Вы доберетесь, тонна "не делают, это" отвечает, и я должен сказать, существует серьезное основание. Это не идеальное решение....

Однако я шел по этой дороге (и подобные) прежде, главным образом потому что задание определило его как трудное требование, и я не мог говорить об этом.

Вот несколько вещей рассмотреть с этим:

, Как легкий это должно связаться с Доступом от Excel с помощью ADO / ДАО? Это вполне ограничено с точки зрения функциональности, или я могу стать творческим?

Это справедливо straitforward. Вы более ограничены, чем Вы сделали бы вещи с помощью других инструментов, так как формы VBA и Excel немного больше ограничивают, чем самые полные языки программирования, но нет ничего, что будет выставочным стопором. Это работает - иногда это немного ужасно, но это действительно работает. В моей последней компании я часто должен был делать это - и иногда вытягивал данные из Доступа и Oracle через VBA в Excel.

я плачу потерю производительности (vs.using формы в Доступе как UI)?

Мой опыт состоит в том, что существует определенно штраф перфекта в выполнении этого. Я никогда не заботился (в моем варианте использования, вещи были достаточно маленькими, что это было разумно), но идущий Excel<-> Доступ намного медленнее, чем просто работа в Доступе непосредственно. Часть его зависит от того, что Вы хотите сделать....

В моем случае, вещь, которая, казалось, была самым медленным абсолютом (и самый болезненный) пыталась заполнить электронные таблицы Excel на основе данных Доступа. Это не было забавой и было часто очень медленно. Если необходимо идти по этой дороге, удостоверьтесь, что сделали все с Excel, hidden/invisible, или перерисовка абсолютно уничтожит Вас.

Предположение, что база данных будет всегда обновляться с помощью ADO / команды ДАО из Excel VBA, который означает, что у меня может быть несколько пользователей Excel, использующих, что одна база данных одиночного обращения и не сталкивается с какими-либо проблемами параллелизма и т.д.?

Вы в значительной степени используете Excel в качестве клиента - тот же способ, которым Вы использовали бы приложение WinForms или любой другой инструмент. Клиенты ADO/дао для Доступа довольно хороши, таким образом, Вы, вероятно, не столкнетесь ни с какими проблемами параллелизма.

Однако Доступ НЕ масштабируется хорошо. Это работает отлично, если Вы имеете 2 или 3 (или даже 10) пользователи. Если Вы соберетесь иметь 100, то Вы, вероятно, столкнетесь с проблемами. Кроме того, я был склонен находить, что Доступу было нужно регулярное техобслуживание, чтобы не иметь проблемы повреждения. Регулярные резервные копии DB Доступа - необходимость. Уплотнение базы данных доступа регулярно поможет предотвратить повреждение базы данных, по моему опыту.

Какие-либо другие вещи я должен знать?

Вы делаете это твердый путь. Используя Excel для удара Доступа будет намного большим количеством работы, чем просто использование Доступа непосредственно.

я рекомендовал бы изучить Доступ API VBA - большая часть из него совпадает с Excel, таким образом, у Вас будет небольшая кривая обучения. Части, которые отличаются просто, делают это легче. У Вас также будут все преимущества создания отчетов Доступа и Форм, которые намного более ориентированы на данные, чем те в Excel. Создание отчетов может быть большим для вещей как это, и наличие Макросов и Отчетов сделает жизнь легче в конечном счете. Если попытка пользователя использовать формы для управления всем, делая формы в Доступе будет очень, очень похожа на выполнение их в Excel, и будет выглядеть почти идентичной, но сделает все быстрее и более гладким.

42
ответ дан Reed Copsey 14 October 2019 в 12:35
поделиться
[

] Зависит от того, какой функциональности вы ожидаете от решения Excel<->Acess. Во многих случаях, когда у вас нет бюджета для получения полного прикладного решения, эти маленькие утилиты действительно работают. Если сфера проекта ограничена, то я бы пошёл на это решение, потому что Excel действительно предоставляет вам гибкость в проектировании электронных таблиц в соответствии с вашими потребностями, и тогда вы можете использовать эти предварительно разработанные листы для пользователей. Проектирование электронных таблиц вроде формы в Access является более трудоемким и сложным и требует некоторого ActiveX. Объект может не только обрабатывать данные, но и представлять их в электронных таблицах как формы, тогда это решение должно работать с ограниченной сферой применения.[

].
0
ответ дан 28 November 2019 в 04:15
поделиться

Вы можете попробовать что-нибудь вроде XLLoop . Это позволяет вам реализовывать функции Excel (UDF) на внешнем сервере (предоставляются серверные реализации на многих разных языках).

Например, вы можете использовать базу данных MySQL и веб-сервер Apache, а затем написать функции на PHP для обслуживания данных ваших пользователей.

Кстати, я работаю над проектом, поэтому дайте мне знать, если у вас возникнут вопросы.

-1
ответ дан 28 November 2019 в 04:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: