2010-03-30 1 views
2

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

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 получить данные поля memo? Или это просто невозможно. Я получаю точно такую ​​же ошибку и от GetChunk.

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

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

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

ответ

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

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

+0

Я попробовал CStr на ранней стадии, считая, что это проблема с преобразованием, но это привело к той же ошибке. Спасибо, я попробую другие два варианта. –

Смежные вопросы