Как написать функцию Excel, которая возвращает значение из базы данных SQL? - PullRequest
3 голосов
/ 07 мая 2009

Я хочу написать следующую функцию, которую следует использовать на листе Excel:

=GetRecField("Foo Record Key", "FooField1")

... который подключится через ODBC к базе данных SQL, выполните там

SELECT FooField1 FROM MyTable WHERE KEY_FIELD='Foo Record Key';

и вернет результирующее значение как результат функции GetRecField. Вышеуказанный SQL предоставляется для возврата только одной записи (IOW KEY_FIELD имеет уникальное ограничение).

Конечно, вышеупомянутая функция может быть вызвана несколько раз на листе, поэтому, пожалуйста, избегайте слепых QueryTables.Add

ТИА.

Ответы [ 3 ]

6 голосов
/ 07 мая 2009

Вы можете написать пользовательскую функцию для этого

  1. Открыть редактор VBA (ALT-F11)
  2. Откройте Инструменты -> Ссылки и убедитесь, что выбраны «Библиотека данных Microsoft ActiveX 2.8» и «Библиотека записей объектов Microsoft ActiveX 2.8»
  3. Щелкните правой кнопкой мыши VBAProject и выберите «Вставить» -> «Модуль»
  4. Откройте модуль. Теперь вы можете создать пользовательскую функцию, например:
    Public Function GetItem(field As String, id As Integer) As String
        Set oConnection = New ADODB.Connection
        Dim oRecordset As ADOR.Recordset
        oConnection.Open "provider=sqloledb;data source=yourserver;" & _
            "Trusted_Connection=yes;initial catalog=yourdatabase;"
        Set oRecordset = oConnection.Execute( & _
            "select " & field & " from table where id = " & id)
        If oRecordset.EOF Then
            GetItem = "n/a"
        Else
            GetItem = oRecordset(field)
        End If
    End Function
  1. Теперь вы можете вызывать функцию из ячейки:

    = GetItem ( "имя_поль"; 2) * +1017 *

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

1 голос
/ 07 мая 2009

Почему бы не использовать встроенную в Excel функцию запроса к базе данных на отдельном листе (меню «Данные», «Импорт внешних данных», «Новый запрос к базе данных»), а затем использовать VLOOKUP для извлечения значений из этого листа?

0 голосов
/ 07 ноября 2018

Я решил похожую проблему в Excel версии 1808 (?), Сохранив соединение с базой данных на одном листе и используя ссылку на нужную ячейку на других листах.

  1. Данные> Получить данные> Из базы данных> Из базы данных SQL Server
  2. Введите имена серверов и баз данных.
  3. Откройте Дополнительные параметры и введите дословно запрос, затем назовите его «имя_соединения».
  4. Теперь, когда запрос доступен, откройте «Данные»> «Запросы и соединения».
  5. Щелкните правой кнопкой мыши по соединению и выберите Загрузить в ...
  6. Выберите неиспользуемое место на неиспользованном листе и поместите его туда.
  7. В целевой ячейке в другом месте файла введите =connection_name[[#All,][Column1]].

Это, конечно, кажется косвенным в том смысле, что я не смог найти способ сослаться на соединение, если оно не появилось где-то на листе. Но это сработало для меня, и я не смог найти подобные инструкции в других местах, поэтому я подумал, что это может быть информативным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...