Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Плещёв ИП 2010-04-04 doc.doc
Скачиваний:
108
Добавлен:
13.05.2015
Размер:
5.96 Mб
Скачать

Уплотнение базы данных методом CompactDatabase

При удалении записей они перемещаются в специальную “корзину”, и при уплотнении она очищается. Синтаксис метода:

DBEngine.CompactDatabase <старое имя базы>,<новое имя базы> [,<порядок сортировки>][,<тип>][,<пароль>]

Восстановление базы методом RepairDatabase(<имя базы>) произ­во­дится в монопольном режиме. После восстановления реко­мен­дует­ся уплотнить базу.

Копирование набора в двумерный массив реализуется методомGetRows (п. 9.9.5).

9.4.4. Создание базы, таблиц, индексов, связей и запросов

Приведем пример процедур создания базы “Строительство” из трех связанных таблиц “Стройки”, “Населенные пункты”, “Заказчики” (п. 9.1) и запро­са “Стройки по заказчикам”.

Private Sub Command1_Click() ‘создание пустой базы “Строительство“

Dim db As Database, tdf As TableDef, fld As Field, qdf As QueryDef

Dim idx As Index, relnew As Relation, SQLstr As String, I As Integer

On Error GoTo proc_err 'переход на процедуру обработки ошибок

'создание в каталоге приложения (App.Path) пустой базы “Строительство“

Set db=DBEngine.CreateDatabase(App.Path+“\Строительство“, dbLangCyrillic)

For i=db.Relations.Count ‑ 1 To 0 Step -1 'удаление существующих связей

If db.Relations(i).Name = “Заказчики“ Or _

db.Relations(i).Name = “НаселенныеПункты“ Then ‘ связь есть

Set relnew=db.Relations(i):db.Relations.Delete relnew.Name ' удаление ee

EndIf

Next'окончание цикла удаления связей

For i=db.TableDefs.Count-1 To 0 Step -1'удаление существующих таблиц

If db.TableDefs(i).Name = “Стройки“ Or _

db.TableDefs(i).Name = “Заказчики“ _

Or db.TableDefs(i).Name = “Населенные пункты“ Then 'таблица есть

Set tdf = db.TableDefs(i): db.TableDefs.Delete tdf.Name 'удаление таблицы

EndIf‘окончание оператораIf

Next'окончание цикла удаления таблиц

Set tdf = db.CreateTableDef(“Стройки“) 'создание таблицы “Стройки“

Set fld = tdf.CreateField(“NS“, dbText, 50) 'определение поля Ns

tdf.Fields.Appendfld'добавление, ранее определенного, поля в таблицу

Set fld = tdf.CreateField(“Knp“,dbByte) : tdf.Fields.Append fld 'поле Knp

Set fld = tdf.CreateField(“Kz“, dbByte) : tdf.Fields.Append fld 'поле Kz

Set fld = tdf.CreateField(“Dn“, dbDate) : tdf.Fields.Append fld 'поле Dn

Set fld = tdf.CreateField(“Ss“, dbCurrency) : tdf.Fields.Append fld 'поле Ss

Set fld = tdf.CreateField(“Sf“, dbCurrency) : tdf.Fields.Append fld 'поле Sf

Set fld = tdf.CreateField(“M“, dbText, 50) : tdf.Fields.Append fld 'поле M

db.TableDefs.Appendtdf'добавление ранее определенной таблицы в базу

Set idx = tdf.CreateIndex(“indnsknpkz“) 'создание индекса indnsknpkz

idx.Fields.Appendidx.CreateField(“Ns“) 'добавление поляNsв индекс

idx.Fields.Appendidx.CreateField(“Knp“) 'добавление поляKnpв индекс

idx.Fields.Appendidx.CreateField(“Kz“) 'добавление поляKzв индекс

idx.Primary=True' установка признака первичного ключа

tdf.Indexes.Appendidx' добавление ключа в массив ключей таблицы

Set tdf=db.CreateTableDef(“Заказчики“) 'создание таблицы “Заказчики“

Set fld = tdf.CreateField(“Kz“, dbByte): tdf.Fields.Append fld 'поле Kz

Set fld = tdf.CreateField(“Nz“, dbText, 30): tdf.Fields.Append fld 'поле Nz

db.TableDefs.Appendtdf'добавление ранее определенной таблицы в базу

Set idx = tdf.CreateIndex(“indkz“) ' создание индекса “indkz

idx.Fields.Appendidx.CreateField(“Kz“) 'добавление поляKzв индекс

idx.Primary=True' установка признака первичного ключа

tdf.Indexes.Appendidx' добавление ключа в массив ключей таблицы

'установка связи под именем “Заказчики“ между родительской (главной) ‘таблицей “Заказчики“ и дочерней (внешней) таблицей ‘“Стройки“ по полюKzс ‘каскадной корректировкой подчиненных записей

Set relnew = db.CreateRelation(“Заказчики“, _

“Заказчики“, “Стройки“, dbRelationUpdateCascade)

relnew.Fields.Append relnew.CreateField(“Kz“) 'добавление поля Kz в связь

relnew.Fields!kz.ForeignName = “Kz“ 'имя поля связи в таблице “Стройки“

db.Relations.Appendrelnew'добавление связи в массив связей базы

Set tdf = db.CreateTableDef(“Населенные пункты“) 'создание таблицы

Set fld = tdf.CreateField(“Knp“, dbByte): tdf.Fields.Append fld 'поле Knp

Set fld = tdf.CreateField(“Nnp“, dbText, 30): tdf.Fields.Append fld 'поле Nnp

db.TableDefs.Appendtdf'добавление ранее определенной таблицы в базу

Set idx = tdf.CreateIndex(“indknp“): idx.Fields.Append idx.CreateField(“Knp“)

idx.Primary = True: tdf.Indexes.Append idx 'создание первичного индекса

'установка связи под именем “НаселенныеПункты“ между роди­тель­ской ‘(главной) таблицей “НаселенныеПункты“ и дочерней (внешней) таб­ли­цей ‘”Стройки“ по полюKnpс каскадной корректировкой подчинен­ных записей

Set relnew = db.CreateRelation(“НаселенныеПункты“, _

“Населенные пункты“, “Стройки“, dbRelationUpdateCascade)

relnew.Fields.Appendrelnew.CreateField(“Knp“) 'добавлениеKnpв связь

relnew.Fields!knp.ForeignName= “Knp“ 'имя поля связи в таблице

db.Relations.Appendrelnew'добавление связи в массив связей базы

'формирование запроса под именем “Стройки по заказчикам“

For i = 0 To db.QueryDefs.Count - 1 'удаление существующего запроса

Ifdb.QueryDefs(i).Name= “Стройки по заказчикам“Then'запрос уже есть

Setqdf=db.QueryDefs(i):db.QueryDefs.Deleteqdf.Name'удаление его

ExitFor'выход из цикла

EndIf

Next'окончание цикла удаления запросов

SQLstr= “Select*From[Стройки]OrderByKz“' команда запроса

Set qdf= db.CreateQueryDef(“Стройки по заказчикам“, SQLstr) 'запрос

db.Close' закрытие созданной базы

Exit Sub 'выход из процедуры

proc_err: 'блок обработки ошибок

MsgBox(“Описание: “ &Err.Description+ “ Код ошибки: “ & _

Err.Number& “ Источник ошибки: “ &Err.Source) ' вывод сообщения

IfErr.Number= 3204Then'база уже существует и ее открытие далее

Set db=DBEngine.Workspaces(0).OpenDatabase(App.Path+“\Строительство“)

ResumeNext'переход к следующей команде (ошибка игнорируется)

End If

End Sub