Студопедия
rus | ua | other

Home Random lecture






Пример выполнения практической работы 31.


Date: 2015-10-07; view: 502.


Практическая работа 31. Программное создание базы данных и работа с ней: создание файла, базы данных, двух таблиц, отношения, заполнение таблиц в диалоговом режиме, создание SQL-запроса и вывод результатов

Задание: создать программным способом:

1. файл базы данных,

2. две таблицы , ключевые поля таблиц,

3. отношение,

4. возможность ввода записей таблиц в диалоговом режиме,

5. SQL-запрос для получения информации о данных клиентов (номер, фамилия, разряд, коэффициент тарифной сетки),

6. реализовать вывод результатов запроса.

7.


Рис. 4.26.Таблица 1(Таrif)

 


Рис. 4.27.Таблица 2 (Kunde)

 

 

Рис. 4.28.Таблица 2 (Kunde), режим конструктора (имя поля, тип данных)

· Cоздать форму Form1, и меню,


Рис. 4.29.Форма Form1, внешний вид. Создано меню и указана последовательность выполнения задания

 

Таблица 4.13. Меню
File Table Record Set Relation Query Exit
Create Tab1 Record Set Table1   Create  
        Query  
Open Tab1 Record Set Table2   Open  
        Query  

Здесь:

o Form Create () - создать файл базы данных,

o Table Tab1 - создать структуру таблицы 1,

o Table Tab2 - создать структуру таблицы 2

o RecordSet RecordSetTable1 - в диалоговом режиме создать записи таблицы1

o RecordSet RecordSetTable2 - в диалоговом режиме создать записи таблицы2

o Relation - создать отношение,

o Query - CreateQuery - создать запрос,

o Query - OpenQuery - открыть запрос

o Exit - завершить выполнение проекта,

o создать Стандартный модуль и 5 форм,


Рис. 4.30.Окно проекта - составляющие проекта

 

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


Рис. 4.31.Форма FrmCreate (drvDrive, dirDirect, txtPaht)

 

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, создать требуемые объекты и ввести код, данный ниже:


Рис. 4.32.FrmOpen (drvDrive, dirDirect, txtPaht)

 

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

 


Рис. 4.33.Форма FrmTarif

 

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

 


Рис. 4.34.Форма FrmKunde

 

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

 


Рис. 4.35.Форма FrmQuery

· стартовать проект, . Последовательность действий пользователя дана на форме Form1 ().На даны результаты запроса (см. также - форма FrmQuery ). На запрос представлен на бланке запроса, на запрос представлен в SQL -форме. Эти данные взяты из файла базы данных (см. регистр Запрос базы данных),

· остановить выполнение проекта (). Использовать кнопку Exit формы FrmQuery () и пункт меню Exit первой формы,

·


Рис. 4.36.Старт проекта

 


Рис. 4.37.Результаты запроса

 

 

Рис. 4.38.Запрос на бланке запроса

 


Рис. 4.39.Запрос в SQL-форме

 


Рис. 4.40.Завершение выполнения проекта

 

Лекция 5:


<== previous lecture | next lecture ==>
C. ADO: вывод данных в MSFlexGrid; добавление записей в базу данных из проекта Visual Basic, поиск, удаление данных | Создание макросов
lektsiopedia.org - 2013 год. | Page generation: 1.879 s.