Кузин А.В., Левонисова С.В. Базы данных (5-е издание, 2012) (1084448), страница 22
Текст из файла (страница 22)
Диапазон возможныхзначений от 1 января 0100 г. до 31 декабря 9999 г. Требуемая память 8 байт112Окончание табл. 3.2Тип данныхОписаниеDoubleЧисловые значения с плавающей точкой двойнойточности. Диапазон возможных значений дляотрицательных чисел от -1,79769313486232Е-30Вдо -4,94065645841247Е-324. Диапазон возможныхзначений для положительных чисел от4,94065645841247Е-324 до 1,79769313486232-Е308.Требуемая память 8 байт.Символ определения типа по умолчанию #IntegerКороткие целые числовые значения. Диапазон возможных значений от -32 768 до 32 767.
Требуемая память2 байт.Символ определения типа по умолчанию %LongДлинные целые числовые значения. Диапазон возможных значений от -2 147 483 648 до 2 147 483 647. Требуемая память 4 байт.Символ определения типа по умолчанию &ObjectИспользуется только для хранения ссылок на объекты.Требуемая память 4 байтSingleЧисловые значения с плавающей точкой обычной точности. Диапазон возможных значений для отрицательных чисел от -3,402823Е38 до -1,401298Е-45. Диапазон возможных значений для положительных чиселот 1,401298Е-45 до 3,402823Е38. Требуемая память4 байт.Символ определения типа по умолчанию !StringИспользуется для хранения строковых значений. Длина строки от 0 до 64 Кбайт.
Требуемая память 1 байтна символ.Символ определения типа по умолчанию $VariantМожет использоваться для хранения различных типов данных: даты/времени, чисел с плавающей точкой, целых чисел, строк, объектов. Требуемая память16 байт плюс 1 байт на каждый символ строковыхзначений.Символ определения типа по умолчанию отсутствуетОпределяемый Определяемые пользователем типы данных, назначепользователем ние и размер выделяемой памяти зависят от определетипния.
Используется для описания структур данных.Позволяет хранить в переменной такого типа множество значений различного типа113При описании переменной указание типа данных может бытьопущено. Тип переменной может в таком случае определяться последним символом ее имени: @, #, %, &, !, $ (соответственноCurrency, Double, Integer, Long, Single, String). Например, поскольку символ $ является символом определения типа для строковых данных, то переменная под именем text$ автоматическистановится переменной типа «строка символов».
В дальнейшем этотспециальный символ указания типа данных может быть опущен,однако постоянное присутствие в имени переменной символа определения типа будет напоминать о том, к какому типу данныхотносится эта переменная, что поможет избежать ошибок использования несовместимых типов данных.Если же последний символ не является ни одним из перечисленных ранее и явное указание типа тоже не используется, то вэтом случае переменной назначается по умолчанию тип данныхvariant, который позволяет хранить в ней данные любого типа.Для определения типа данных аргументов процедуры или функции используется описание типа данных непосредственно в ихзаглавной строке.
Например, заглавная строка процедуры, описывающей параметры как переменные строкового типа, имеет видSub SplitStr(strl As String, str2 As String, str3 AsString)Определение типа данных возвращаемого функцией значениязавершает заглавную строку функции, например, выражениеFunction FindSplitSpace (strl As String) As Integerописывает возвращаемое функцией значение как переменнуюкороткого целого типа.Для описания констант используется оператор Const, схожийс оператором описания переменных Dim. Синтаксис этого оператора имеет видConst <имяКонстанты> [As <типДанных>] = <выражение>Здесь <выражение> — это любое значение или формула, возвращающие значение, которое должно использоваться в качествеконстанты.
Например, оператор, определяющий целую константуmaxLen, имеет видConst maxLen% = 30Как и переменные, константы могут содержать значения различных типов данных, но при этом они не меняют своих значений во время выполнения программы.114Кроме описываемых пользователем констант существуют ещепредопределенные встроенные константы, которые используют втексте программ без предварительного описания. При именовании встроенных констант используется стандартное соглашение,позволяющее определить, к объектам какого приложения ониотносятся: имена встроенных констант, относящихся к объектам Access, начинаются с префикса ас, относящихся к объектамExcel — с префикса xl, относящихся к объектам Word — с префикса wd, а относящихся к объектам VBA — с префикса vb.Например, в командеDoCmd.OpenForm "Orders", acNormal,, stLinkCriteriaиспользуется встроенная константа Access acNormal.Кроме обычных переменных в Visual Basic часто используютсяпеременные, представляющие собой ссылку на объект.
Оказывается, что зачастую использование переменных для ссылок на объекты позволяет не только сократить и упростить текст программы,но и существенно ускорить ее работу.Использование переменной объекта немного отличается отиспользования обычных переменных: нужно не только объявитьтакую переменную, но и перед ее использованием назначить ейсоответствующий объект с помощью специального оператора Set.Синтаксис такого объявления и назначения имеет видDim <имяПеременной> As ObjectSet <имяПеременной> = <ссылкаНаОбъект>Иногда при объявлении такой переменной удобно заранее указать конкретный тип объекта, для чего можно использовать любой конкретный объект из объектной модели Office.
Например:Dim MyBase As DatabaseSet MyBase = DBEngine.Workspaces(0).Databases(0)После такого объявления и назначения можно использоватьпеременную MyBase для обращения к текущей открытой базеданных.Массив — это переменная, в которой хранится одновременнонесколько значений одинакового типа. Формально массив представляет собой совокупность однотипных индексированных переменных.Число индексов массива также может быть различным. Чаще всегоиспользуются массивы с одним или двумя индексами, реже —с тремя; большее число индексов встречается крайне редко.
В VBAдопускается использовать до 60 индексов. О числе индексов мас115сива обычно говорят как о его размерности. Массивы с одниминдексом называют одномерными, с двумя — двухмерными и т.д.Массивы с большим количеством измерений могут занимать оченьбольшие объемы памяти, поэтому следует быть осторожным приих применении.Прежде чем использовать, массив нужно обязательно объявитьего с помощью оператора Dim и указать при этом тип хранящихсяв нем значений. Все значения в массиве обязаны принадлежать кодному типу данных.
Это ограничение на практике можно обойти, используя при объявлении массива тип variant, тогда элементы массива смогут принимать значения различных типов.Синтаксис оператора объявления массива имеет видDim <имяМассива>Данных>(<размер1>,<размер2>,...) As <типЗдесь (<размер1>, <размер2>,...) — размеры массива, т.е. числоиндексов и максимально допустимое значение для каждого конкретного индекса.При этом индексирование элементов массива по умолчаниюначинается с нуля. Так, объявлениеDim Arrayl (9) As Integerопределяет одномерный массив из 10 элементов, являющихсяпеременными целого типа, а объявлениеDim Array2 (4, 9) As Variantопределяет двухмерный массив из пятидесяти (5x10) элементов,являющихся переменными универсального типа Variant.При объявлении массива можно указать не только верхнююграницу индекса, но и нижнюю, т.
е. явно задать диапазон изменения конкретного индекса массива, причем нижняя граница может быть любым целым числом. Синтаксис такого определенияимеет видDim <имяМассива> (<мин1> То <макс1>, ...) As <типДанных>В приведенных примерах речь все время шла о массивах фиксированного размера, число элементов в которых явно указано вовремя описания массива в операторе Dim. Такие массивы называются статическими.В VBA допускается использование и динамических массивов,размеры которых при описании не фиксируются. Определениеразмера динамического массива может быть сделано непосредственно во время выполнения программы.
При определении динамического массива в операторе Dim после имени массива стоятлишь пустые скобки и описание типа переменных. Число индексов и диапазон их изменения не задаются. Однако перед тем какиспользовать массив, нужно выполнить оператор ReDim, который задаст размерность и диапазоны изменения индексов динамического массива.
Синтаксис объявления и определения размеров динамического массива имеет видDim <имяМассива> () As <типДанных>ReDim <имяМассива> (<размер1>, <размер2>,...)3.2.4. Область действия переменных и процедурВсе процедуры, функции, переменные и константы в VBAимеют свою область действия. Это означает, что все они могутиспользоваться только в определенном месте программного кода,т.е. там, где они описаны. Например, если переменная А описанас помощью оператора Dim в теле процедуры с именем Procl, тоименно эта процедура и является ее областью действия. Такимобразом, если имеется другая процедура Ргос2, то использовать вней эту же переменную нельзя.
Если попытаться сделать это, можнолибо получить сообщение об ошибке из-за использования неописанной переменной (в случае, если используется упоминавшийсявыше оператор Option Explicit), либо другую переменную с темже самым именем, но никак не связанную с одноименной переменной из первой процедуры.В каком месте программы и как именно описана переменная,определяет область ее действия, а также длительность жизни впамяти и сохранения присвоенного ей значения.Имеется три различных уровня при определении области действия переменных: уровень процедуры, уровень модуля и уровеньпроекта.Чтобы определить переменную на уровне процедуры, ее описание помещается в тело этой процедуры.Чтобы определить процедуру на уровне модуля и сделать ее темсамым доступной для совместного использования во всех процедурах этого модуля, следует поместить ее описание в секции объявлений модуля (перед текстом каких-либо процедур или функций).При этом можно использовать и явное описание области действия, т.
е. вместо ключевого слова Dim использовать в этом случае ключевое слово Private.Наконец, чтобы описать переменную на уровне проекта, необходимо расположить ее описание в секции объявлений одногоиз модулей проекта и при этом обязательно использовать ключевое слово Public. Описанные таким образом переменные могут117использоваться в любом модуле проекта. Все сказанное относитсяк описанию и определению области действия констант и массивов.Для переменных имеется еще один способ описания, не изменяющий их уровня, но позволяющий сохранить значение переменной, описанной на уровне процедуры, после завершения работы этой процедуры.