Как использовать Excel VBA для извлечения Memo поля из базы данных Access? - PullRequest
2 голосов
/ 31 марта 2010

У меня есть таблица Excel. Я подключаюсь к базе данных Access через ODBC. Что-то в этом роде:

Set dbEng = CreateObject("DAO.DBEngine.40")
Set oWspc = dbEng.CreateWorkspace("ODBCWspc", "", "", dbUseODBC)
Set oConn = oWspc.OpenConnection("Connection", , True, "ODBC;DSN=CLIENTDB;")

Затем я использую запрос и получаю набор результатов, чтобы получить некоторые данные таблицы.

Set oQuery = oConn.CreateQueryDef("tmpQuery")
oQuery.Sql = "SELECT idField, memoField FROM myTable"
Set oRs = oQuery.OpenRecordset

Проблема теперь возникает. Мое поле - dbMemo, потому что максимальная длина контента - до нескольких сотен символов. Это не так долго, и фактически ценность, которую я читаю, составляет всего дюжину символов. Но Excel просто не в состоянии обработать содержимое поля Memo вообще. Мой код ...

ActiveCell = oRs.Fields("memoField")

... выдает ошибку Ошибка времени выполнения '3146': ODBC - сбой вызова.

Есть предложения? Может ли Excel VBA на самом деле получить данные памятного поля? Или это просто совершенно невозможно. Я получаю точно такую ​​же ошибку от GetChunk.

ActiveCell = oRs.Fields("memoField").GetChunk(0, 2)

... также выдает ошибку Ошибка времени выполнения '3146': ODBC - сбой вызова.

Преобразование в текстовое поле заставляет все работать нормально. Однако некоторые данные, конечно, усекаются до 255 символов, что означает, что это нереализуемое решение.

1 Ответ

0 голосов
/ 31 марта 2010
  • Попробуйте Range.CopyFromRecordset, чтобы проверить, работает ли он.
  • Попробуйте использовать CStr(oRs.Fields("memoField")) и присвойте Value2 из Range / ActiveCell.
  • Попробуйте сделать памятное поле последним физическим столбцом в таблице. Памятное поле читается только при получении. Возникла / может еще быть проблема с мемо-полями, которые физически не находятся в конце таблицы.

Все, что я могу думать прямо сейчас.

...