![]() |
Пример выполнения практической работы 31.Date: 2015-10-07; view: 502. Практическая работа 31. Программное создание базы данных и работа с ней: создание файла, базы данных, двух таблиц, отношения, заполнение таблиц в диалоговом режиме, создание SQL-запроса и вывод результатов Задание: создать программным способом: 1. файл базы данных, 2. две таблицы , ключевые поля таблиц, 3. отношение, 4. возможность ввода записей таблиц в диалоговом режиме, 5. SQL-запрос для получения информации о данных клиентов (номер, фамилия, разряд, коэффициент тарифной сетки), 6. реализовать вывод результатов запроса. 7.
Рис. 4.28.Таблица 2 (Kunde), режим конструктора (имя поля, тип данных) · Cоздать форму Form1, и меню,
Здесь: o Form o Table o Table o RecordSet o RecordSet o Relation - создать отношение, o Query - CreateQuery - создать запрос, o Query - OpenQuery - открыть запрос o Exit - завершить выполнение проекта, o создать Стандартный модуль и 5 форм,
o ввести код формы Form1, пояснения даны под комментариями: o Private Sub mnuCreate_Click() ' создать файл базы данных o Load FrmCreate o FrmCreate.Show o End Sub o o Private Sub mnuCreateQuery_Click() ' создать запрос o Call Query o End Sub o o Private Sub mnuExit_Click() ' завершение работы проекта o Call DatabaseClose o Unload Form1 o MsgBox ("Завершение работы проекта!?"), vbCritical + vbOKOnly o End o End Sub o o Private Sub mnuOpen_Click() ' выбрать файл для его o ' последующего открытия o Load FrmOpen o FrmOpen.Show o End Sub o o Private Sub mnuOpenQuery_Click() ' открыть запрос o Load FrmQuery o FrmQuery.Show o End Sub o o Private Sub mnuRecordSetTab1_Click() ' создать записи в o ' таблице 1 o Load FrmTarif o FrmTarif.Show o End Sub o o Private Sub mnuRecordSetTab2_Click()' создать записи в o ' таблице 2 o Load FrmKunde o FrmKunde.Show o End Sub o o Private Sub mnuRelation_Click() ' создать отношение o Call Relation o End Sub o o Private Sub mnuTab1_Click() ' создать структуру таблицы 1 o Call Tab1 o End Sub o o Private Sub mnuTab2_Click() ' создать структуру таблицы 2 o Call Tab2 End Sub o ввести код модуля, данный ниже; пояснения даны под комментариями: o (General) (Declarations) o Public NewDB As Database o Public NewWS As Workspace o Public NewTbl As TableDef1 o Public NewTbl As TableDef2 o Public idx1 As Index o Public idx2 As Index o Public NewRel As Relation o Public sqlquery As QueryDef o Public NewRec As Recordset o o Public Sub Tab1() ' создание таблицы 1 o Set NewTbl1 = NewDB.CreateTableDef("Tarif") o o Set f1 = NewTbl1.CreateField() o Set f2 = NewTbl1.CreateField() o o f1.Name = "Razrjad" ' имя поля o f1.Type = dbInteger ' тип данных o f2.Name = "Koeffcnt" o f2.Type = dbSingle o NewTbl1.Fields.Append f1 o NewTbl1.Fields.Append f2 o o Set idx1 = NewTbl1.CreateIndex("TarifIndex") ' создание индекса o Idx1.Primary = True o Set f1 = idx1.CreateField("Razrjad") ' создание индексного поля o ' (используется метод объета idx) o idx1.Fields.Append f1 o NewTbl1.Indexes.Append idx1 o NewDB.TableDefs.Append NewTbl1 o o MsgBox ("Создана структура таблицы Tarif"), vbInformation +_ o vbOKOnly o End Sub o o Public Sub Tab2() ' создание таблицы 2 o Set NewTbl2 = NewDB.CreateTableDef("Kunde") o o ' создание полей таблицы o Set f3 = NewTbl2.CreateField() o Set f4 = NewTbl2.CreateField() o Set f6 = NewTbl2.CreateField() o o ' присваивание имeн полям и типов данным o f3.Name = "Tabnumber" o f3.Type = dbInteger o f4.Name = "Nam" o f4.Type = dbText o f4.Size = 20 o f4.AllowZeroLength = True o ' здесь позднее (см. Public Sub Relation) будет создано o ' зависимое поле (f5) отношения o f6.Name = "Razrjad" o f6.Type = dbInteger o o ' добавление полей в таблицу o NewTbl2.Fields.Append f3 o NewTbl2.Fields.Append f4 o NewTbl2.Fields.Append f6 o o ' создание индекса o Set idx2 = NewTbl2.CreateIndex("KundeIndex") o ' указание того, что главный индекс существует o idx2.Primary = True o ' создание индексного поля o Set f3 = idx2.CreateField("Razrjad") o Idx2.Fields.Append f3 o NewTbl2.Indexes.Append idx2 o NewDB.TableDefs.Append NewTbl2 o o MsgBox ("Создана структура таблицы Kunde !"), vbOKOnly +_ o vbInformation o End Sub o o Public Sub Relation() ' создание отношения o Set NewRel = NewDB.CreateRelation("RelKunde") ' используется o ' метод Создать отношение объекта База данных o ' указание главной таблицы в отношении o NewRel.Table = "Tarif" o ' указание зависимой таблицы в отношении o NewRel.ForeignTable = "Kunde" o o ' создание зависимого поля в отношении o Set f5 = NewRel.CreateField("Razrjad") o ' указание имени зависмого поля, по которому o ' строится отношение o f5.ForeignName = "Razrjad" o NewRel.Fields.Append f5 o ' добавление отношения в базу данных o NewDB.Relations.Append NewRel o o MsgBox ("Отношение создано!"), vbOKOnly + vbInformation o End Sub o o Public Sub Query() ' создание запроса o Set sqlquery = NewDB.CreateQueryDef("sql1") o o ' указание того, что требуется выбрать в запросе, o ' из каких таблиц провести выбор и формулировка o ' cоответствующих условий o o sqlquery.SQL = "SELECT Kunde.Tabnumber, Kunde.Nam, _ o Kunde.Razrjad, Tarif.Razrjad, Tarif.Koeffcnt _ o FROM Tarif INNER JOIN Kunde ON Tarif.Razrjad = Kunde.Razrjad _ o WHERE Kunde.Tabnumber = 2;" o MsgBox (" SQL-запрос введeнi!"), vbOKOnly + vbInformation o End Sub o o Public Sub CreateFile() ' создание файла базы данных o Set NewWS = DBEngine.Workspaces(0) o Set NewDB = NewWS.CreateDatabase(FrmCreate.txtPath.Text,_ dbLangCyrillic) o MsgBox (""Файл в формате mdb создан!"), vbInformation o Unload FrmCreate o End Sub o o Public Sub DatabaseClose() o NewWS.Close o Set NewWC = Nothing o End Sub o o Sub Main() ' начало проекта o resp = MsgBox("Здравствуйте! Программное создание базы_ данных и работа с ней. Выберите ДА или НЕТ!", vbYesNo, " ") o If resp = vbYes Then o MsgBox "Сделайте щелчок на кнопке ОК для продолжения диалога!" o Load Form1 o Form1.Show o End If End Sub o на форме FrmCreate, создать требуемые объекты и ввести код, данный ниже: o
Private Sub Cancel_Click() Unload Me End Sub
Private Sub Create_Click() Call CreateFile End Sub
Private Sub dirDirect_Change() filFile.Path = dirDirect.Path End Sub
Private Sub drvDrive_Change() dirDirect.Path = drvDrive.Drive End Sub
Private Sub Path_Click() ' вывод пути и имени файла в ' поле txtPath If drvDrive.Drive = "a:" Then dirDirect.Path = "a:\" txtPath.Text = dirDirect.Path + filFile.FileName Else txtPath.Text = dirDirect.Path + "\" + filFile.FileName End If End Sub o на форме FrmOpen, создать требуемые объекты и ввести код, данный ниже:
o Private Sub Cancel_Click() o Unload Me o End Sub o o Private Sub Com1_Click() ' пометить требуемый файл и o ' перейти к Form1 o MsgBox ("Файл:" + FrmOpen.txtPath.Text), vbInformation o FrmOpen.Hide o End Sub o o Private Sub dirDirect_Change() o filFile.Path = dirDirect.Path o End Sub o o Private Sub drvDrive_Change() o dirDirect.Path = drvDrive.Drive o End Sub o o Private Sub filFile_Click() o If Right(dirDirect.Path, 1) = "\" Then o txtPath = dirDirect.Path + filFile.FileName o Exit Sub o Else o txtPath.Text = dirDirect.Path + "\" + filFile.FileName o End If o End Sub o на форме FrmTarif, создать требуемые объекты и ввести код, данный ниже: o Private Sub Cancel_Click() ' o Unload Me o End Sub o o Private Sub Com1_Click() ' добавить o ' открывает буфер для очередной записи в таблице o datTarif.Recordset.AddNew o End Sub o o Private Sub Com2_Click() ' обновить o ' сбрасывает содержимое буфера для того, чтобы o ' изменения были зафиксированы в записи o datTarif.UpdateRecord o End Sub o o Private Sub Com3_Click() ' выход o Unload Me o End Sub o o Private Sub Com4_Click() ' удалить o ' уничтожает запись таблицы o datTarif.Recordset.Delete o End Sub o o Private Sub Com5_Click() ' восстановить o ' если изменено содержимое записи, но ещё не обновлено, o ' то восстановится предыдущее значение поля o datTarif.UpdateControls o End Sub o o Private Sub Com6_Click() ' вперёд o datTarif.Recordset.MoveNext o If datTarif.Recordset.EOF Then o MsgBox "Конец таблицы!", vbOKOnly + vbInformation, " " o datTarif.Recordset.MoveLast o End If o End Sub o o Private Sub Com7_Click() ' назад o datTarif.Recordset.MovePrevious o If datTarif.Recordset.BOF Then o MsgBox "Hачало таблицы!", vbOKOnly + vbInformation, " " o datTarif.Recordset.MoveFirst o End If o End Sub o o Private Sub Com8_Click() ' к первой записи o datTarif.Recordset.MoveFirst o End Sub o o Private Sub Com9_Click() ' к последней записи o datTarif.Recordset.MoveLast o End Sub o o Private Sub Exit_Click() ' выход o Unload Me o End Sub o o Private Sub Form_Load() o Set NewDB = Worspaces(0).OpenDatabase(FrmOpen.txtPath.Text) o o ' установка свойств элементов управленя Data и TextBox o datTarif.DatabaseName = FrmOpen.txtPath.Text o datTarif.RecordSource = "Tarif" o o ' txtRazrjad.DataSource = "datTarif" ' можно испоьзовать окно o ' свойств o ' txtKoeffcnt.DataSource = "datTarif" o o txtRazrjad.DataField = "Razrjad" o txtKoeffcnt.DataField = "Koeffcnt" End Sub
o на форме FrmKunde, , создать требуемые объекты и ввести код, данный ниже:
o Private Sub Cancel_Click() o Unload Me o End Sub o o Private Sub Com1_Click() ' добавить o datKunde.Recordset.AddNew o End Sub o o Private Sub Com2_Click() ' обновить o datKunde.UpdateRecord o End Sub o o Private Sub Com3_Click() ' выход o Unload Me o End Sub o o Private Sub Com4_Click() ' удалить o datKunde.Recordset.Delete o End Sub o o Private Sub Com5_Click() ' восстановить o datKunde.UpdateControls o End Sub o o Private Sub Com6_Click() ' вперeд (к следующей записи) o datKunde.Recordset.MoveNext o If datKunde.Recordset.EOF Then o MsgBox "Конец таблицы!", vbOKOnly + vbInformation, " " o datKunde.Recordset.MoveLast o End If o End Sub o o Private Sub Com7_Click() ' назад (к предыдущей записи) o datKunde.Recordset.MovePrevious o If datKunde.Recordset.BOF Then o MsgBox "Начало таблицы!", vbOKOnly + vbInformation, " " o datKunde.Recordset.MoveFirst o End If o End Sub o o Private Sub Com8_Click() ' в начало таблицы o datKunde.Recordset.MoveFirst o End Sub o o Private Sub Com9_Click() ' в конец таблицы o datKunde.Recordset.MoveLast o End Sub o o Private Sub Exit_Click() ' выход o Unload Me o End Sub o o Private Sub Form_Load() o Set NewDB = Worspaces(0).OpenDatabase(FrmOpen.txtPath.Text) o o ' yстановка свойств элементов управления Data иTextBox o datKunde.DatabaseName = FrmOpen.txtPath.Text o datKunde.RecordSource = "Kunde" o o ' txtTabnumber.DataSource = "datKunde" ' можно o ' использовать окно свойств o ' txtNam.DataSource = "datKunde" o ' txtRazrjad.DataSource = "datKunde" o o txtRazrjad.DataField = "Razrjad" o txtNam.DataField = "Nam" o txtTabnumber.DataField = "Tabnumber" End Sub
o на форме FrmQuery, , создать требуемые объекты и ввести код, данный ниже: o Private Sub Cancel_Click() o Unload Me o End Sub o o Private Sub Com1_Click() ' к первой записи o NewRec.MoveFirst o Call showfields o End Sub o o Private Sub Com2_Click() ' к последней записи o NewRec.MoveLast o Call showfields o End Sub o o Private Sub Com3_Click() ' к следующей записи o NewRec.MoveNext o ' если достигнут конец таблицы, то выдаeтся o ' соответствующее сообщение и проводится переход к o ' последней записи o If NewRec.EOF Then o MsgBox "Kонец таблицы!", vbOKOnly + vbInformation, " " o NewRec.MoveLast o End If o Call showfields o End Sub o o Private Sub Com4_Click() ' к предыдущей записи таблицы o NewRec.MovePrevious o ' если достигнуто начало таблицы, то выдаeтся o ' соответствующее сообщение и проводится переход o ' к первой записи o If NewRec.BOF Then o MsgBox "Hачало таблицы!", vbOKOnly + vbInformation, " " o NewRec.MoveFirst o End If o Call showfields o End Sub o o Private Sub Exit_Click() o NewDB.Close o Set NewDB = Nothing o Unload Me o End Sub o o Private Sub Form_Load() o Set NewWS = DBEngine.Workspaces(0) o Set NewDB = NewWS.OpenDatabase(FrmOpen.txtPath.Text) o o ' указатель на набор данных создаeтся с помощью метода o ' Recordset объекта Database. Синтаксис: o ' Set RecordSet = Database.OpenRecordSet ("имя_таблицы или o ' SQL-запроса, из которых берут данные", dbName), здесь o ' dbName - константа, которая определяет тип размещения o ' данных. В основном используется dbname = dbOpenDynaset o ' - размещение данных в виде динамического набора, o ' открывающего полный доступ к таблицам: перемещение, o ' индексирование, редактировние и т.д. o Set NewRec = NewDB.OpenRecordset("sql1", dbOpenDynaset) o Call showfields o End Sub o o Private Sub showfields() o ' используемый синтаксис: NewRec(name), где NewRec - o ' указатель на объект Recordset, name - имя поля o txtTabnumber.Text = NewRec("Tabnumber") o txtName.Text = NewRec("Nam") o txtRazrjad.Text = NewRec("Tarif.Razrjad") o txtKoeffcnt.Text = NewRec("Koeffcnt") End Sub
· стартовать проект, . Последовательность действий пользователя дана на форме Form1 ().На даны результаты запроса (см. также - форма FrmQuery ). На запрос представлен на бланке запроса, на запрос представлен в SQL -форме. Эти данные взяты из файла базы данных (см. регистр Запрос базы данных), · остановить выполнение проекта (). Использовать кнопку Exit формы FrmQuery () и пункт меню Exit первой формы, ·
Рис. 4.38.Запрос на бланке запроса
Лекция 5:
|