Главная страница

Конспект лекций_Администрирование БД. Теоретические основы баз данных


Скачать 0.98 Mb.
НазваниеТеоретические основы баз данных
Дата14.09.2022
Размер0.98 Mb.
Формат файлаdoc
Имя файлаКонспект лекций_Администрирование БД.doc
ТипДокументы
#676796
страница12 из 14
1   ...   6   7   8   9   10   11   12   13   14

Программирование в VBA (Visual Basic for Application)


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

Основные иерархические структуры объектов, используемые в Access:


  1. Модель объектов доступа к данным (Data Access Object – DAO) обеспечивает объект­но-ориентированный интерфейс для работы с ядром базы данных Jet. А именно – доступ и обработку данных в базах данных, управление базами данных и их объектами с помощью свойств и методов, а также создание новых объектов и изменение структуры базы данных.

  2. Модель объектов ActiveX Data Objects – ADO используется для работы с формами, отчётами и модулями выполняющегося приложения Access, объектами других приложений, их свойствами и методами, а также для управления текущим сеансом работы в Access и создания интерфейса приложения.


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

Типы переменных:


Синтаксис. Dim переменная As тип
Тип данных Boolean (Bool) может принимать два значения — True (истина) и False (ложь). Этот тип данных присваивается переменным, задействованным в качестве флажков для обозначе­ния состояния объектов. Также этот тип присваивается функциям, которые возвращают значение, сооб­щающее об успешном или неудачном выполнении какого-то действия. Численная переменная, не равная нулю, считается True; равная нулю — False. При конвертировании переменной типа Boolean в численную переменную возвращается значение -1, если переменная типа Boolean имела значение True, и 0— если False.
Переменная типа дата/время представляет собой 64-разрядное число и может принимать значения даты от 1 января 100 года до 31 декабря 9999 года или значения времени от 0:00:00 до 23:59:59. Значения даты можно обозначать с помощью символа #, например #20/10/96#. Для преобразования даты используется функция Cdate:

dtDate = CDate("20 October 1995")

Функция Day (число) после передачи ей даты возвращает число в диапазоне 1—31. Функция Month (месяц) выделяет из даты значение месяца— от 1 до 12. Функция Year (год) возвращает из переданной даты год.
Значение Null.

MyVar = ""

MyCheck = IsNull(MyVar) ' Returns False.
MyVar = Null

MyCheck = IsNull(MyVar) ' Returns True.

Массивы


Dim MyArray(10, 10,10) As Integer

Dim sngMulti(1 To 5, 1 To 10) As Single

Dim sngArray() As Single ‘создан динамический массив

Dim varData(3) As Variant

varData(0) = "Claudia Bendel"

varData(1) = "4242 Maple Blvd"

varData(2) = 38

varData(3) = Format("06-09-1952", "General Date")
Другой способ объявления массивов:

Dim A As Variant

A = Array(10,20,30)

Присвоение массива переменной типа Variant позволяет изменять размерность массива.

Объекты


Dim SmithBillBD As Object
Visual Basic поддерживает объект Collection (коллекция или семейство элементов), который служит для хранения элементов любых типов данных. Вы можете использовать семейство точно так же, как массив – для хранения целых чисел, цепочек символов и других типов данных. Объект Collection содержит методы для включения, удаления и контроля элементов в семействе.
Dim AppObjects As New Col lection
Чтобы добавить AppObject в семейство, воспользуйтесь методом Add для объекта Collection. В объекте семейства предусмотрен метод Item, который служит для адресации элементов семейства. Чтобы удалить элемент из семейства, используйте метод Remove.

Доступность


Ключевые слова Private и Public определяют доступность переменных и процедур. Использование Dim для объявления переменной на уровне модуля означает, что переменная доступна всем процедурам в этом модуле, но недоступна вне его. Замена Dim ключевым словом Private не отразится на доступности переменной; переменная будет дос­тупна только процедурам модуля. Однако если заменить Dim на ключевое слово Public, то переменная бу­дет доступна для всех модулей приложения. Процедуры и функции, которые добавляются в модуль, являются Publiс по умолчанию; они доступны всем модулям приложения. События процедур в модулях Form и Report являются Private по умолчанию, поэтому они доступны только модулю, в котором содержатся.

Обработка ошибок


Чтобы установить системное прерывание по обнаружению ошибки, поместите оператор On Error туда, где вы хотите активизировать это системное прерывание.

Sub CausesAnError()

' Direct procedure flow.

On Error GoTo ErrorHandler

' Raise division by zero error.

Err.Raise 11

Exit Sub
ErrorHandler:

' Display error information.

MsgBox "Error number " & Err.Number & ": " & Err.Description

EndSub

Другая форма оператора On Error Resume Next передает управление оператору, следующему за оператором с ошибкой. Этот оператор приводится ниже.
Publ ic Function MyFunctionO

On Error Resume Next

If Err Then

обработка

End If

Exit Function
Resume возвращает управление программой оператору, вызвавшему ошибку, и пытается выполнить его снова. Если это приводит к повторной ошибке, то программа обработки ошибок сработает снова. Если вы используете оператор Resume, то лучше применить счетчик возникновения ошибки. По достижении неко­торого предела счетчика следует выйти из процедуры. Resume Next передает управление оператору, следующему за оператором, приведшим к ошибке. Вы мо­жете использовать этот прием только в том случае, если уверены, что ошибка — не критическая и может быть проигнорирована, или если ваш обработчик ошибок откорректирует ситуацию, вызвавшую ошибку.

Ветвления и циклы


For counter = start To end [Step step]
[
statements]
[Exit For]


[statements]

Next [counter]

Do [{While | Until} condition]
[
statements]
[Exit Do]
[
statements]

Loop

While condition

[statements]

Wend


Do
[
statements]
[Exit Do]
[
statements]

Loop [{While | Until} condition]

For Each element In group

[statements]

[Exit For]

[statements]

Next [element]
For Each oGeneric In Forms

If oGeneric.Name = "Форма 3" Then Exit For

EndIf

Next oGeneric

With object
[
statements]

End With
With MyLabel

.Height = 20

.Width = 200

.Caption = "This is MyLabel"

End With


If condition Then [statements] [Else statements]

либо

If condition Then

[statements]

[ElseIf condition-n Then

[statements] ...

[Else

[statements]]

End If


Choose(index, choice-1[, choice-2, ... [, choice-n]])
Function GetChoice(Ind As Integer)

GetChoice = Choose(Ind, "Speedy", "United", "Federal")

End Function


IIf(expr, truepart, falsepart)
CheckIt = IIf(TestMe>1000, "Large", "Small")

Select Case expression_переменная

[Case expression-n_значение

[statements-n]] ...

[Case Else

[elsestatements]]
End Select

Switch(expr-1, value-1[, expr-2, value-2 … [, expr-n,value-n]])

Matchup = Switch(CityName = "London", "English", CityName = "Rome", "Italian", CityName = "Paris", "French")



Параметры процедур и функций.


Объявление:

Sub CalcFee(AcctTotal As Currency, ContractMonths As Integer)

Вызов:

CalcFeeA, 24
Вы можете использовать ключевое слово Optional в определении процедуры или функции для указания того, что данный аргумент является необязательным. Необязательные (Optional) аргументы должны иметь тип Variant.
Sub CalcFee(AcctTotal As Currency, Optional ContractMonths As Variant)
Чтобы создать процедуру для работы с массивом аргументов, в объявлении процедуры используйте аргумент ParamArray, причем не определяя размера массива.
Public Function Calc_Order(ParamArray Сosts As Variant) As Currency

Простейшие программы на VBA


Обработка событий с помощью методов объекта DoCmd.

DoCmd.OpenForm “Студенты”

Другие методы этой команды:



Beep


Close – закрывает указанное окно Microsoft Access или текущее окно (по умолчанию).


FindNext – находит следующую запись, удовлетворяющую условиям, указанным в предыдущей макрокоманде «НайтиЗапись» (FindRecord) или в диалоговом окне Поиск в поле, открывающемся командой Найти из меню Правка.



FindRecord – находит данные, удовлетворяющие условиям поиска, указанным с помощью аргументов этой макрокоманды. Данные могут быть в текущей записи, в следующей, предыдущей или в самой первой записи.



GoToControl – переводит фокус на указанное поле или элемент управления в текущей записи открытой формы, формы в режиме таблицы, таблицы в режиме таблицы или запроса в режиме таблицы



GoToRecord – делает указанную запись текущей записью открытой таблицы, формы или результирующего набора записей запроса.



Maximize


Minimize


OpenDiagram – используется в проекте Microsoft Access для открытия схемы базы данных в режиме конструктора


OpenQuery


OpenReport


OpenTable


Quit


RunSQL




Задание свойств форм, отчетов и элементов управления в Visual Basic


Объекты Form, Report и Control являются объектами Microsoft Access. Свойства таких объектов можно задавать в процедурах Sub, Function или в процедурах обработки событий. Можно также задавать свойства разделов форм и отчетов.
Чтобы задать свойство формы или отчета

Укажите ссылку на конкретную форму или отчет в семействе Forms или Reports, за которой следуют имя свойства и его значение. Например, следующая программная строка задает для свойства Вывод на экран (Visible) формы «Customers» значение True (–1):

Forms!Customers.Visible = True

Свойства формы и отчета можно также задавать из модуля объекта с помощью свойства объекта Me. Программы, использующие свойство Me, выполняются быстрее, чем программы, использующие полные имена объектов. Например, следующая программная строка в модуле формы «Customers» определяет свойство Источник записей (RecordSource) формы «Customers» через инструкцию SQL, возвращающую все записи, в которых значение поля «CompanyName» начинается с «A»:

Me!RecordSource = "SELECT * FROM Customers " _

& "WHERE CompanyName Like 'A*'"
Чтобы задать свойство элемента управления

Укажите ссылку на элемент управления в семействе Controls объекта Form или Report, в котором он находится. На семейство Controls можно ссылаться явно или неявно, но программа выполняется быстрее при использовании неявных ссылок. В следующих примерах задается свойство Вывод на экран (Visible) поля «CustomerID» в форме «Customers»:

' Faster method.

Me!CustomerID.Visible = True

' Slower method.

Forms!Customers.Controls!CustomerID.Visible = True

Быстрее всего можно задать свойство элемента управления из модуля объекта с помощью свойства объекта Me. Например, следующая программа изменяет значение свойства Вывод на экран (Visible) поля «CustomerID» в форме «Customers»:

With Me!CustomerID

.Visible = Not .Visible

End With
Чтобы задать свойство раздела формы или отчета

Укажите ссылку на форму или отчет в семействе Forms или Reports, за которой следует свойство Section и целое значение или константа, определяющая раздел. В следующем примере задается значение False для свойства Вывод на экран (Visible) верхнего колонтитула формы «Customers»:

Forms!Customers.Section(3).Visible = False

Me!Section(acPageHeader).Visible = False

Примечания

  • В справке по предметному указателю можно найти следующие сведения о каждом свойстве:

    • допускается ли задание этого свойства в программе Visual Basic;

    • режимы, в которых можно задавать свойство. Не все свойства можно задавать во всех режимах. Например, свойство формы Тип границы (BorderStyle) можно задавать только в режиме конструктора формы;

    • какие значения следует использовать для задания свойства. Часто значения некоторых свойств в программе Visual Basic, отличаются от значений, выбираемых в окне свойств. Например, если значение свойства выбирается из списка, необходимо использовать это значение или его числовой эквивалент.

  • Чтобы задать в программе Visual Basic стандартные значения свойств для элементов управления, следует использовать метод DefaultControl.

DAO.


Объекты доступа к данным DAO (Data Access Objects) позволяют управлять структурой базы данных и содержащимися в ней данными из программ Visual Basic. Многие объекты ADO соответствуют объектам, которые можно видеть в базе данных — например, объект TableDef соответствует таблице Microsoft Access. Объект Field соответствует полю в таблице.

Большая часть свойств объектов DAO является свойствами DAO. Эти свойства определены в ядре базы данных Microsoft Jet и задаются тем же способом, как и в других приложениях, включающих ядро Jet. Некоторые свойства, которые можно задать для объектов DAO, определяются в Microsoft Access, а затем автоматически распознаются ядром базы данных Jet. Способ задания свойств объектов DAO зависит от того, где определено свойство, в ядре базы данных Jet или в Microsoft Access.

`Общение с JET через объекты данных Access.




DBEngine

Является ядром Jet. Этот верхний уровень объекта содержит все объекты DАО. Это объект, на который нужно ссылаться для сжатия и восстановления базы дан­ных с помощью программы VBA

Error

Содержит информацию, имеющую отношение к ошибке, которая произошла при работе Jet/DAO. Этот объект — член семейства Errors: список ошибок от самого нижнего до самого верхнего уровня

Workspace

Содержит базы данных, открытые в пользовательском сеансе, а также предлагает методы и свойства для поддержки транзакций открытых БД и для защиты. Является членом семейства Workspaces

Database

Ссылается на базу данных, открытую в соответствующем объекте Workspace

User

Представляет пользователя сеанса в соответствующем объекте Workspace. Сеансы могут проводить одновременно несколько пользователей; эти пользователи определены в семействе Users

Group

Представляет нескольких членов групп и предоставляет им общие возможности.

TableDef

Представляет сохраненное описание локальной или присоединенной таблицы в соответствующем объекте Database

QueryDef

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

RecordSet

Представляет итоговые записи после выполнения запроса или записи таблицы.

Field

Определяет свойства и методы, применимые к одному полю (столбцу), а семейство Fields содержит все объекты Field для соответствующей таблицы, запроса или набора записей

Index

Описывает индекс в соответствующей таблице.

Parameter

QueryDefs должен содержать параметры для определения значений критериев

Relation

Здесь описываются отношения между таблицами, установленные в базе данных

Container

Объекты Container (контейнер) встроены и представляют собой доступные объекты данных, такие как таблицы, отношения и базы данных, а также объекты Access, такие как отчеты, формы и модули. Каждый объект поддерживает защиту хранящейся в нем ин­формации

Document

Представляет требования для типов объектов в соответствующем контейнере. Например, контейнер Access Forms содержит объ­ект Document для каждой формы базы данных. Кроме того, объект Document поддерживает защиту информации того объекта, ко­торый он представляет


Каждый объект в иерархии DAO имеет одно или более свойств, которые описывают его поведение и атрибуты. Каждое из этих свойств само является объектом в семействе Properties родительского объекта. Например, объект TableDef имеет такие свойства, как Name, Updatable и DateCreated. Доступ к свойству Name можно получить следующим образом:

MyTableDef.Name

Кроме того, на свойство Name можно сослаться, используя семейство Properties объекта TableDef:

MyTableDef.Properties("Name")

Использование объекта TableDef


Объект TableDef описывает каждую физически хранящуюся в базе данных таблицу. Объект TableDef описывает поля в физической таблице, идентифицирует индексы таблицы и фиксирует свойства, имеющие отношение к этой таблице.
.RecordCount указывает число записей в таблице. Если в таблице записей нет, то его значение равно нулю. Для присоединенных таблиц значение этого свойства равно -1.
.Attributes указывает на характеристики таблицы. Вы можете установить его, когда строите свою таблицу, но после добавления TableDef к семейству TableDefs свойство может быть только прочитано.

Dim dbsNorthwind As Database

Dim fldLoop As Field

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

With dbsNorthwind

For Each fldLoop In .TableDefs(0).Fields

Debug.Print " " & fldLoop.Name & " = " & fldLoop.Attributes

Next fldLoop

.Close

End With
.CreateField служит для создания нового поля; новое поле содержит номер, характеризующий объект в семействе. После того как поле будет создано, метод Append семейства Fields добавляет его к TableDef.

Dim dbsNorthwind As Database

Dim tdfNew As TableDef

Dim fldLoop As Field
Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set tdfNew = dbsNorthwind.CreateTableDef("NewTableDef")

With tdfNew

.Fields.Append .CreateField("TextField", dbText)

.Fields.Append .CreateField("IntegerField", dbInteger)

.Fields.Append .CreateField("DateField", dbDate)

End With

dbsNorthwind.TableDefs.Append tdfNew

Использование объекта Recordset


Recordset — это объект, который используется для выполнения операций с записями. Семейство Recordsets содержит все открытые объекты Recordset в открытой базе данных. При закрытии объекта Recordset он удаляется из памяти и из семейства Recordsets. Объекты Database, TableDef и QueryDef включает метод OpenRecordset.
Recordset можно открыть, указав в методе OpenRecordset объекта Database название соответствующей таблицы или воспользовавшись методом OpenRecordset объекта TableDef:
Dim dbsNorthwind As Database

Dim rstEmployees As Recordset

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set rstEmployees = dbsNorthwind.OpenRecordset( "Employees", dbOpenDynaset)
После открытия объекта Recordset необходимо определить, какие записи доступны. Если в Recordset нет ни одной записи, то его свойства BOF (Beginning Of File — начало файла) и EOF (End Of File — конец файла) установлены в True. Если EOF установлено в False, то Recordset имеет хотя бы одну запись. Если записи существуют, то при открытии Recordset будет выполнено позиционирование на первой записи.
Используя метод Move, можно построить цикл, обращающийся к каждой следующей записи в объекте Recordset. Метод MoveLast используется для позиционирования к последней записи Recordset. Для перемещения к предыдущей записи используется метод MovePrevious, пока свойство BOF не будет установлено в True. Метод MoveFirst может быть использован для позиционирования к первой записи.
Метод Edit информирует Jet о том, что в текущей записи происходят изменения. При использовании метода Update сделанные изменения вносятся в таблицу.

Для добавления записей используйте метод AddNew. Этот метод применяется в комплексе с методом Edit при добавлении новых записей. Как и в случае с методом Edit, записи будут присоединены к таблице после применения метода Update.

Для удаления текущей записи используйте метод Delete.

После того как обработка объекта Recordset будет завершена, закройте его, воспользовавшись методом Close. Этот метод удаляет объект Recordset из семейства Recordsets и делает объект Recordset недействительным.

Примеры использования методов DAO



Sub Find()
'--------------------------------------------------------
' Поиск записей в таблице "tblPeoples"
' Будем искать записи, у которых в поле LastName
' находиться значение "Иванова"
' и печатать в окне отладки ID_People найденных записей
' и их количество
' Проход по всей таблице.
' ЭТОТ МЕТОД НЕ ЯВЛЯЕТСЯ ОПТИМАЛЬНЫМ!!!
'--------------------------------------------------------
Dim db As Database
Dim rs As Recordset
Dim str As String
Dim lngRecordCount As Long
'Счетчик найденных записей

Set db = CurrentDb
Set rs = db.OpenRecordset("tblPeoples", dbOpenDynaset)
str = ""
lngRecordCount = 0
If rs.RecordCount <> 0 Then
rs.MoveFirst
Do Until rs.EOF
'Если текущая запись удовлетворяет условию...
If rs![LastName] = "Иванова" Then
'Инкримируем счетчик найденных записей
lngRecordCount = lngRecordCount + 1
str = str & rs![ID_People] & ", "
End If
rs.MoveNext
Loop
str = str & vbCrLf & "Всего найдено записей: " & _
lngRecordCount
Else
str = "Таблица ""tblPeoples"" не содержит записей."
End If
Debug.Print str
rs.Close
db.Close
End Sub

Option Compare Database
Option Explicit


Sub Cycle01_1()
'--------------------------------------------------------
' Цикл по записям таблицы "tblPeoples" от начала до конца
'--------------------------------------------------------
'База данных
Dim db As Database
'Набор записей
Dim rs As Recordset
'Строка
Dim str As String
'Количество записей в наборе записей
Dim lngRecordCount As Long
' db - текушая база данных
Set db = CurrentDb

Set rs = db.OpenRecordset("tblPeoples", dbOpenDynaset)
' rs - набор записей на основе таблицы "tblPeoples"
' При инициализации набора записей мы можем точно
' определить, есть ли в этом наборе записи или нет.
' Свойство "RecordCount" набора записей посли его
' инициализации, по идее, должна сождержать количество
' записей набора, однако это не так. Если в наборе есть
' записи это свойство отлично от нуля, но не содержит
' их количество. Для определения количества записей
' необходимо перейти на последнюю запись набора, и после
' этого в свойстве "RecordCount" будет находиться
' количество записей набора.

'Если в наборе rs есть записи...
If rs.RecordCount <> 0 Then
rs.MoveLast
' Переходим на последнюю запись (чтобы "RecordCount"
' содержало верное значение)

lngRecordCount = rs.RecordCount
' Считываем количество записей в переменную

rs.MoveFirst 'Переходим на первую запись набора
' Заполняем текстовую переменную str количеством записей
str = "Количество записей в таблице ""tblPeoples"": " & lngRecordCount & vbCrLf

'Свойство EOF (End Of File) набора записей становиться истинным ПОСЛЕ последней 'записи набора,точно как и свойство BOF (Begin Of File) становиться истинным ПЕРЕД 'первой записью набора.
'Цикл "Пока не кончатся записи в наборе rs"
Do Until rs.EOF
'Добавляем в переменную str имнена полей, их
' значения и символ перевода строки
str = str & "ID_People: " & rs![ID_People] & vbCrLf
str = str & "ID_RecordStatus: " & rs![ID_RecordStatus] & vbCrLf
str = str & "LastName: " & rs![LastName] & vbCrLf
str = str & "FirstName: " & rs![FirstName] & vbCrLf
str = str & "MiddleName: " & rs![MiddleName] & vbCrLf
str = str & "PeopleSex: " & rs![PeopleSex] & vbCrLf
str = str & "BirthDate: " & rs![BirthDate] & vbCrLf
str = str & "------------" & vbCrLf
rs.MoveNext
'Переходим на следующую запись
Loop
'Конец цикла
Else
'Если записей нет...
' Заполняем текстовую переменную str сообщением об
' отсутствии записей
str = "Таблица ""tblPeoples"" не содержит записей."
End If
'Печатаем содержимое переменной str в окне отладки
Debug.Print str
rs.Close
'Закрываем переменную набора записей
db.Close
'Закрываем переменную базы данных
End Sub


Программирование в формах.


Определяя имя для поля, элемента управления или объекта, полезно проверить, не совпадает ли это имя с именем свойства или другого элемента, используемого Microsoft Access; в противном случае иногда могут возникать неверные результаты. Например, при ссылке на значение поля «Name» в таблице «NameInfo» с использованием конструкции NameInfo.Name будет возвращаться значение свойства таблицы Имя (Name), а не значение поля «Name».

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

[NameInfo]![Name]
Пример запроса, созданного как текстовая строка плюс значения текстовых переменных. Запрос выбирает из таблицы «_v2» в таблицу «_v4» те записи, значение поля nn в которых больше нуля и меньше значения переменной целого типа var_numb.

Dim S As String

S = "SELECT * INTO [_v2] FROM [_v4] WHERE (([_v4].nn<=" + Str(var_numb) + _

")and([_v4].nn>0))"

DoCmd.RunSQL S
Классическая фраза, которой приходится завершать функцию, если в результате ваших действий значения некоторых полей в форме должны измениться, а этого почему-то не видно:

Forms![Моя форма].Refresh
Работа с элементом «поле со списком» (Элемент управления на странице доступа к данным, щелчок по кнопке-стрелке которого приводит к раскрытию списка, в котором можно выбрать значение или ввести его прямо в поле с клавиатуры).

Окно свойств для поля со списком, который взят из работающей формы и содержит названия стран. Эти названия берутся из таблицы countries с помощью соответствующего запроса.



Установка исходных данных для поля (текст в строке свойств «источник строк»):

SELECT countries.country, countries.name_rus, countries.currency_rus FROM countries;

При этом из трёх столбцов видимым является только второй.
Установка начального значения для поля со списком из программы:

Private Sub Form_Open(Cancel As Integer)

var_country.SetFocus

var_country.SelText = "Россия"

End Sub
Реакция на событие «После обновления»:

Private Sub var_country_AfterUpdate()

info_1.Caption = var_country.Column(1)

Forms![Основная форма].Refresh

End Sub
Работа с элементом «Диаграмма»

Microsoft Graph позволяет изменить расположение компонентов диаграммы (таких как легенда), формат надписей, цвета и узоры, а также масштабы по осям. Чтобы изменить данные, используемые для создания диаграммы, следует изменить базовую таблицу или другой источник записей, либо запрос, указанный в свойстве Источник строк (RowSource).
В режиме конструктора формы или отчета создаваемая диаграмма отображает примеры данных. Чтобы увидеть реальные текущие данные, переключитесь в режим формы или предварительного просмотра либо закройте форму или отчет, а затем снова откройте их.

1   ...   6   7   8   9   10   11   12   13   14


написать администратору сайта