Определенная часть
varchar(MAX)
может использоваться из ADO в качестве входного параметра.
Тип данных в этом случае будет adLongVarChar
, максимальная длина &h7FFFFFFF
, как задокументировано здесь .
Хотя он не может использоваться в качестве выходного параметра.
Также он не может использоваться в качестве типа поля в возвращенной записи (смешно - .Value
равно Empty
,потому что это на самом деле длинный тип, но GetChunk
может не вызываться для извлечения фактических данных, потому что ADO считает, что это не длинный тип).
Если вам нужно использовать varchar(MAX)
в качестве выходного параметра, используя VBA/ ADO, вам нужно будет select
, чтобы вернуть клиенту набор записей, и вам придется привести его к text
при этом:
select cast(@var as text) as data;
return 0;
Тогда вы скажете s = .Fields(0).GetChunk(.Fields(0).ActualSize)
чтобы получить данные из открытого набора записей.
Абстрактная часть
Суть ADO состоит в том, чтобы абстрагироваться от различий между различными источниками данных.Как только есть драйвер доступа к данным, поддерживающий интерфейс, вы (в идеале) можете говорить с ним, не беспокоясь о том, что это такое.
Как и любая абстракция, этот также leaky .
Точное знание того, какие типы данных, какие серверы соответствуют каким типам данных ADO, приходит из опыта.То есть.
Некоторые практические правила, однако, могут быть разработаны довольно быстро:
Нетрудно определить возможные типы данных ADO путем сопоставления их имен с данными.введите имена конкретного сервера:
int - adInteger
datetime - adDBDate
(хотя здесь вы можете столкнуться с пробой и ошибкой)
Некоторые типы данных называются BLOB (большие двоичные объекты).Они предназначены для хранения огромного объема данных и обычно представлены в документации источника данных как таковой.Для них соответствующий тип данных ADO может содержать в своем имени Long
, что в мире ADO означает «BLOB» (adLongVarBinary
, adLongVarChar
, adLongVarWChar
).
Любую информацию о точной длине типа данных можно найти в документации к источнику данных, а не в документации ADO.Для таких вещей, как:
- Максимальная длина, установленная разработчиком для определенного столбца в этой конкретной таблице (например,
varchar(10)
) - Максимальная теоретическая длина типа данных BLOB (например,как
varchar(max)
)
вы будете обращаться к соответствующему источнику данных, а не к ADO.