Как я могу отобразить идентификаторы GUID в ListObject

#excel #vba #ms-access #oledb

#excel #vba #ms-access #oledb

Вопрос:

Я пытаюсь отобразить результат инструкции SQL в ListObject . Данные, которые выбирает оператор SQL, находятся в таблице MS-Access и содержат столбец с типом данных guid .

Объект ListObject создается следующим образом

 set listObj = activeSheet.listObjects.add( _
    sourceType  := xlSrcExternal         , _
    source      := array(source)         , _
    destination := destCell)
  

source это строка со значением OLEDB;provider=Microsoft.ACE.OLEDB.12.0;data source=p:athdodb.accdb .

Я выполняю оператор select следующим образом

 with listObj ' {

    .displayName = "foo"

     with .queryTable ' {

         .commandType            = xlCmdSql
         .commandText            = array("select * from tab")

         .refreshOnFileOpen      = false
         .backgroundQuery        = true
         .refreshStyle           = xlInsertDeleteCells
         .saveData               = true
         .refreshPeriod          = 0
         .preserveColumnInfo     = true

         .refresh backgroundQuery := false

     end with ' }

end with ' }
  

Это отображает результирующий набор запроса, но без столбца с идентификатором guid.

Итак, есть ли способ добавить столбец guid?

Комментарии:

1. На каком языке этот код? Это не VBA.

2. О, хорошо, теперь я вижу эти апострофы. Странно.

3. Апострофы запускают комментарии в VBA..

4. Я знаю, что они делают, что странно, так это фигурные скобки.

5. Фигурные скобки предназначены для сворачивания кода.

Ответ №1:

Я так не думаю, если вы ограничиваетесь ListObjects и OLEDB.

Идентификатор GUID представлен в виде двоичных данных в Access. Excel listobjects не может отобразить это.

Чтобы преобразовать идентификатор GUID в строку, обычно используется StringFromGUID функция в Access, но это не поддерживается через OLEDB.

Однако PowerQuery и Microsoft Query изначально понимают идентификаторы GUID и будут отображать их правильно. К сожалению, работа с PowerQuery через VBA имеет тенденцию к появлению неприятных предупреждений, поэтому Microsoft Query, как правило, является лучшим вариантом.

В качестве альтернативы, вы можете сначала выполнить SELECT StringFromGUID(MyGuid) As MyGUIDString, * INTO TempTable FROM tab сначала в Access (автоматизировав приложение Access), а затем отобразить это в Excel.