Набор записей ADO не работает с типом данных memo во время импорта в Excel

Я пытаюсь получить данные с сервера SQL для использования в некоторых макросах Excel 2003. Я хотел бы избежать использования QueryTables, так как мне не нужен этот промежуточный этап записи и чтения с реальных листов. Это кажется долгим и бессмысленным.

Мне удалось получить набор записей, но он содержит пустые данные с типом данных «memo» на сервере.

Кроме того, программа аварийно завершает работу при попытке сохранить данные в диапазоне. Кажется, он доходит до первого «пустого» поля, а затем выдает мне код ошибки 1004.

Очевидно, что поле для заметок меня огорчает. Может ли кто-нибудь сделать предложение о том, как обойти это, или что я должен делать по-другому?

    objMyConn.connectionString = "ODBC;" _
    & "Provider=SQLOLEDB;DRIVER={SQL Server};SERVER=VANDB;" _
    & "APP=Microsoft Office 2003;DATABASE=WPDB_BE;Trusted_Connection=Yes;"
    objMyConn.Open

Я искал в Интернете целую вечность, но этот материал Access/ADO/Excel чрезвычайно болезненный. Пожалуйста помоги.

Редактировать 1: позже я изменил SQL-запрос с помощью «TOP 1» (SQL-версия «LIMIT 1») и обнаружил, что с этим набором записей поля памятки были возвращены правильно. Точно так же я мог бы выбрать одно проблемное поле и получить больше строк, например. "ВЫБЕРИТЕ ТОП 52 bad_field ИЗ..."

Итак, я подозреваю, что проблема связана с ограничением размера данных соединения ADO? Похоже, что тип «памятки» Access похож на тип MySQL «MEDIUMTEXT», так как же мне обойти такое ограничение? Тогда это отдельный вопрос, а какие есть альтернативы подключениям ADO?


person supermitch    schedule 04.10.2011    source источник
comment
Действительно ли memo является типом данных? Хотя на SQL-сервере это был просто текст. Памятка — это тип поля доступа.   -  person Tim Williams    schedule 05.10.2011
comment
Ну так кажется. Очень похожее поле говорит тип текста и работает нормально, тогда как другие говорят заметки и не работают вообще. Я просматриваю таблицы только через Access, у меня нет административного представления фактической базы данных SQL. (и я не знаю как, поскольку мой опыт работы с PHP и mySQL достаточно, чтобы попасть в беду)   -  person supermitch    schedule 05.10.2011
comment
Кроме того: обратите внимание, что я обнаружил, что если я ограничу SQL-запрос ОДНОЙ записью, я смогу просмотреть некоторые из этих мемо-полей. Это заставляет меня поверить, что существует ограничение на размер типа данных, который может храниться в наборе записей?   -  person supermitch    schedule 05.10.2011


Ответы (1)


Вы можете использовать свой объект подключения ADO (objMyConn), чтобы обнаружить тип данных (среди других атрибутов), как его интерпретирует ADO:

With objMyConn.OpenSchema(adSchemaColumns, Array(Empty, Empty, "your_table_name_here"))
  .Filter = "COLUMN_NAME = 'your_column_name_here'"
  MsgBox .Fields("DATA_TYPE").Value
End With

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

person onedaywhen    schedule 05.10.2011