Создавая базу данных, вы обычно начинаете с создания нескольких объектов базы данных, таких как таблицы, формы и отчеты. Рано или поздно наступает момент, когда нужно добавить программный код, чтобы автоматизировать определенные процессы и связать объекты базы данных друг с другом. Прочитав эту статью, вы получите представление о средствах программирования в Access.
В этой статье
-
Программирование
-
Выбор в пользу макросов или кода VBA
-
Выполнение распространенных задач программирования с помощью мастера кнопок
-
Макросы
-
Код VBA
-
Преобразование макросов в код VBA
Программирование
Программирование в Access — это процесс добавления функций в базу данных с помощью макроса Access или кода VBA Visual Basic для приложений (VBA). Предположим, например, что вы создали форму и отчет и хотите добавить в форму кнопку, при нажатии на которую открывается отчет. В данном случае программированием является создание макроса или процедуры VBA с настройкой свойства события OnClick для запуска макроса или процедуры нажатием кнопки. Для простой операции, например открытия отчета, можно воспользоваться мастером кнопок для работы или отключить мастер и программировать его самостоятельно.
Примечание: Во многих программах Microsoft Office термин «макрос» относится к коду VBA. Это может запутать пользователей Access, так как в этом приложении термин «макрос» относится к именованному набору макрокоманд, для создания которого используется конструктор макросов. Макрокоманды Access — это лишь часть команд, доступных в VBA. Конструктор макросов обладает более структурированным интерфейсом, чем редактор Visual Basic, что позволяет добавлять программный код к элементам управления и объектам без необходимости изучать код VBA. Следует помнить, что в статьях справки Access макросы Access называются просто макросами. С другой стороны, код VBA может называться VBA, кодом, функцией или процедурой. Код VBA содержится в модулях классов (это части отдельных форм и отчетов, обычно содержащие код только для этих объектов), а также в модулях (они не привязаны к определенным объектам и обычно содержат «глобальный» код, который можно использовать во всей базе данных).
Объекты, например формы и отчеты, и элементы управления, такие как кнопки и текстовые поля, обладают разными свойствами событий, к которым можно прикреплять макросы или процедуры. Каждое свойство события связано с определенным событием, например со щелчком мышью, открытием формы или изменением данных в текстовом поле. События могут также инициироваться факторами извне Access, например системными событиями, а также макросами или процедурами, прикрепленными к другим событиям. Если добавить много макросов или процедур к нескольким свойствам событий для большого числа объектов, база данных может получиться сложной, но в большинстве случаев для достижения нужных результатов потребуются минимальные усилия по программированию.
К началу страницы
Выбор в пользу макросов или кода VBA
Решение в пользу макросов, кода VBA или обоих методов зависит главным образом от того, как вы планируете развертывать и распространять базу данных. Например, если база данных хранится на вашем компьютере, вы единственный пользователь и хорошо разбираетесь в коде VBA, целесообразно использовать VBA для большинства задач по программированию. Если же вы собираетесь поделиться базой данных с другими людьми, разместив ее на файловом сервере, возможно, лучше обойтись без VBA из соображений безопасности.
Принимая решение об использовании макросов или кода VBA, вы должны учесть два аспекта: безопасность и необходимую функциональность. Безопасности следует уделить особое внимание, так как VBA можно использовать для создания кода, который способен нарушить защиту данных или повредить файлы на локальном компьютере. Если вы используете базу данных, созданную не вами, не включайте код VBA, если не уверены в том, что база данных получена из надежного источника. Создавая базу данных, предназначенную для других людей, не используйте средства программирования, которые могут привести к тому, что пользователям потребуется явно предоставить ей статус надежной. Чтобы избежать такой ситуации, воспользуйтесь распространенными приемами, описанными ниже в этом разделе.
Чтобы обеспечить безопасность базы данных, применяйте макросы везде, где это возможно, а программирование с помощью VBA используйте только для операций, которые невозможно выполнить с помощью макрокоманд. Более того, следует использовать только такие макрокоманды, для выполнения которых не требуется предоставлять базе данных статус надежной. При таком ограничении использования макрокоманд пользователи будут уверены в том, что база данных не содержит программного кода, который может повредить данные или другие файлы на их компьютерах.
Рекомендации по использованию макросов
Начиная с выпуска 2010 в Access предлагается много новых макрокоманд, с помощью которых можно создавать более функциональные макросы, чем в более ранних версиях приложения. Например, теперь можно с помощью макрокоманд создавать и использовать глобальные временные переменные, а также более изящно обрабатывать ошибки, применяя новые специализированные макрокоманды. В более ранних версиях Access это можно было сделать только с помощью кода VBA. Кроме того, можно внедрить макрос прямо в свойство события объекта или элемента управления. Внедренный макрос становится частью объекта или элемента управления и сохраняется при их перемещении и копировании.
Макрос — это простой способ выполнения многих задач программирования, таких как открытие и закрытие форм и запуск отчетов. Вы можете быстро и легко связать созданные объекты базы данных (формы, отчеты и т. д.), так как вам не нужно помнить о синтаксисе. Аргументы для каждой макро макроки отображаются в конструкторе макроса.
Макросы обеспечивают повышенную безопасность и просты в использовании. Кроме того, их необходимо применять для выполнения следующих задач:
-
Назначение действия или набора действий ключу. Для этого необходимо создать группу макросов с именем AutoKeys.
-
Выполнение действия или последовательности действий при первом открытии базы данных. Для этого необходимо создать макрос с именем AutoExec.
Примечание: Макрос AutoExec запускается раньше, чем любой другой макрос или код VBA, даже если вы назначили в диалоговом окне Параметры Access начальную форму и прикрепили к ее событию OnOpen или OnLoad макрос или код VBA.
Дополнительные сведения о создании макросов см. в разделе Макросы.
Рекомендации по использованию VBA
Программный код VBA следует использовать вместо макросов, если вы хотите сделать следующее:
-
Использовать встроенные функции или создать собственные. В Access есть множество встроенных функций, например IPmt, которая вычисляет процентные платежи. С помощью этих встроенных функций можно выполнять вычисления, не создавая сложных выражений. Используя код VBA, вы также можете создать собственные функции для выполнения вычислений, которые требуют создания слишком сложных выражений или не могут быть выполнены с их помощью. Кроме того, созданные функции можно включать в выражения, что позволяет выполнять часто используемые операции с разными объектами.
-
Создавать объекты и обрабатывать их. Вы увидите, что в большинстве случаев проще всего создать или изменить объект в режиме конструктора. Но в некоторых случаях вам может потребоваться изменить определение объекта в коде. С помощью VBA можно обрабатывать все объекты в базе данных, а также манипулировать самой базой данных.
-
Выполнять действия на уровне системы. Чтобы запустить из Access другую программу (например, Microsoft Excel), можно выполнить макрос с макрокомандой RunApp, но в целом возможности применения макросов для выполнения действий вне Access ограничены. С помощью VBA можно проверить, существует ли на компьютере определенный файл, воспользоваться технологией Automation или DDE для взаимодействия с другими программами для Microsoft Windows, такими как Excel, и вызвать функции из библиотек DLL в Windows.
-
Обрабатывать записи поочередно. Используя код VBA, можно обработать набор записей, выполнив поочередно операцию над каждой из них. В то же время макрос обрабатывает все записи из набора одновременно.
К началу страницы
Выполнение распространенных задач программирования с помощью мастера кнопок
Добавьте в форму кнопку, и мастер кнопок поможет вам приступить к программированию. С помощью мастера вы сможете создать кнопку для выполнения определенной задачи. В файле Access (ACCDB) мастер создает макрос, внедренный в свойство OnClick этой кнопки. В MDB- или ADP-файле мастер создает код VBA, так как в этих форматах не поддерживаются внедренные макросы. В любом случае вы можете затем изменить или дополнить макрос или код VBA в соответствии со своими потребностями.
-
В области навигации щелкните правой кнопкой мыши форму, в которую нужно добавить кнопку, и выберите пункт Конструктор.
-
На вкладке Конструктор щелкните стрелку вниз, чтобы открыть коллекцию Элементы управления, и убедитесь в том, что пункт Использовать мастера выделен.
-
На вкладке Конструктор в коллекции Элементы управления щелкните элемент Кнопка.
-
На бланке формы щелкните там, где нужно поместить кнопку.
Откроется мастер кнопок.
-
На первой странице мастера в списке Категории щелкните каждую категорию, чтобы посмотреть, какие действия можно запрограммировать для кнопки. В списке Действия выберите нужное действие, а затем нажмите кнопку Далее.
-
Выберите параметр Текст или Рисунок в зависимости от того, что нужно отобразить на кнопке.
-
Если вы хотите отобразить текст, то можете изменить содержимое поля рядом с параметром Текст.
-
Если вам нужен рисунок, мастер предложит изображение в соответствующем списке. Если вы хотите выбрать другой рисунок, установите флажок Показать все рисунки, чтобы отобразить список всех доступных в Access изображений для кнопок, или нажмите кнопку Обзор, чтобы выбрать рисунок, сохраненный в отдельном файле.
Нажмите кнопку Далее.
-
-
Введите понятное имя для кнопки. Это необязательный шаг, и это имя не отображается на кнопке. Тем не менее рекомендуем указать понятное имя, чтобы было легко отличить эту кнопку от других позже (например, при настройке последовательности табуляции для элементов управления формы). Например, если кнопка закрывает форму, можно назвать ее cmdClose или CommandClose.
-
Нажмите кнопку Готово.
Кнопка будет размещена в форме.
-
Если вы хотите просмотреть программный код, созданный мастером, можно сделать следующее:
-
Если окно свойств не отображается, нажмите клавишу F4.
-
В окне свойств откройте вкладку События.
-
В окне свойства «По щелчку» нажмите кнопку «Построить»
.
Откроется конструктор макросов, в котором будет показан макрос, созданный мастером. При желании макрос можно изменить (дополнительные сведения о редактировании макросов см. в разделе Макросы). Когда вы закончите, на вкладке Конструктор в группе Закрыть нажмите Закрыть, чтобы закрыть конструктор макросов. Если будет предложено сохранить изменения и обновить свойство, нажмите Да, чтобы сделать это, или Нет, чтобы отказаться.
-
-
На вкладке Конструктор в группе Режимы нажмите кнопку Режим и выберите пункт Режим формы. Нажмите новую кнопку, чтобы проверить, правильно ли она работает.
К началу страницы
Макросы
Макрос — это инструмент, позволяющий автоматизировать задачи и добавлять функции в формы, отчеты и элементы управления. Например, если добавить в форму кнопку, то можно связать ее свойство события OnClick с макросом и включить в него команды, которые должны выполняться при нажатии этой кнопки.
Макросы Access можно рассматривать как упрощенный язык программирования, код на котором создается в виде списка необходимых действий. Создавая макрос, вы выбираете каждую макрокоманду из раскрывающегося списка, а затем вводите для нее необходимую информацию. С помощью макросов можно добавлять функции в формы, отчеты и элементы управления без необходимости писать код в модуле VBA. В макросах доступно подмножество команд VBA, и большинство людей считают, что создать макрос легче, чем написать код VBA.
Создать макрос можно с помощью конструктора макросов, который показан на этом рисунке:
Вот как можно открыть конструктор макросов:
-
на вкладке Создание в группе Макросы и код нажмите кнопку Макрос.
К началу страницы
Код VBA
Как и макросы, код VBA можно использовать в Access для автоматизации и добавления функций. Вы можете расширить возможности VBA за счет элементов управления сторонних поставщиков, а также создать собственные функции и процедуры для конкретных целей.
Самый быстрый способ приступить к написанию программного кода VBA — создать макрос Access, а затем преобразовать его в код VBA. Инструкции см. в разделе Преобразование макросов в код VBA. В этом случае будет создан модуль VBA, который выполняет те же операции, которые определены в макросе. Кроме того, откроется редактор Visual Basic, так что вы сможете приступить к редактированию процедуры. При работе в редакторе Visual Basic можно щелкнуть интересующее вас ключевое слово и нажать клавишу F1, чтобы открыть справку разработчика Access и ознакомиться с соответствующей статьей. Затем вы можете продолжить изучение справки разработчика Access и узнать о новых командах, которые пригодятся для ваших задач.
К началу страницы
Преобразование макросов в код VBA
В Access можно автоматически преобразовать макросы в модули VBA или модули классов. Вы можете преобразовать макросы, прикрепленные к форме или отчету, независимо от того, внедрены они или являются отдельными объектами. Кроме того, можно преобразовать глобальные макросы, которые не прикреплены к конкретной форме или отчету.
Примечание: Веб-базы данных поддерживают код Visual Basic для приложений (VBA), но его невозможно запустить, когда такая база данных работает в браузере. Чтобы выполнить код VBA, который содержится в веб-базе данных, ее необходимо открыть в Access. Для задач, связанных с программированием, в веб-базах данных следует использовать макросы Access.
Преобразование макросов, прикрепленных к форме или отчету
Этот процесс преобразует в VBA все макросы, на которые ссылается форма, отчет или любой из их элементов управления (либо которые внедрены в форму, отчет или элемент управления), а затем добавляет код VBA в модуль класса формы или отчета. Модуль класса становится частью формы или отчета и сохраняется при их перемещении или копировании.
-
В области навигации щелкните форму или отчет правой кнопкой мыши и выберите пункт Конструктор.
-
На вкладке Конструктор в группе Сервис нажмите Преобразовать макросы формы или Преобразовать макросы отчета.
-
В диалоговом окне Преобразование макросов формы или Преобразование макросов отчета укажите, нужно ли добавить к создаваемым функциям код обработки ошибок. Кроме того, если в макросах есть комментарии, укажите, нужно ли добавлять их в функции. Нажмите кнопку Преобразовать.
Если модуль класса для формы или отчета не существует, access создаст его и добавит в модуль процедуру для каждого макроса, связанного с формой или отчетом. Кроме того, Access изменяет свойства событий формы или отчета таким образом, чтобы они запускали новые процедуры VBA вместо макроса.
-
Чтобы просмотреть и изменить код VBA, сделайте следующее:
-
Форма или отчет должны быть по-прежнему открыты в режиме конструктора. Если окно свойств не отображается, нажмите клавишу F4.
-
На вкладке «События» окна свойств щелкните любое поле свойства, в которое будет отображаться [Процедура мероприятия],и нажмите кнопку сборки
. Чтобы просмотреть свойства событий для определенного элемента управления, щелкните его, чтобы выбрать. Чтобы просмотреть свойства событий для всей формы или отчета, в верхней части окна свойств выберите в раскрывающемся списке пункт Форма или Отчет.
Откроется редактор Visual Basic с процедурой обработки событий в соответствующем модуле класса. Чтобы просмотреть другие процедуры, которые хранятся в этом модуле класса, прокрутите содержимое вверх или вниз.
-
Преобразование глобальных макросов
-
В области навигации щелкните правой кнопкой мыши макрос, который нужно преобразовать, и выберите пункт Конструктор.
-
На вкладке Конструктор в группе Сервис щелкните Преобразовать макросы.
-
В диалоговом окне Преобразование макроса установите нужные флажки и нажмите кнопку Преобразовать.
Макрос будет преобразован, и откроется редактор Visual Basic.
-
Чтобы просмотреть и изменить код VBA, сделайте следующее:
-
В редакторе Visual Basic, если область Project Explorer (Окно проекта) не отображается, в меню View (Вид) выберите пункт Project Explorer.
-
Разверните дерево под именем базы данных, в которой вы работаете.
-
В разделе Модули дважды щелкните модуль Преобразованный макрос — <имя макроса>.
Модуль откроется в редакторе Visual Basic.
-
Прикрепление функции VBA к свойству события
При преобразовании глобального макроса в VBA код VBA помещается в стандартный модуль. В отличие от модуля класса, стандартный модуль не является частью формы или отчета. Скорее всего, вам будет необходимо связать функцию со свойством события в форме, отчете или окнах, чтобы код запускается точно в нужное время и в нужном месте. Для этого можно скопировать код VBA в модуль класса и связать его со свойством события или сделать специальный звонок из свойства события в стандартный модуль с помощью следующей процедуры:
-
В редакторе Visual Basic посмотрите, как называется функция. Например, если преобразовать макрос с именем MyMacro, функции будет присвоено имя MyMacro().
-
Закройте редактор Visual Basic.
-
В области навигации щелкните правой кнопкой мыши форму или отчет, который нужно связать с функцией, и выберите в контекстном меню пункт Конструктор.
-
Щелкните элемент управления или раздел, с которым вы хотите связать функцию.
-
Если окно свойств не отображается, нажмите клавишу F4.
-
В окне свойств на вкладке События щелкните поле свойства события, с которым нужно связать функцию.
-
В поле свойства введите знак равенства (=), а затем — имя функции (например, =MyMacro(). Не забудьте ввести скобки.
-
Сохраните форму или отчет, нажав на панели быстрого доступа кнопку Сохранить.
-
В области навигации дважды щелкните форму или отчет и проверьте, правильно ли работает код.
Вы ознакомились с основными действиями для добавления кода VBA в базу данных. В этой статье содержатся только общие сведения о том, как приступить к работе, но существует множество справочников и ресурсов в Интернете, с помощью которых вы сможете усовершенствовать свои навыки программирования.
К началу страницы
EDIT:
Per Michael Dillon’s answer, SaveAsText does save the commands in a macro without having to go through converting to VBA. I don’t know what happened when I tested that, but it didn’t produce useful text in the resulting file.
So, I learned something new today!
ORIGINAL POST:
To expand the question, I wondered if there was a way to retrieve the contents of a macro from code, and it doesn’t appear that there is (at least not in A2003, which is what I’m running).
There are two collections through which you can access stored Macros:
CurrentDB.Containers("Scripts").Documents
CurrentProject.AllMacros
The properties that Intellisense identifies for the two collections are rather different, because the collections are of different types. The first (i.e., traditional, pre-A2000 way) is via a documents collection, and the methods/properties/members of all documents are the same, i.e., not specific to Macros.
Likewise, the All… collections of CurrentProject return collections where the individual items are of type Access Object. The result is that Intellisense gives you methods/properties/members that may not exist for the particular document/object.
So far as I can tell, there is no way to programatically retrieve the contents of a macro.
This would stand to reason, as macros aren’t of much use to anyone who would have the capability of writing code to examine them programatically.
But if you just want to evaluate what the macros do, one alternative would be to convert them to VBA, which can be done programmatically thus:
Dim varItem As Variant
Dim strMacroName As String
For Each varItem In CurrentProject.AllMacros
strMacroName = varItem.Name
'Debug.Print strMacroName
DoCmd.SelectObject acMacro, strMacroName, True
DoCmd.RunCommand acCmdConvertMacrosToVisualBasic
Application.SaveAsText acModule, "Converted Macro- " & strMacroName, _
CurrentProject.Path & "" & "Converted Macro- " & strMacroName & ".txt"
Next varItem
Then you could use the resulting text files for whatever you needed to do.
Note that this has to be run interactively in Access because it uses DoCmd.RunCommand, and you have to click OK for each macro — tedious for databases with lots of macros, but not too onerous for a normal app, which shouldn’t have more than a handful of macros.
<html>
<meta http-equiv=Content-Type content=»text/html; charset=windows-1251″>
<pre>
————c:tempmmРегистрация.a8m——————
OrderBy =»[абоненты].[Серийный Номер Sim-Kart] DESC, [абоненты].[Абонентский номер MSIDN],»» [абоненты].[Имя]»
RecordSource =»абоненты»
Caption =»Регистрация»
DatasheetFontName =»Calibri»
<h3>Name =»ЗаголовокФормы»</h3>
<h3>Name =»Кнопка27″</h3>
Caption =»Добавить Договор МегаФон»
Action =»OnError»
Argument =»0″
Action =»GoToRecord»
Argument =»-1″
Argument =»»
Argument =»5″
Condition =»[MacroError]`>0″
Action =»MsgBox»
Argument =»=[MacroError].[Description]»
Argument =»-1″
Argument =»0″
Comment =»_AXL:`?xml version=»1.0″ encoding=»UTF-16″ standalone=»no»?>1512`UserI»»nterfaceMacro For=»Кнопка27″ xmlns=»http://schemas.microsoft.com/office/acces»»sservices/2009/11/application»>`Statements>`Action Name=»OnError»/>`Action Na»»me=»GoToRecord»>`Argument Name=»
Comment =»_AXL:»Record»>New`/Argument>`/Action>`ConditionalBlock>`If>`Condition>[MacroEr»»ror]<>0`/Condition>`Statements>`Action Name=»MessageBox»>`Argument Name=»»»Message»>=[MacroError].[Description]`/Argument>`/Action>`/Statements>`/If>`/C»»onditionalBlock>`/S»
Comment =»_AXL:tatements>`/UserInterfaceMacro>»
<h3>Name =»ОбластьДанных»</h3>
<h3>Name =»НаборВкладок3″</h3>
<h3>Name =»Вкладка28″</h3>
<h3>Name =»Рисунок30″</h3>
Picture =»News_33485_4.jpg»
ColumnInfo =»»»;»»;»»;»»;»10″;»510″»
<h3>Name =»ПолеСоСписком31″</h3>
RowSourceType =»Table/Query»
RowSource =»SELECT [абоненты].[Код], [абоненты].[Лицевой счет] FROM абоненты; «
ColumnWidths =»0;1440″
BaseInfo =»»SELECT [абоненты].[Код], [абоненты].[Лицевой счет] FROM абоненты; «;»»ы»;»»;»Код»;»Лицевой счет»;»PrimaryKey»»
Action =»SearchForRecord»
Argument =»-1″
Argument =»»
Argument =»2″
Argument =»=»[Код] = » & Str(Nz(Screen.ActiveControl,0))»
Comment =»_AXL:`?xml version=»1.0″ encoding=»UTF-16″ standalone=»no»?>»nterfaceMacro For=»ПолеСоСписком31″ xmlns=»http://schemas.microsoft.»e/accessservices/2009/11/application»>`Statements>`Action Name=»Searc»d»>`Argument Name=»WhereCondit»
Comment =»_AXL:ion»>=»[Код] = » & Str(Nz(Screen.ActiveControl,0))`/Ar»n>`/Statements>`/UserInterfaceMacro>»
<h3>Name =»Поиск по лицевому счету :_подпись»</h3>
Caption =»Поиск по лицевому счету :»
EventProcPrefix =»Поиск_по_лицевому_счету___подпись»
ColumnInfo =»»»;»»;»»;»»;»»;»»;»10″;»510″»
<h3>Name =»ПолеСоСписком33″</h3>
RowSourceType =»Table/Query»
RowSource =»SELECT [абоненты].[Код], [абоненты].[Фамилия], [абоненты].[Имя] FROM або
ColumnWidths =»0;1440;1440″
BaseInfo =»»SELECT [абоненты].[Код], [абоненты].[Фамилия], [абоненты].[Имя] FROM аб» «;»абоненты»;»»;»Код»;»Фамилия»;»PrimaryKey»»
Action =»SearchForRecord»
Argument =»-1″
Argument =»»
Argument =»2″
Argument =»=»[Код] = » & Str(Nz(Screen.ActiveControl,0))»
Comment =»_AXL:`?xml version=»1.0″ encoding=»UTF-16″ standalone=»no»?>»nterfaceMacro For=»ПолеСоСписком33″ xmlns=»http://schemas.microsoft.»e/accessservices/2009/11/application»>`Statements>`Action Name=»Searc»d»>`Argument Name=»WhereCondit»
Comment =»_AXL:ion»>=»[Код] = » & Str(Nz(Screen.ActiveControl,0))`/Ar»n>`/Statements>`/UserInterfaceMacro>»
<h3>Name =»Поиск по ФИ_подпись»</h3>
Caption =»Поиск по ФИ»
EventProcPrefix =»Поиск_по_ФИ_подпись»
ColumnInfo =»»»;»»;»»;»»;»10″;»510″»
<h3>Name =»ПолеСоСписком35″</h3>
RowSourceType =»Table/Query»
RowSource =»SELECT [абоненты].[Код], [абоненты].[Номер сотового] FROM абоненты; «
ColumnWidths =»0;1440″
BaseInfo =»»SELECT [абоненты].[Код], [абоненты].[Номер сотового] FROM абоненты; «;»нты»;»»;»Код»;»Номер сотового»;»PrimaryKey»»
Action =»SearchForRecord»
Argument =»-1″
Argument =»»
Argument =»2″
Argument =»=»[Код] = » & Str(Nz(Screen.ActiveControl,0))»
Comment =»_AXL:`?xml version=»1.0″ encoding=»UTF-16″ standalone=»no»?>»nterfaceMacro For=»ПолеСоСписком35″ xmlns=»http://schemas.microsoft.»e/accessservices/2009/11/application»>`Statements>`Action Name=»Searc»d»>`Argument Name=»WhereCondit»
Comment =»_AXL:ion»>=»[Код] = » & Str(Nz(Screen.ActiveControl,0))`/Ar»n>`/Statements>`/UserInterfaceMacro>»
<h3>Name =»Поиск по номеру сотового_подпись»</h3>
Caption =»Поиск по номеру сотового»
EventProcPrefix =»Поиск_по_номеру_сотового_подпись»
<h3>Name =»Кнопка37″</h3>
Caption =»Открыть БД абонентов»
Action =»OpenForm»
Argument =»1254″
Argument =»0″
Argument =»»
Argument =»»
Argument =»-1″
Argument =»0″
Comment =»_AXL:`?xml version=»1.0″ encoding=»UTF-16″ standalone=»no»?>»nterfaceMacro For=»Кнопка37″ xmlns=»http://schemas.microsoft.com/off»sservices/2009/11/application»>`Statements>`Action Name=»OpenForm»>`»Name=»FormName»>1254`/Argument>»
Comment =»_AXL:`/Action>`/Statements>`/UserInterfaceMacro>»
<h3>Name =»Кнопка38″</h3>
Caption =»Замена СИМ КАРТЫ»
Action =»OpenForm»
Argument =»=ChrW(1047) & ChrW(1072) & ChrW(1084) & ChrW(1077) & ChrW(1085) &»hrW(32) & ChrW(1057) & ChrW(1080) & ChrW(1084) & ChrW(32) & ChrW(1082)»72) & ChrW(1088) & ChrW(1090) & ChrW(1099)»
Argument =»0″
Argument =»»
Argument =»=»[Лицевой счет]=» & «‘» & [Лицевой счет] & «‘»»
Argument =»-1″
Argument =»0″
Comment =»_AXL:`?xml version=»1.0″ encoding=»UTF-16″ standalone=»no»?>»nterfaceMacro For=»Кнопка38″ xmlns=»http://schemas.microsoft.com/off»sservices/2009/11/application»>`Statements>`Action Name=»OpenForm»>`»Name=»FormName»>=ChrW(1047) &am»
Comment =»_AXL; ChrW(1072) & ChrW(1084) & ChrW(1077) & ChrW(10″(1072) & ChrW(32) & ChrW(1057) & ChrW(1080) & ChrW(1084″hrW(32) & ChrW(1082) & ChrW(1072) & ChrW(1088) & ChrW(1″; ChrW(1099)`»
Comment =»_AXL:/Argument>`Argument Name=»WhereCondition»>=»[Лицевой счет]» & [Лицевой счет] & «‘»`/Argument>`/Action>`/Statements>`/Use»eMacro>»
<h3>Name =»Договор»</h3>
<h3>Name =»Код»</h3>
ControlSource =»Код»
<h3>Name =»Надпись6″</h3>
Caption =»Код:»
<h3>Name =»Лицевой счет»</h3>
ControlSource =»Лицевой счет»
EventProcPrefix =»Лицевой_счет»
<h3>Name =»Надпись7″</h3>
Caption =»Лицевой счет:»
<h3>Name =»Фамилия»</h3>
ControlSource =»Фамилия»
<h3>Name =»Надпись8″</h3>
Caption =»Фамилия:»
<h3>Name =»Имя»</h3>
ControlSource =»Имя»
<h3>Name =»Надпись9″</h3>
Caption =»Имя:»
<h3>Name =»Отчество»</h3>
ControlSource =»Отчество»
<h3>Name =»Надпись10″</h3>
Caption =»Отчество:»
<h3>Name =»Год рождение»</h3>
ControlSource =»Год рождение»
EventProcPrefix =»Год_рождение»
<h3>Name =»Надпись11″</h3>
Caption =»Год рождение:»
<h3>Name =»Место прописки»</h3>
ControlSource =»Место прописки»
EventProcPrefix =»Место_прописки»
<h3>Name =»Надпись12″</h3>
Caption =»Место прописки:»
<h3>Name =»Номер сотового»</h3>
ControlSource =»Номер сотового»
EventProcPrefix =»Номер_сотового»
<h3>Name =»Надпись13″</h3>
Caption =»Номер сотового:»
<h3>Name =»Дата заключение договора»</h3>
ControlSource =»Дата заключение договора»
EventProcPrefix =»Дата_заключение_договора»
<h3>Name =»Надпись14″</h3>
Caption =»Дата заключение договора:»
<h3>Name =»Статус абонента:»</h3>
ControlSource =»Статус абонента:»
RowSourceType =»Value List»
RowSource =»»Активный»;»Не активный»;»Заблокированный»;»Не работает»;»более»яцев не обслуживается»;»недавно подключенный «»
ColumnWidths =»1440″
EventProcPrefix =»Статус_абонента_»
<h3>Name =»Надпись15″</h3>
Caption =»Статус абонента::»
<h3>Name =»Текущий тарифный план»</h3>
ControlSource =»Текущий тарифный план»
RowSourceType =»Value List»
RowSource =»»Время напролет»;»родной особенный»;»родной»;»нарасхват»;»смеша»общительный»;»проще простого»;»лучшие друзья»;»твое время»;»экстра»;»»инифон»;»стационар»;»ммс камера»;» мегафон логин лайт»;»мой регион»;»»ой регио плюс»;»теплый прием»;»мегафон логин комфорт»;»мегафон логин стан»арт»;»мегафон логин»;»мегафон логин лайт»;»нарасхват»;»единый»;»мобил»ный»;»единый»;»визит»;»друзья»;»Корпаративная сим-карта-саратова»;»Ко»паративная карта СГТУ»;»Корпаративный моу сош № 1″;»переходи на Нуль»»
ColumnWidths =»1440″
EventProcPrefix =»Текущий_тарифный_план»
<h3>Name =»Надпись16″</h3>
Caption =»Текущий тарифный план:»
<h3>Name =»Баланс»</h3>
ControlSource =»Баланс»
<h3>Name =»Надпись17″</h3>
Caption =»Баланс:»
<h3>Name =»Удостоверение личности»</h3>
ControlSource =»Удостоверение личности»
RowSourceType =»Value List»
RowSource =»»паспорт»;»виза»»
ColumnWidths =»1440″
EventProcPrefix =»Удостоверение_личности»
<h3>Name =»Надпись18″</h3>
Caption =»Удостоверение личности:»
<h3>Name =»Серия паспорта»</h3>
ControlSource =»Серия паспорта»
EventProcPrefix =»Серия_паспорта»
<h3>Name =»Надпись19″</h3>
Caption =»Серия паспорта:»
<h3>Name =»Номер паспорта»</h3>
ControlSource =»Номер паспорта»
EventProcPrefix =»Номер_паспорта»
<h3>Name =»Надпись20″</h3>
Caption =»Номер паспорта:»
<h3>Name =»Кем и Когда выдан»</h3>
ControlSource =»Кем и Когда выдан»
EventProcPrefix =»Кем_и_Когда_выдан»
<h3>Name =»Надпись21″</h3>
Caption =»Кем и Когда выдан:»
<h3>Name =»ICC SIM карты»</h3>
ControlSource =»ICC SIM карты»
EventProcPrefix =»ICC_SIM__карты»
<h3>Name =»Надпись22″</h3>
Caption =»ICC SIM карты:»
<h3>Name =»Кодовое Слово»</h3>
ControlSource =»Кодовое Слово»
EventProcPrefix =»Кодовое_Слово»
<h3>Name =»Надпись23″</h3>
Caption =»Кодовое Слово:»
<h3>Name =»Абонентский номер MSIDN»</h3>
ControlSource =»Абонентский номер MSIDN»
EventProcPrefix =»Абонентский_номер_MSIDN»
<h3>Name =»Надпись24″</h3>
Caption =»Абонентский номер MSIDN:»
<h3>Name =»Серийный Номер Sim-Kart»</h3>
ControlSource =»Серийный Номер Sim-Kart»
EventProcPrefix =»Серийный_Номер_Sim_Kart»
<h3>Name =»Надпись25″</h3>
Caption =»Серийный Номер Sim-Kart:»
<h3>Name =»№ Договора»</h3>
ControlSource =»№ Договора»
EventProcPrefix =»№_Договора»
<h3>Name =»Надпись26″</h3>
Caption =»№ Договора:»
<h3>Name =»Вкладка39″</h3>
<h3>Name =»Кнопка47″</h3>
Caption =»Открыть форму»
Action =»OpenForm»
Argument =»1254″
Argument =»0″
Argument =»»
Argument =»=»[Лицевой счет]=» &»‘» &[Лицевой счет] & «‘»»
Argument =»-1″
Argument =»0″
Comment =»_AXL:`?xml version=»1.0″ encoding=»UTF-16″ standalone=»no»?>»nterfaceMacro For=»Кнопка47″ xmlns=»http://schemas.microsoft.com/off»sservices/2009/11/application»>`Statements>`Action Name=»OpenForm»>`»Name=»FormName»>1254`/Argument>»
Comment =»_AXL:`Argument Name=»WhereCondition»>=»[Лицевой счет]=» &»цевой счет] & «‘»`/Argument>`/Action>`/Statements>`/UserInterface
<h3>Name =»Кнопка48″</h3>
Caption =»Открыть форму СМС»
Action =»OpenForm»
Argument =»=ChrW(1057) & ChrW(1052) & ChrW(1057)»
Argument =»0″
Argument =»»
Argument =»=»[Лицевой счет]=» &»‘» &[Лицевой счет] & «‘»»
Argument =»-1″
Argument =»0″
Comment =»_AXL:`?xml version=»1.0″ encoding=»UTF-16″ standalone=»no»?>»nterfaceMacro For=»Кнопка48″ xmlns=»http://schemas.microsoft.com/off»sservices/2009/11/application»>`Statements>`Action Name=»OpenForm»>`»Name=»FormName»>=ChrW(1057) &am»
Comment =»_AXL; ChrW(1052) & ChrW(1057)`/Argument>`Argument Name=»Whe»=»[Лицевой счет]=» &»‘» &[Лицевой счет] & «‘»`/Argum»ion>`/Statements>`/UserInterfaceMacro>»
<h3>Name =»Кнопка53″</h3>
Caption =»Разрушить договор с абонентом «
FontName =»Sitka Small»
Action =»OnError»
Argument =»0″
Action =»GoToControl»
Argument =»=[Screen].[PreviousControl].[Name]»
Action =»ClearMacroError»
Condition =»Not [Form].[NewRecord]»
Action =»RunCommand»
Argument =»223″
Condition =»[Form].[NewRecord] And Not [Form].[Dirty]»
Action =»Beep»
Condition =»[Form].[NewRecord] And [Form].[Dirty]»
Action =»RunCommand»
Argument =»292″
Condition =»[MacroError]`>0″
Action =»MsgBox»
Argument =»=[MacroError].[Description]»
Argument =»-1″
Argument =»0″
Comment =»_AXL:`?xml version=»1.0″ encoding=»UTF-16″ standalone=»no»?>»nterfaceMacro For=»Кнопка53″ xmlns=»http://schemas.microsoft.com/off»sservices/2009/11/application»>`Statements>`Action Name=»OnError»/>`»me=»GoToControl»>`Argument Name»
Comment =»_AXL:=»ControlName»>=[Screen].[PreviousControl].[Name]`/Argument»ion Name=»ClearMacroError»/>`ConditionalBlock>`If>`Condition>Not [For»cord]`/Condition>`Statements>`Action Name=»DeleteRecord»/>`/Statement»ConditionalBlock>`C»
Comment =»_AXL:onditionalBlock>`If>`Condition>[Form].[NewRecord] And Not [Fo»ondition>`Statements>`Action Name=»Beep»/>`/Statements>`/If>`/Conditi»>`ConditionalBlock>`If>`Condition>[Form].[NewRecord] And [Form].[Dirty]»on>`Statements>»
Comment =»_AXL:`Action Name=»UndoRecord»/>`/Statements>`/If>`/ConditionalB»nalBlock>`If>`Condition>[MacroError]<>0`/Condition>`Statements>`A»e=»MessageBox»>`Argument Name=»Message»>=[MacroError].[Description]»t>`/Action>`/Statem»
Comment =»_AXL:ents>`/If>`/ConditionalBlock>`/Statements>`/UserInterfaceMacr
<h3>Name =»Кнопка54″</h3>
Caption =»Открыть форму»
Action =»OpenForm»
Argument =»=ChrW(1076) & ChrW(1086) & ChrW(1082) & ChrW(1091) & ChrW(1084)»
Argument =»0″
Argument =»»
Argument =»=»[л/с]=» &»‘» &[Лицевой счет] & «‘»»
Argument =»-1″
Argument =»0″
Comment =»_AXL:`?xml version=»1.0″ encoding=»UTF-16″ standalone=»no»?>»nterfaceMacro For=»Кнопка54″ xmlns=»http://schemas.microsoft.com/off»sservices/2009/11/application»>`Statements>`Action Name=»OpenForm»>`»Name=»FormName»>=ChrW(1076) &am»
Comment =»_AXL; ChrW(1086) & ChrW(1082) & ChrW(1091) & ChrW(10″`Argument Name=»WhereCondition»>=»[л/с]=» &»‘» &[Лицевой»mp; «‘»`/Argument>`/Action>`/Statements>`/UserInterfaceMacro>»
<h3>Name =»ПримечаниеФормы»</h3>
Посмотреть запрос в Access в виде SQL
|
От: |
RendeRR |
nothing |
Дата: | 02.03.05 08:04 | ||
Оценка: |
Есть готовая база MS Access, в ней готовые запросы, можно ли средствами .NET посмотреть эти запросы в виде SQL, или выполнить их. Если можно, примерчик на VB. Спасибо.
Не знаешь как правильно – делай, как знаешь…
Re: Посмотреть запрос в Access в виде SQL
|
От: |
Stewe |
|
Дата: | 02.03.05 09:00 | ||
Оценка: |
Здравствуйте, RendeRR, Вы писали:
RRR>Есть готовая база MS Access, в ней готовые запросы, можно ли средствами .NET посмотреть эти запросы в виде SQL, или выполнить их. Если можно, примерчик на VB. Спасибо.
Это легко сделать, подключив ADOX.
Re[2]: Посмотреть запрос в Access в виде SQL
|
От: |
RendeRR |
nothing |
Дата: | 02.03.05 09:37 | ||
Оценка: |
Здравствуйте, Stewe, Вы писали:
S>Здравствуйте, RendeRR, Вы писали:
RRR>>Есть готовая база MS Access, в ней готовые запросы, можно ли средствами .NET посмотреть эти запросы в виде SQL, или выполнить их. Если можно, примерчик на VB. Спасибо.
S>Это легко сделать, подключив ADOX.
Если можно примерчик, хотя бы куда копать…
Не знаешь как правильно – делай, как знаешь…
Re[3]: Посмотреть запрос в Access в виде SQL
|
От: |
Stewe |
|
Дата: | 02.03.05 09:55 | ||
Оценка: |
2 (1) |
Здравствуйте, RendeRR, Вы писали:
RRR>Если можно примерчик, хотя бы куда копать…
Там есть объект Catalog, у него коллекция Views (это и есть сохраненные запросы). У View есть св-во Command — это объект ADODB.Command, у которого есть св-во CommandText. Это оно и есть.
ЗЫ: Написал по памяти, так что за правильность названия свойств не ручаюсь.
Re[3]: Посмотреть запрос в Access в виде SQL
|
От: |
Peter Fleischer |
www.informtoools.de |
Дата: | 02.03.05 10:22 | ||
Оценка: |
3 (1) |
«RendeRR» <33367@users.rsdn.ru> schrieb im Newsbeitrag news:1051623@news.rsdn.ru…
> Здравствуйте, Stewe, Вы писали:
>
> S>Здравствуйте, RendeRR, Вы писали:
>
> RRR>>Есть готовая база MS Access, в ней готовые запросы, можно ли средствами .NET посмотреть эти запросы в виде SQL, или выполнить их. Если можно, примерчик на VB. Спасибо.
> S>Это легко сделать, подключив ADOX.
>
> Если можно примерчик, хотя бы куда копать…
Напр. так:
Private Sub Button8_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button8.Click
cnn = New ADODB.Connection
With cnn
.ConnectionString = "provider=microsoft.jet.oledb.4.0;"
.ConnectionString &= "data source=" & dbName.Text & ";"
Try
.Open()
Catch ex As Exception
MsgBox("Connection: Open-Error" & vbCrLf & ex.Message)
End Try
End With
cat = New ADOX.Catalog
cat.ActiveConnection = cnn
' database
With cat
For Each v As ADOX.View In .Views
Trace.Write("---- " & v.Name & vbNewLine)
Trace.WriteLine(CType(v.Command, ADODB.Command).CommandText)
Next
End With
End Sub
Peter
Posted via RSDN NNTP Server 1.9
Re[4]: Посмотреть запрос в Access в виде SQL
|
От: |
nzeemin |
http://nzeemin.livejournal.com/ |
Дата: | 02.03.05 10:36 | ||
Оценка: |
Здравствуйте, Stewe, Вы писали:
S>Там есть объект Catalog, у него коллекция Views (это и есть сохраненные запросы). У View есть св-во Command — это объект ADODB.Command, у которого есть св-во CommandText. Это оно и есть.
Все правильно. НО! кроме Views есть еще и Procedures — это типа хранимые процедуры, но из опыта могу сказать что Access не видит разницу между Views и Procedures (или я не прав?..), так что можно считать что в данном случае это одно и то же с разным названием.
Re[4]: Посмотреть запрос в Access в виде SQL
|
От: |
RendeRR |
nothing |
Дата: | 03.03.05 08:27 | ||
Оценка: |
Здравствуйте, Peter Fleischer, Вы писали:
PF>»RendeRR» <33367@users.rsdn.ru> schrieb im Newsbeitrag news:1051623@news.rsdn.ru…
>> Здравствуйте, Stewe, Вы писали:
>>
>> S>Здравствуйте, RendeRR, Вы писали:
>>
>> RRR>>Есть готовая база MS Access, в ней готовые запросы, можно ли средствами .NET посмотреть эти запросы в виде SQL, или выполнить их. Если можно, примерчик на VB. Спасибо.
>> S>Это легко сделать, подключив ADOX.
>>
>> Если можно примерчик, хотя бы куда копать…
PF>Напр. так:
PF>
PF> Private Sub Button8_Click(ByVal sender As System.Object, _
PF> ByVal e As System.EventArgs) Handles Button8.Click
PF> cnn = New ADODB.Connection
PF> With cnn
PF> .ConnectionString = "provider=microsoft.jet.oledb.4.0;"
PF> .ConnectionString &= "data source=" & dbName.Text & ";"
PF> Try
PF> .Open()
PF> Catch ex As Exception
PF> MsgBox("Connection: Open-Error" & vbCrLf & ex.Message)
PF> End Try
PF> End With
PF> cat = New ADOX.Catalog
PF> cat.ActiveConnection = cnn
PF> ' database
PF> With cat
PF> For Each v As ADOX.View In .Views
PF> Trace.Write("---- " & v.Name & vbNewLine)
PF> Trace.WriteLine(CType(v.Command, ADODB.Command).CommandText)
PF> Next
PF> End With
PF> End Sub
PF>
PF>Peter
Спасибо за код — работает отлично, но он возвращает только запросы на выборку и то, только те, где не требуется вводить значения параметров. Как быть с остальными? И ещё вопрос: в результате запроса имеем таблицу, можно ли узнать заголовки полей этой таблицы? Ещё раз спасибо.
Не знаешь как правильно – делай, как знаешь…
- Переместить
- Удалить
- Выделить ветку
Пока на собственное сообщение не было ответов, его можно удалить.
Вы можете использовать недокументированные функции Application.SaveAsText и Application.LoadFromText. SaveAsText работает с модулями, формами и отчетами; а когда вы сохраняете форму или отчет в виде текста, код модуля будет отображаться в нижней части полученного текстового файла.
Вы могли бы написать процедуру, которая сохраняла бы все объекты, не относящиеся к данным, в вашем Access MDB (или ADP) в виде текста, помещала его в модуль и просто сохраняла этот модуль в разрабатываемой версии вашей базы данных Access. Затем вы можете запустить процедуру и проверить сброшенный код в VSS.
Вероятно, он не такой элегантный, как метод Visual SourceSafe, описанный Митчем Уитом, но это зависит от того, что вы хотите делать с исходным кодом. Я обычно использую несколько версий MDB и использую этот метод для сравнения исходного кода между ними, используя инструменты сравнения, такие как WinMerge. Это хорошо для портирования функциональности между ветвями разработки.
Это также хорошо для поиска всех ссылок на поля или элементы управления, где бы они ни находились. Просмотр объектов Access в виде текстовых определений упрощает поиск этих ссылок.