1. Добавить отношение к базе данных :
Dim Au_Tit As Relation ‘ объект [AAnA21] Relation
Set Au_Tit =Db.CreateRelation(“Authors_Titles”) ‘ создается объект [AAnA22] Relation с помощью метода .CreateRelation
Au_Tit.Table=“Authors” ‘ Устанавливаются свойства объекта [AAnA23] Relation
Au_Tit.ForegnTable=“ Titles”
2. Создать поле, которое в отношении будет определять общее поле первичного/внешнего ключа:
DimTempField As Field
Set TempField = Au_Tit.CreateField(“Au_Id”) ‘ создается связующее поле [AAnA24] с помощью метода CreateField
TempField. ForegnName =“Au_Id” ‘ Устанавливаются свойства объекта Field [AAnA25]
3. Добавить объект Fields к объекту Relation, а объект Relation к объекту Database [AAnA26] с помощью метода Append:
Au_Tit.Fields.Append TempField
Db.Relations..Append Au_Tit
Связывание таблиц внешних баз данных[AAnA27]
Кроме определения новых таблиц можно присоединять таблицы из любой поддерживаемой внешней базы данных [AAnA28] или из другой базы данных[AAnA29] Jet. При связывании таблицы информация соединения сохраняется во внутренней базе данных Jet, и соединение будет устанавливаться автоматически всякий раз при открытии этой базы данных. Сами же данные остаются во внешней базе данных[AAnA30] .
Процедура связывания таблицы внешней базы данных подобна определению и созданию новой внутренней таблицы, за исключением того, что при создании объекта TableDef необходимо определить свойства SourceTableName и Connect. Кроме того, для этой таблицы нельзя связывания создавать или добавлять новые объекты Field и Index.
Для связывания внешней таблицы с базой данных необходимо:
Создать для связываемой таблицы новый объект TableDef, используя метод CreateTableDef объекта Database. Назначить таблице новое имя (свойство Name). Например, чтобы присоединить таблицу Сustomers из базы данных Stocks.mdb к базе данных Biblio.mdb,можно записать:
Set NewTd=DB.CreateTableDef(“Customers”) ‘ Предполагается , что база данных Biblio.mdb открыта методом OpenDatabase и ей назначена переменная DB.
2. Установить свойства SourceTableName и Connect объекта TableDef:
NewTd. SourceTableName=“Customers”
NewTd. Connect=“;DATABASE=C:\Access\Stocks.mdb;”
3.Добавить новый объект TableDef к базе данных:
DB.TableDefs.Append NewTd
Модификация базы данных
Процедуры изменения базы данных подобны ее созданию. Используются те же методы Create и Append.
1. Для добавления таблицы к базе данных необходимо добавить новый объект TableDef к существующей коллекции TableDefs. Например:
Dim DB As DataBase [AAnA31]
Dim NewTd As TableDef ‘ Создать новый объект TableDef
Dim NewFld As Field ‘Создать новый объект Field
Set Db=DBEngine. Workspace(0).OpenDatabase(“Biblio.mdb”)
Set NewTd=DB.CreateTableDef(“NewTable”)
Set NewFld= NewTd.CreateField(“NewField”,dbInteger)
NewTd.Fields.Append NewFld ‘добавить поле к таблице
DB.TableDefs.Append NewTd ‘добавить таблицу к базе данных
Db.Close ‘Закрыть базу данных
1. Для добавления поля к таблице необходимо добавить новый объект Field к существующей коллекции Fields
Dim DB As DataBase [AAnA32]
Dim Td As TableDef
Dim Fld As Field ‘Создать новый объект Field
Set Db=DBEngine. Workspace(0).OpenDatabase(“C:\Biblio.mdb”)[AAnA33]
Set Td=DB. TableDefs(“Authors”)
Set Fld= Td.CreateField(“NewField1”,dbText,30) ‘Создать первое новое поле
Td.Fields.Append Fld ‘добавить поле к коллекции Fields
Set Fld= Td.CreateField(“NewField2”,dbText,20) ‘Создать второе новое поле с помощью той же переменной
Td.Fields.Append Fld ‘добавить еще один объект к коллекции Fields
Db.Close ‘Закрыть базу данных
2. Для добавления таблицы к базе данных необходимо добавить новый объект TableDef к существующей коллекции TableDefs. Например:
Dim DB As DataBase [AAnA34]
Dim NewTd As TableDef ‘ Создать новый объект TableDef
Dim NewFld As Field ‘Создать новый объект Field
Set Db=DBEngine. Workspace(0).OpenDatabase(“C:\Biblio.mdb”)
Set NewTd=DB.CreateTableDef(“NewTable”)
Set NewFld= NewTd.CreateField(“NewField”,dbInteger)
NewTd.Fields.Append NewFld ‘добавить поле к таблице
DB.TableDefs.Append NewTd ‘добавить таблицу к базе данных
Db.Close ‘Закрыть базу данных
3. Для добавления индекса к таблице необходимо добавить новый объект Index к существующей коллекции Indexes . Например:
Dim DB As DataBase, Td As TableDef, NewIdx As Index ,NewFld As Field [AAnA35]
Set Db=DBEngine. Workspace(0).OpenDatabase(“C:\Biblio.mdb”)
Set Td=DB. TableDefs(“Authors”)
Set NewIdx =Td.CreateIndex(“Address[AAnA36] _Index”)
NewIdx.Unique=False
Set NewFld= NewIdx.CreateField(“Address”,)
NewIdx.Unique=False
NewIdx.Fields.Append NewFld ‘добавить поле к объекту Index
Td. Indexes.Append NewIdx ‘добавить объект Index к TableDef
Db.Close ‘Закрыть базу данных
4. Для удаления таблицы используется метод Delete коллекции TableDefs. Этот метод удаляет из таблицы все поля, индексы и данные, содержащиеся внутри таблицы. Например:
Db.TableDefs.Delete “Authors”
5. Для удаления поля (объекта Field) используется метод Delete объекта TableDef.
Для удаления индексированного поля необходимо сначала удалить индекс, а также созданные посредством этого индекса объекты Relation. После этого можно будет удалить объект Field или объект TableDef, который является частью отношения.
6. Для удаления индекса используется метод Delete коллекции TableDefs.
Например:
Db.TableDefs(“Authors”). Indexes.Delete “Address[AAnA37] _Index” ‘ Из коллекции Indexes в таблице Authors удаляется индекс “Address[AAnA38] _Index”.
Нельзя удалять объект Index, который формирует объект Relation.
7. Для изменения поля необходимо создать новый объект TableDef, который отражает требуемые изменения в полях, и затем переместить данные в новую таблицу, удалив старую.
Модификацию базы данных можно также проводить с помощью специальных запросов SQL.
Работа с записями базы данных
Работа с записями базы данных(добавление, удаление, модификация, поиск, сортировка) осуществляются DAO посредством объектов Recordset. Объект Recordset представляет записи исходной таблицы или записи, получаемые в результате выполнения запроса. Существуют 5 типов объектов Recordset:
* Объект Recordset типа table работает с локальной таблицей базы данных или вешней базы данных, созданной MS Jet. Этот объект можно индексировать, используя индекс, созданный для исходной таблицы, что намного ускоряет сортировку и поиск по сравнению с другими типами объектов Recordset.
* Объект Recordset типа dynaset (динамический набор) создается для локальных или связанных таблиц или с результатами запросов. Фактически, это набор ссылок на записи одной или более таблиц. С помощью dynaset можно получать и модифицировать данные более, чем одной таблицы, включая связанные таблицы из других баз данных. Набор dynaset и его исходные таблицы модифицируют друг друга. Dynaset - наиболее гибкий и мощный тип набора записей, хотя поиск в них работает не так быстро, как в случае table.
* Объект Recordset типа snapshot (моментальный снимок) содержит фиксированную копию данных в состоянии на момент создания snapshot. Snapshot, созданный на базе источника данных MS Jet, не может быть обновлен. Snapshot требует меньших затрат обработки, чем dynaset или table, и запросы в них выполняются быстрее.
* Объект Recordset типа forward- only (листаемый снимок, только вперед), обеспечивает подмножество функций snapshot. Он предоставляет меньше всего возможностей, но зато самое высокое быстродействие. Он не является обновляемым, и он позволяет перемещаться по записям только в прямом направлении.
* Объект Recordset типа dynamic - результирующий набор запроса одной или нескольких исходных таблиц, в котором можно добавлять, изменять или удалять записи.
Выбор того или иного типа набора записей зависит от того, какие функции необходимо выполнить, нужно ли изменять или просто просматривать данные. Обычно Объект Recordset типа table почти всегда обеспечивает наивысшую эффективность.
Создание перемещений RecordSet
Для этого используется метод OpenRecordSet
Set rstNew = dbs.OpenRecordSet(“Customers”, dbs.Open RecordSet),
где rstNew - переменная, dbs.OpenRecordSet(“Customers”, dbs.Open RecordSet) - ссылка на объект, возвращаемый методом OpenRecordSet.
Этот метод доступен не толко для объекта Database, но и Connection, TableDef, QueryDef и существующих наборов RecordSet.
Set rstNew = qdf.OpenRecordSet
Например, создается объект RecordSet из сохраненного в текущей БД запроса.
Dim dbs As Database, Rst As RecordSet
Set dbs=OpenDatabase (“Nwind.mdb”
[ Set rst = dbs.OpenRecordSet (“Сохраняет_Запрос”)]
или если сохранение запроса не существует
Dim strQuerySQL As String
Set dbs=OpenDatabase (...
StrQuerySQL=“Select * From Products”_ & “Order by ProductName”
Set rst=dbs.OpenRecordSet (strQuerySQL)
Перемещение по набору записей
Методы MoveFirst, MoveLast, MoveNext, MovePrevious - перемещает указатель.
Move [n]
Переделы набора записей определяется свойствами BOF и EOF, количество записей свойством - RecordCount.
Найти определенную запись в наборе можно с помощью метода Seek (для Table) и Find (dynaset, snapshop): FindFirst, FindLast, FindNext, FindPrevious.
Например
rstOrderDetails.Find “Order ID= ” & rstOrders.[Order ID] - для первой записи в Orders найти .... запись в OrderDetails
rst Suppliers.Index=“CompanyName”
rst Suppliers.Seek “=” str CompanyNAme
If rst Suppliers. NoMatch Then ...
(используется текущий индекс таблицы, определенной свойством Index). Свойство NoMatch используется для проверки найденной записи, критерий поиска.
После создания объекта RecordSet типа table или dynaset в переменной можно удавлять или добавлять, модифицировать новые записи (Update, Delete, AddNew).
.... модификации намного эффективнее с помощью запросов SQL.
Dim dbs As DataBAse, qdfChangeTitles As QueryDef
Set dbs = Open Database (‘ Nwind.mbb)
Set qdfChangeTitles=dbs.Create QueryDef (“ “)
qdf ChangeTitles.SQL=“Update Employers” & “Where Title = ‘Бухг’”
После извлечения записи можно обращаться к ее отдельным полям через коллекцию Fields объекта RecordSet по его свойству Name (имя столбца в таблицк)
rst Employers.Fields (“LastName”)
или rstEm.LastName
или rstEm.Fields(0) - индексом в коллеции
Типы данных объекта Field: dbChar, bdByte, dbDouble, dbInteger, dbSingle, dbLong, dbText.
При работе с данными Field используется его свойство Value.
Sub Change Title( )
rstEmployces.LastName.Value=strName
Dim dbsSales As Database
Dim rstEmp As RecordSet, fldTitle As Field
Dim wspCurrent As WorkSpace
Set wspCurrent As WorkSpace
Set wspCurrent=dbEngine WorkSpace(0)
Set dbsSales=OpenDatabnase (“Nwind.mdb”
Set rstEmp=dbsSales.Open RecordSet(“Employes”, dbOpenTable)
Set fldTitle=rstEmp.Fields(“Title”)
rst Emp.MoveFirst
Do Until rstEmp.EOF