#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.