Сбой записи ADO для типа данных "memo" во время импорта в Excel - PullRequest
1 голос
/ 05 октября 2011

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

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

Далее происходит сбой программы, когда она пытается сохранить данные в Range. Похоже, он попадает в первое «пустое» поле, а затем выдает код ошибки 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 "memo" просто похож на тип MySQL "MEDIUMTEXT", так как бы мне обойти такой предел? Тогда это отдельный вопрос, но какие есть альтернативы соединениям ADO?

1 Ответ

0 голосов
/ 05 октября 2011

Вы можете использовать свой объект ADO Connection (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 enum value, используйте объектный браузер, чтобы узнать значение enum.Размещение результатов здесь может дать дополнительную информацию о вашей проблеме.

...