Как сделать код в access

Обновлено: 07.07.2024

Один из важнейших элементов Access, который широко используется в приложениях — это формы. Формы Access предназначены для того же, для чего и обычные формы VBA — это прежде всего контейнеры для графических элементов управления. Но устройство форм Access, их функциональные возможности, приемы работы с ними и даже наборы элементов управления, которые на них можно размещать, сильно отличаются от привычных нам форм VBA, которые можно использовать в Word и Excel.

Формы Access используются:

  • Для редактирования записей в таблицах базы данных Access и внешних источников данных. Для того, чтобы создать такие формы, вообще не нужно никакого программирования — достаточно создать форму в режиме конструктора или воспользоваться мастером создания форм. Подключиться к внешнему источнику данных (например, базе данных SQL Server или Oracle) можно, воспользовавшись в Access меню Файл ->Внешние данные ->Связь с таблицами.
  • Как панели управления вашего приложения. Очень часто в приложении на основе Access создается начальная форма, которая открывается при запуске этого приложения. На этой формы предусмотрены кнопки и другие элементы управления для вызова других форм, отчетов, макросов, выхода из приложения и выполнения прочих операций. После закрытия других форм управления опять передается начальной форме.
  • Просто для предоставления пользователю возможности выполнения любых действий. Например, форму можно использовать для выбора пользователем параметров отчета, выгрузки данных во внешнее приложение (например, Excel) и т.п.

Как работать с формами Access из VBA?

Первое, что необходимо сказать — для работы с формами во многих ситуациях нам придется использовать общий объект AccessObject, который представляет в Access не только формы, но и таблицы, макросы, модули, отчеты и множество других элементов. Поскольку этот объект — универсальный, то, конечно, большой помощи от Intellisense — подсказки в редакторе VBA у нас не будет. Обратиться к объекту формы можно через коллекцию AllForms, которая доступна через объекты CodeProject и CurrentProject. Например, получить информацию о всех формах в базе данных Access можно так:

Dim oA As AccessObject

For Each oA In CurrentProject.AllForms

Если вы будете обращаться к формам в коллекции AllForms по индексу, обратите внимание, что нумерация форм в этой коллекции начинается с 0. Обращаться к элементам в этой коллекции можно и по имени:

Специальное свойство IsLoaded определяет, открыта ли эта форма (то есть загружена ли она в оперативную память).

Программным образом формы можно найти и другим способом. Все открытые формы Access автоматически помещаются в коллекцию Application.Forms и представляются в виде объекта Form. Это — уже нормальный объект, свойства которого соответствуют свойствам формы, доступным через графический интерфейс. Например, если форма Форма1 открыта, получить информацию о ее ширине можно так:

Debug.Print Application.Forms("Форма 1").Width

Это свойство можно использовать и для изменения ширины формы, но для этой цели рекомендуется использовать метод DoCmd.MoveSize(), который изменяет размеры активного объекта (например, нашей формы, если она активна):

DoCmd.MoveSize Width :=10000

Еще одна возможность: если вы работаете с кодом самой формы или ее элементов управления (например, события Click кнопки, которая расположена на форме), то обратиться к объекту самой этой формы можно совсем просто. Для этого используется ключевое слово Form.

Как можно открыть форму?

Первое, что нужно сказать — если в Word или Excel нам обязательно потребуется открыть форму программным способом, то в Access это совсем необязательно. Можно открыть форму и вручную из окна базы данных (см. рис. 12.1). Из этого же окна обычно производится создание новых форм или изменение существующих.


Рис. 12.1 Окно для работы с формами в Access

Еще один часто используемый способ — просто запускать форму при открытии базы данных Access. Для этого в меню Сервис нужно выбрать Параметры запуска и выбрать нужную форму в списке Вывод формы/страницы. Если при этом вы уберете все остальные флажки, то приложение при открытии приложение может выглядеть так, как показано на рис. 12.2:


Рис. 12.2 Все лишние возможности Access спрятаны от пользователя

Окно базы данных будет скрыто от пользователя, а это значит, что пользователь не сможет получить информацию ни о таблицах нашей базы данных, ни о других формах, ни о модулях — все служебные элементы базы данных будут от него спрятаны. В принципе, пользователь может обойти такую защиту, держа нажатой при запуске Access кнопку , но программным способом можно закрыть и такую возможность.

Если все-таки нужно открыть форму программным способом (например, из другой формы), то для этой цели можно использовать метод DoCmd.OpenForm(). В самом простом варианте этот метод просто принимает параметр с именем формы:

Если же форма уже открыта, то этот метод, конечно, не открывает форму заново, а просто активизирует ее. Метод DoCmd.OpenForm() принимает также несколько необязательных параметров, при помощи которых вы можете настроить фильтр на отображение записей в форме, режим открытия формы (например, модальность) и т.п. Закрытие формы производится при помощи метода DoCmd.Close(). Если же вам нужно просто спрятать форму, чтобы сохранить введенные на ней пользователем значения и отобразить их при следующем показе, можно просто сделать форму невидимой, назначив ее свойству Visible значение False.

Форма нам обычно нужна не сама по себе, а как контейнер для расположенных на ней элементов управления. Обычно элементы управления программным способом создавать не требуется — намного проще и удобнее поместить их на форму в режиме конструктора для формы. В наборе элементов управления для формы предусмотрены как знакомые нам элементы управления — текстовые поля, надписи, кнопки, флажки и переключатели, так и новые элементы — свободная и присоединенная рамки объектов, разрывы страниц, подчиненные формы/отчеты и т.п. В верхнем правом углу Toolbox в конструкторе формы Microsoft Access находится специальная кнопка Мастера. Если она нажата, то добавление на форму привычных элементов управления (например, кнопки) приведет к появлению окна мастера, который попытается помочь вам автоматически сгенерировать нужный код VBA для этого элемента управления (см. рис. 12.3)


Рис. 12.3 Мастер создания кнопок

Можно использовать генерируемый мастером код как заменитель макрорекордера (которого в Access нет), чтобы понять, как можно выполнить те или иные действия.

Для чего используются нестандартные (по отношению к обычным формам VBA) элементы управления:

  • Свободная рамка объекта — возможность разместить на форме OLE-объект (например, документ Word, лист Excel, презентация PowerPoint, рисунок, звукозапись или видеоклип), который может быть встроен в базу данных Access (но не помещен в таблицу!) или находиться во внешнем по отношению к базе данных Access файлу.
  • Присоединенная рамка объекта — то же самое, за исключением того, что он применяется для работы с объектами OLE, которые хранятся в таблицах внутри баз данных Access или внешнего источника данных. Это — самый удобный способ генерации отчетов в Word.

Например, предположим, что в нашей базе данных Access находится таблица с тремя столбцами, как показано на рис. 12.4.


Рис. 12.4 Таблица для хранения шаблонов Word

В столбце File у нас хранятся шаблоны Word, которые используются для генерации отчетов. Мы помещаем на форму элемент управления Присоединенная рамка объекта с именем WordTemplate. После этого все, что нужно для создания файла Word на основе шаблона из базы данных, у нас уже есть. Для кнопки, по нажатию на которой будет формироваться отчет, можно использовать следующий код:

'Получаем ссылку oFrame на объект присоединенной рамки на форме

Dim oFrame As BoundObjectFrame

Set oFrame = oForm.Controls("WordTemplate")

'При помощи метода DLookup () скачиваем в него значение столбца File из таблицы

'Templates, где номер строки (значение столбца Num ) равно 1

oFrame = Application.DLookup("[File]", "Templates", "[Num] = 1")

'Открываем объект в отдельном окне приложения — то есть создаем

'документ Word на основе шаблон, загруженного в рамку объекта на форме

'Активизируем объект приложения

'Получаем ссылку на Word в переменную oWord

Dim oWord As Word.Application

Set oWord = GetObject(, "Word.Application")

'Получаем ссылку на созданный нами документ

Dim oDoc As Word.Document

Set oDoc = oWord.ActiveDocument

'Дальше работаем средствами Word, например, вставляем нужный текст

'в места, отмеченные закладками

Конечно же, правильнее будет при этом сделать эту присоединенную рамку объекта на форме изначально невидимой — чтобы пользователь не мог этот объект активизировать по собственной инициативе.

  • Элемент управления Разрыв страницы — определяет начало нового экрана формы.
  • Подчиненная форма/отчет — используется для размещения на форме подчиненных форм, таблиц или отчетов.

Как уже говорилось, программным способом элементы управления в форме Access приходится создавать редко. Если на форме вам нужен переменный набор элементов управления, то правильнее будет с самого начала создать все нужные элементы управления и по необходимости делать их то видимыми, то невидимыми. Тем не менее создать программным способом элементы управления на форме тоже можно. Эта операция выполняется при помощи метода Application.CreateControl(), который принимает множество параметров — имя формы, на которой создается элемент управления, тип элемента управления, его месторасположение на форме и т.п.

Обращение к значениям элементов управления на форме производится через коллекцию Controls, которая умеет работать с именами элементов управления:

MS Access имеет ограниченные возможности для управления сырыми SQL-запросами: редактор довольно плох, не выделяет синтаксис, он переформатирует ваш необработанный SQL в длинную строку и вы не можете вставлять комментарии.

Отладка сложных SQL-запросов также является болью: либо вы должны разбить ее на многие более мелкие запросы, которым сложно управлять, когда изменяется ваша схема, либо вы получаете гигантский запрос, который является кошмаром для отладки и обновления.

Как вы управляете сложными SQL-запросами в MS Access и как их отлаживать?

Edit
На данный момент я в основном использую Notepad ++ для некоторой раскраски синтаксиса и SQL Pretty Printer для корректного переформатирования исходного SQL из Access.
Использование внешнего репозитория полезно, но при этом всегда существует риск того, что две версии не синхронизируются, и вам все равно придется удалять комментарии, прежде чем пытаться выполнить запрос в Access.

ОТВЕТЫ

Ответ 1

Для отладки я редактирую их в отдельном текстовом редакторе, который позволяет мне отформатировать их разумно. Когда я нахожу, что мне нужно внести изменения, я редактирую версию в текстовом редакторе и вставляю ее обратно в Access, не редактируя версию в Access.

Еще одна крупная PITA.

Ответ 2

У меня есть несколько советов, которые относятся к SQL в VBA.

Поместите свой SQL-код в строковую переменную. Я использовал это:

Вставьте результат в стандартный построитель запросов Access (вы должны использовать SQL-представление). Теперь вы можете протестировать окончательную версию, включая переменные, обработанные кодом.

Когда вы готовите длинный запрос в виде строки, раскройте свой код:

(ПРИМЕЧАНИЕ. Возможно, вы подумаете, что это позволит добавлять комментарии справа от строк SQL. Подготовьтесь к разочарованию.)

Как сказано в другом месте, поездки в текстовый редактор являются экономией времени. Некоторые текстовые редакторы обеспечивают лучшую подсветку синтаксиса, чем официальный редактор VBA. (Heck, StackOverflow делает лучше.) Он также эффективен для удаления Access cruft, как лишние ссылки на таблицы и груды скобок в предложении WHERE.

Рабочий поток для серьезной проблемы:

Конечно, проблема при съемке обычно связана с уменьшением сложности запроса, пока вы не сможете изолировать проблему (или, по крайней мере, заставить ее исчезнуть!). Тогда вы можете построить его обратно до желаемого шедевра. Поскольку для решения липкой проблемы может потребоваться несколько циклов, вы, вероятно, будете использовать этот рабочий процесс повторно.

Ответ 3

Когда flummoxed, я обычно начинаю отладку с предложением FROM . Я возвращаюсь ко всем таблицам и подзапросам, которые содержат более крупный запрос, и убедитесь, что соединения правильно определены.

Затем я проверяю свое предложение WHERE . Я запускаю множество простых запросов в таблицах и в подзапросах, которые я уже проверил, или которые я уже доверяю, и убедитесь, что, когда я запускаю более крупный запрос, я получаю то, что ожидаю с помощью WHERE условия на месте. Я дважды проверяю условия JOIN .

Я дважды проверю определения столбцов, чтобы убедиться, что я извлекаю то, что я действительно хочу видеть, особенно если сложные формулы сложны. Если у вас есть что-то сложное, как скоординированный подзапрос в определении столбца

Затем я проверю, правильно ли я группирую данные, убедившись, что " DISTINCT " и " UNION " без UNION ALL не удаляют необходимые дубликаты.

Я не думаю, что когда-либо сталкивался с SQL-запросом, который не мог быть разбит таким образом. Я не всегда так методичен, как это, но это хороший способ начать разрушать реальный камень.

Одна вещь, которую я мог бы порекомендовать при написании ваших запросов, таков: Никогда не используйте SELECT * в производственном коде. Выбор всех столбцов таким образом - это кошмар обслуживания, и это приводит к большим проблемам, когда ваш изменение базовых схем. Вы всегда должны выписывать каждый столбец, если вы пишете SQL-код, который вы будете поддерживать в будущем. Я сэкономил много времени и беспокоился, просто избавившись от " SELECT * " в моих проектах.

Недостатком этого является то, что эти дополнительные столбцы не будут отображаться автоматически в запросах, относящихся к запросам " SELECT * ". Но вы должны знать, как ваши запросы связаны друг с другом, так или иначе, и если вам нужны дополнительные столбцы, вы можете вернуться и добавить их.

Есть некоторые проблемы, связанные с поддержкой репозитория кода, но если у вас есть программное обеспечение для управления версиями, проблема в этом больше, чем того стоит. Я слышал о способах кодирования кода SQL, написанного в базе данных Access, но, к сожалению, я их никогда не использовал.

Ответ 4

Я написал Access SQL Editor - надстройка для Microsoft Access - потому что я пишу довольно много сквозных запросов, и более сложный SQL в Access. Преимущество этой надстройки состоит в возможности хранить форматированный SQL (с комментариями!) В самом приложении Access. Когда запросы копируются в новое приложение Access, форматирование сохраняется. Когда встроенный редактор сжимает ваше форматирование, инструмент покажет ваш первоначальный запрос и уведомит вас о разнице.

В настоящее время он не отлаживается; если бы был достаточно интерес, я бы преследовал это. но пока набор функций намеренно невелик.

Пока это не бесплатно, но покупка, лицензия очень дешевая. Если вы не можете себе это позволить, вы можете связаться со мной. Существует бесплатная 14-дневная пробная версия здесь.

После его установки вы можете получить доступ к нему через меню надстроек (в Access 2010 - инструменты для базы данных → Добавить Ins).

Ответ 5

Если вы выполняете действительно сложные запросы в MS Access, я бы подумал о том, чтобы хранить репозиторий этих запросов где-то вне самой базы данных Access. например, в файле .sql, который затем можно редактировать в редакторе как Intype, который обеспечит подсветку синтаксиса. Это потребует, чтобы вы обновляли запросы в обоих местах, но в конечном итоге вам будет удобно иметь "официальное" место для него, которое отформатировано и правильно подсвечено.

Или, если это вообще возможно, переключитесь на SQL Server 2005 Express Edition, которая также бесплатна и предоставит вам те функции, которые вы хотите, через SQL Management Studio (также бесплатно).

Ответ 6

Подобно рекурсивному,, я использую внешний редактор для написания своих запросов. Я использую Notepad ++ с расширением Light Explorer для поддержки нескольких сценариев за раз, а Notepad2 - для разовых скриптов. (Я отчасти отчасти для редакторов Scintilla).

Другой вариант - использовать бесплатный SQL Server Management Studio Express, который поставляется с SQL Server Express. (EDIT: Извините, EdgarVerona, я не заметил, что вы уже упомянули об этом!) Обычно я использую его для написания SQL-запросов вместо использования Access, потому что я обычно использую ODBC для ссылки на SQL Server назад конец в любом случае. Помните, что различия в синтаксисе T-SQL, используемого SQL Server и Jet SQL, которые используются Access MDB, иногда существенны.

Ответ 7

Вы говорите здесь о том, что MS-Access вызывает "запросы" и SQL-запросы "запросы" или о запросах "сквозного доступа к MS-Access", которые являются SQL-запросами? Кто-то может легко потеряться! Мое решение таково:

  • бесплатное управление SQL Server Studio Express, где я буду разрабатывать и тестировать мои запросы
  • таблица запросов на клиенте сторона, с одним полем для запроса имя ( id_Query ) и другое ( queryText , тип memo) для сам запрос.

Затем у меня есть небольшая функция getSQLQuery в моем коде VBA, которая будет использоваться, когда мне нужно выполнить запрос (либо возвратить набор записей, либо нет):

Для представлений даже их можно сохранить на стороне сервера и ссылаться на них со стороны клиента

Ответ 8

Развернувшись на этом предположении от Смандоли:

Если вы хотите сохранить код SQL во внешнем файле, для редактирования с помощью вашего любимого текстового редактора (с раскраской синтаксиса и всего этого) вы можете сделать что-то вроде этого псевдокода:

Это может быть немного неудобно - может быть, много неуклюжего - но это позволяет избежать проблем с консистентностью edit-copy-paste.

Очевидно, что это не относится непосредственно к отладке SQL, но управление кодом в читаемом виде является частью проблемы.

Ответ 9

Я думаю, что я не пишу сложный SQL, потому что большую часть времени у меня не проблема с редактором Access SQL. Это связано с тем, что, по большей части, я использую QBE для написания SQL и только погружаюсь в представление SQL, чтобы делать то, что QBE не поддерживает (например, объединения без equi, некоторые формы подзапросов, UNION и т.д..). Это не означает, что у меня нет SQL, с которым очень сложно работать, но в основном потому, что он СЛАВНО ПЛОХОЙ ПИСЬМО, и что я виноват, а не Access fault. У меня есть один ужасный, ужасающий сохраненный QueryDef в приложении, которое было в производстве с 1997 года, у которого есть SQL, что 11 934 символов. И, да, это ужасно для устранения неполадок. И почти любое редактирование, которое я ему делаю, что-то ломает. Но это потому, что IT BAD SQL.

Почему каждый хотел бы написать свой SQL вручную как общее правило, я не могу сказать. Для всего, кроме самого тривиального SQL, мне кажется больше неприятностей, чем того стоит.

Мне кажется, что это похоже на другой случай, когда люди сопротивляются стандарту Access Access. Почти всегда это происходит с пользователями, имеющими опыт в других средах программирования, которые слишком нетерпеливы, чтобы попробовать что-то, как Access делает их по умолчанию. Конечный результат обычно недоволен всем.

Пошаговое создание таблиц в базе данных Access

Всем привет! В этом уроке разберем пошаговое создание таблиц в базе данных Access. От вас потребуется только читать и повторять. Поехали!
Цель: научиться создавать таблицы базы данных, задавать их структуру, выбирать типы полей и управлять их свойствами; освоить приемы наполнения таблиц конкретным содержанием.

Руководитель малого предприятия, выполняющего сборку персональных компьютеров из готовых компонентов, заказал разработку базы данных, основанной на двух таблицах комплектующих. Одна таблица содержит данные, которые могут отображаться для клиентов при согласовании спецификации изделия, — в ней указаны розничные цены на компоненты. Вторая таблица предназначена для анализа результатов деятельности предприятия – в ней содержаться оптовые цены на компоненты и краткая информация о поставщиках (клиенты предприятия не имеют доступа к данным этой таблицы).


1. Запустите программу Microsoft Access (Пуск — Программы — Microsoft Office — Microsoft Access).

2. В окне Microsoft Access включите переключатель Новая база данных.

Пошаговое создание таблиц в базе данных Access

Пошаговое создание таблиц в базе данных Access

Создание БД Access — Пошаговое создание таблиц в базе данных Access

3. На боковой панели выберите место, где будет храниться база данных, дайте файлу имя: Комплектующие. Убедитесь, что в качестве типа файла выбрано Базы данных Microsoft Access и щелкните по кнопке Создать. В результате на экране должно появиться окно новой базы данных. Автоматически будет запущен режим создания первой таблицы:

Пошаговое создание таблиц в базе данных Access

4. Перейти из режима таблицы в режим конструктора, выбрав его в меню:
Когда программа запросит имя таблицы, ввести название: Комплектующие и нажать Ok. Откроется окно конструктора, в котором мы будем создавать структуру таблицы:

Пошаговое создание таблиц в базе данных Access

Пошаговое создание таблиц в базе данных Access

Создание Таблицы Access — Пошаговое создание таблиц в базе данных Access

5. Для первой таблицы введите следующие поля:

Пошаговое создание таблиц в базе данных Access

Обратите внимание на то, что в данном случае поле Цена задано не денежным типом, а числовым. Данные, относящиеся к денежному типу, имеют размерность, выраженную в рублях (если работа выполняется с версией Microsoft Access, локализованной в России). Но стоимость компонентов вычислительной техники выражать в этой единице измерения не принято. Для сравнимости цен разных поставщиков обычно используют “условные единицы”. В таких случаях удобно использовать поле числового типа, чтобы не перенастраивать всю СУБД.

Пошаговое создание таблиц в базе данных Access

6. Щелкните на поле Цена. В нижней части бланка задайте свойство Число десятичных знаков, равным 2.

Пошаговое создание таблиц в базе данных Access

7. Для связи с будущей таблицей поставщиков надо задать ключевое поле. Поскольку здесь ни одно поле явно не претендует на “уникальность”, используем комбинацию полей Компонент и Модель. Выделите оба поля в верхней части бланка (при нажатой клавише SHIFT). Щелчком правой кнопки мыши откройте контекстное меню и выберите в нем пункт Ключевое поле.

Пошаговое создание таблиц в базе данных Access

9. Повторив действия пунктов 4-8, создайте таблицу Поставщики, в которую входят следующие поля:

Пошаговое создание таблиц в базе данных Access

Для этого нужно выполнить следующее: меню Создать — Таблица.

Пошаговое создание таблиц в базе данных Access

Выбрать режим Конструктора.

Пошаговое создание таблиц в базе данных Access

Обратите внимание на то, что поле номера телефона является текстовым, несмотря на то, что обычно номера телефонов записывают цифрами. Это связано с тем, что они не имеют числового содержания. Номера телефонов не сравнивают по величине, не вычитают из одного номера другой и т.д. Это типичное текстовое поле.
Ключевое поле можно не задавать – для текущей задачи оно не требуется.
10. В левой боковой панели окна базы данных двойным щелчком откройте по очереди созданные таблицы и наполните их экспериментальным содержанием (по 10 записей).
11. Закончив работу, закройте таблицы и завершите работу с программой.
В этом уроке на простом примере было показано Пошаговое создание таблиц в базе данных Access. Если было интересно, то рекомендую посмотреть видеоурок ниже.

Пошаговое создание таблиц в базе данных Access

Продолжение следует…
УРОК 1: Пошаговое создание таблиц в базе данных Access
УРОК 2: Создание межтабличных связей в базе Access
УРОК 3: Создание запроса на выборку данных в базе Access
УРОК 4: Создание запросов с параметром в базе Access
УРОК 5: Создание перекрёстного запроса в базе Access
УРОК 6: Создание запросов на изменение в базе Access
УРОК 7: Создание и заполнение форм в базе Access

Запустим Visual Studio 2010 и в окне New Project выберем в среде CLR узла Visual C++ приложение шаблона Console Application CLR. Для добавления в наш про­ект DLL-библиотеки ADOX выполним следующее: в пункте меню Project выберем команду Properties ► Add Reference, затем на вкладке COM дважды щелкнем по ссылке Microsoft ADO Ext. 2.8 for DDL and Security, добавив тем самым эту библиотеку в те­кущий проект. Убедиться в том, что теперь существует ссылка на эту библиотеку, можно в окне Properties. Здесь, щелкнув на узле References, увидим ветвь ADOX. Теперь мы можем ссылаться на это имя в программном коде. Далее вводим про­граммный код, приведенный в листинге 10.3.

Листинг 3. Создание БД во время работы программы

// БДСоздание.cpp: главный файл проекта.

// Программа создает базу данных MS Access, то есть файл new_BD.mdb.

// Эта база данных будет пустой, то есть не будет содержать ни одной таблицы.

// Наполнять базу данных таблицами можно будет впоследствии

// как из программного кода C++ 2010, так и используя MS Access.

// Добавим в наш проект библиотеку ADOX: Project⴬Add Reference, и на

// вкладке COM выбираем Microsoft ADO Ext. 2.8 for DDL and Security

using namespace System;

// Для вызова MessageBox выберем следующие пункты меню:

// System.Windows.Forms.dll, а в тексте программы добавим директиву:

using namespace System::Windows::Forms;

int main(array ^args)

ADOX::Catalog ^Каталог = gcnew ADOX::CatalogClass();

MessageBox::Show("База данных D:\\new_BD.mdb успешно создана");

catch (System::Runtime::InteropServices::COMException ^ Ситуация)

Using namespace System::Windows::Forms;

Ключевое слово using используется для импортирования пространства имен, которое содержит класс MessageBox.

Запись структуры таблицы в пустую базу данных MS Access. Программная реализация подключения к БД

Создадим базу данных new_BD.mdb в корневом каталоге логического диска C:, используя MS Access или программным путем, как это было показано в преды­дущем разделе. Никакие таблицы в базе данных создавать не будем, то есть наша БД будет пустой. Теперь запустим Visual Studio 2010 и в окне New Project выберем в среде CLR узла Visual C++ приложение шаблона Console Application CLR. Затем на­пишем программный код, представленный в листинге 4.

Листинг 4. Создание таблицы в БД MS Access

// БдСоздТаблицы.cpp: главный файл проекта.

// Программа записывает структуру таблицы в пустую базу данных MS Access.

// Программная реализация подключения к БД. В этой БД может еще не быть

// ни одной таблицы, то есть БД может быть пустой. Либо в БД могут уже быть

// таблицы, но название новой таблицы должно быть уникальным

using namespace System;

// Для вызова MessageBox выберем следующие пункты меню:

// System.Windows.Forms.dll, а в тексте программы добавим директиву:

using namespace System::Windows::Forms;

// Добавляем эту директиву для более краткого обращения к классам

using namespace System::Data::OleDb;

int main(array ^args)

// Создание экземпляра объекта Connection с указанием строки

auto Подключение = gcnew OleDbConnection(

// Создание экземпляра объекта класса Command

// с заданием SQL-запроса:

auto Команда = gcnew OleDbCommand("CREATE TABLE [" +

"БД телефонов] ([Номер п/п] counter, [ФИО] ch" +

"ar(20), [Номер телефона] char(20))", Подключение);

try // Выполнение команды SQL:

"Структура таблицы 'БД телефонов' записана в пустую БД");

catch (Exception ^ Ситуация)

Как видно из текста программы, вначале мы создаем экземпляр класса Connection с указанием строки подключения, это позволит нам управлять этой строкой про­граммно. Далее создаем экземпляр класса Command с заданием SQL-запроса. В этом запросе создаем (CREATE) новую таблицу с именем БД телефонов с тремя полями: Номер п/п типа счетчик (counter), ФИО и Номер телефона. Имя таблицы и имена по­лей заключены в квадратные скобки, поскольку они содержат пробелы.

Таким образом, в данной программе сначала органи­зовано подключение Connection к БД через строку под­ключения и открытие подключения Open. Затем задание SQL-запроса в объекте Command и выполнение запроса функцией ExecuteNonQuery. Если связывание данных ор­ганизовать программно, то мы получим большую гибкость для тех случаев, когда, например, на стадии разработки неизвестно заранее, где (на каком диске, в какой папке) будет находиться БД.

Убедиться в работоспособности программы можно, открыв решение БдСоздТаблицы.sln в папке БдСоздТаблицы.

Читайте также: