Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Практическая работа 30. ADO






30а. ADO: вывод данных в поле списка; добавление/удаление записей в базу данных из проекта

1. Создать на форме 5 полей списка (lstName, lstVorname, lstVatersn, lstGebdat, lstNummer),

2. создать ссылку на библиотеку: Проект Информация рис. 4.5 установить флажок Microsoft ActiveX Data Object 2.0 сделать щелчок на кнопке ОК,

 

Рис. 4.5. MSFlexGrid

3. создать на форме меню (рис. 4.6): Инструменты Редактор меню, данные табл. 4.9 OK,

Таблица 4.9. Данные, используемые при создании меню
Имя Название
mnuDob & Добавить
mnuUd & Удалить
mnuExit & Выход

4. ввести код, данный ниже, пояснения даны под комментариями,

(General) (Declarations) (формы)' описание переменных как объектов подключения и ' набора записейPrivate cn As adodb.ConnectionPrivate rs As adodb.Recordset

Рис. 4.6. Вид формы Form1

Private Sub Form_Activate()' переменная для хранения строки подключения к базе данныхDim cmd As String' переменная для хранения SQL-запросаsql As StringDim cn As adodb.Connection Dim rs As adodb.Recordset' очистить спискиlstName.ClearlstVorname.ClearlstVatersn.ClearlstGebdat.ClearlstNummer.Clear' создать строку подключения. Подключение проводится с помощью' провайдера OLEDB (иначе в строке нужно указать другого провайдера).' Следующий параметр (см. строку программы) определяет имя базы данных.' Строка кода выделяется в отдельную функцию, что позволяет реализовать работу с ' различными источниками данных. Такой функции можно передать параметр.cmd = " Provider=Microsoft.Jet.OLEDB.3.51; Persist Security _Info=False; Data Source=A: \db1.mdb" ' установить соединение с базой данныхSet cn = New adodb.Connection cn.ConnectionString = cmdcn.Open' создать запросsql = " select * from Таble1" ' открыть набор записей. Открывается объект Recordset, ему нужно передать' SQL-запрос (sql = " select * from Table1"), Set rs = New..... Далее' набор открывается командой rs.Open sql, cn, adOpenDynamic, adLOckOPtimistic' параметр sgl хранит SQL-запрос, второй параметр означает, что для 'подключения к базе нужно использовать объект cn, следующий параметр' определяет тип курсора (табл. 4.10)
  Таблица 4.10. Типы курсоров
Тип курсора Описание
ad OpenForwardOnly Лишь для перебора записей в одном направлении
adOpenKeyset Для большого набора записей
adOpenDynamic Позволяет отслеживать изменения, вносимые другими пользователями в набор записей
adOpenStatic Для небольших наборов

Последний параметр определяет тип доступа к набору записей табл. 4.11

Таблица 4.11. Тип блокировки
Тип блокировки Описание
ad LockReadOnly Использовать, если не нужно добавлять, обновлять или удалять записи
adLockPessimistic Запись блокируется в начале редактирования до его завершения или перехода к следующей записи
adLockOptimistic Включается при вызове метода Update для записи. Запись временно блокируется (на время сохранения изменений в базе)
Set rs = New adodb.Recordset rs.Open sql, cn, adOpenDynamic, adLockOptimisticDo While Not rs.EOF' включить данные в каждый списокlstName.AddItem rs(" Name")lstVorname.AddItem rs(" Vorname")lstVatersn.AddItem rs(" Vatersn")lstGebdat.AddItem rs(" Gebdat")lstNummer.AddItem rs (" Nummer")rs.MoveNext ' перейти к следующей записиLoop' закрыть набор записей и очистить объектную переменнуюrs.CloseSet rs = Nothing' закрыть подключение и уничтожить объект подключенияcn.Close: Set cn = NothingEnd SubPrivate Sub mnuDob_Click()' показать форму " Добавление" frmDob.ShowEnd SubPrivate Sub mnuExit_Click()Dim v As Integer ' код возврата' проверка, хочет ли пользователь закончить ' выполнение проектаv = MsgBox(" Exit? ", vbYesNo + vbQuestion, " Exit? ")' число 6 соответствует нажатой кнопке YesIf v = 6 Then End End SubPrivate Sub mnuUd_Click()' показать форму " Удаление" frmUd.ShowEnd Sub

5. добавить новую форму для добавления записей в базу данных, на форме создать 6 элементов управления Label (значения свойств Caption даны на рис. 4.7 5 текстовых полей (txtName, txtVorname, txtVatersn, txtGebdat, txtNummer) и 2 элемента управления CommandButton, рис. 4.7


Рис. 4.7. Вид формы Добавление записи

6. ввести код, данный ниже:

General) (Declarations)Private cn As adodb.Connection Private rs As adodb.RecordsetPrivate Sub Command1_Сlick()Dim rc As String 'код возвратаDim cmd As String, sql As StringDim cn As adodb.Connection, rs As adodb.Recordset' создать строку подключенияcmd = " Provider=Microsoft.Jet.OLEDB.3.51; Persist Security _Info=False; Data Source=A: \db1.mdb" ' установить соединение с базой данныхSet cn = New adodb.Connectioncn.ConnectionString = cmdcn.Opensql = " select * from Таble1" ' создать запросSet rs = New adodb.Recordset ' открыть набор записейrs.Open sql, cn, adOpenDynamic, adLockOptimistic' проверка, действительно ли пользователь' хочет добавить данныеrc = MsgBox(" Add? ", vbYesNo + vbQuestion, " Add! ")If rc = 6 Then' процесс добавления данных rs.AddNew: rs(" Name") = txtNamers(" Vorname") = txtVornamers(" Vatersn") = txtVatersnrs(" Gebdat") = txtGebdatrs(" Nummer") = txtNummerrs.UpdateEnd Ifrs.Close: Set rs = Nothingcn.CloseSet cn = Nothing' вывод сообщения о добавлении записи в БДMsgBox " Введенная вами запись добавлена в базу данных! ", _ vbOKOnly, " Успешное добавление! " End SubPrivate Sub Command2_Click()' перейти на главную формуUnload Me: Form1.ShowEnd Sub

7. добавить новую форму для работ по удалению записей из базы данных, создать на форме элементы управления Label, TextВox (Name= txtQuery), 2 элемента управления CommandButton, рис. 4.8

Рис. 4.8. Вид формы Form3. Удаление записи

8. ввести код:

Private cn As adodb.ConnectionPrivate rs As adodb.RecordsetPrivate Sub Command1_Сlick()Dim rc As Integer 'код возвратаDim cmd As String, sql As String, cn As adodb.ConnectionDim rs As adodb.Recordset' создание SQL-запроса sql = " SELECT Таble1.Nummer From Таble1 WHERE_(((Таble1.Nummer) = " _sql = sql & " " " " & txtQuery.Text & " " " " & ")); " ' создать строку подключенияcmd = " Provider=Microsoft.Jet.OLEDB.3.51; Persist Security _Info=False; Data Source=A: \db1.mdb" ' установить соединение с базой данныхSet cn = New adodb.Connection cn.ConnectionString = cmdcn.Open ' открыть набор записейSet rs = New adodb.Recordset rs.Open sql, cn, adOpenDynamic, adLockOptimistic' проверка, действительно ли пользователь хочет ' удалить данныеrc = MsgBox(" Yes or No? ", vbYesNo + vbQuestion, " Del)If rc = 6 Thenrs.Delete ' процесс удаленияMsgBox " Запись из базы данных удалена! ", _vbInformation + vbOKOnly, " Удаление выполнено! " End Ifrs.Close: Set rs = Nothingcn.CloseSet cn = NothingEnd SubPrivate Sub Command2_Click()Unload Me: Form1.ShowEnd Sub

9. cтартовать проект, при этом выводятся данные в поля ListBox, ввести записи в базу данных из проекта, удалить записи.

30b. Элемент управления ADO Data: вывод данных, добавление записей в таблицу из проекта, выполнение SQL-запроса, вывод результатов

В данной работе рассматриваeтся:

· создание базы данных (ado.mdb) с использованием Visual Data Manager,

· вывод с помощью ADO Data Control данных таблицы saleslist, см. табл. 4.12, в текстовое поле,

· выполнение SQL-запроса и вывод результатов.

·

Таблица 4.12. Содержимое таблицы базы данных saleslist
Name of product Price Quantity Total
tvset      
computer      
Fax      
telephone      
scaner      

Порядок выполнения:

· создать на форме 4 элемента управления TextBox и 4 элемента управления Label (установить свойства Caption каждого элемента соответственно - Name of product, Price, Quantity, Total, рис. 4.9

·

Рис. 4.9. Вид формы

· cоздать базу данных с использованием Visual Data Manager, для этого:

o выполнить команды: Модули Visual Data Manager File New Microsoft Access Version 7.0 MDB, рис. 4.10

Рис. 4.10. Visual Data Manager

o ввести название: ado сохранить,

o в диалоговом окне Database Window сделать щелчок правой клавишей мыши. В появившемся меню выбрать New Table, рис. 4.11

Рис. 4.11. Таблица Structure

o задать имя таблицы: saleslist,

o в диалоговом окне Table Structure сделать щелчок на кнопке Add field, рис. 4.12

Рис. 4.12. Окно Add Field

o в диалоговом окне Add Field в соответствующие поля ввести имена полей таблицы и типы данных, делать щелчок на кнопке ОК после каждого ввода:

o name_of_product, text, o price currencyo quantity bytetotal currency

o сделать щелчок на кнопке Close,

o в диалоговом окне Table Structure сделать щелчок на кнопке Build the Table, которая стала активной, рис.4.13

Рис. 4.13. Database Window

o в окне Database Window сделать двойной щелчок на поле saleslist, рис. 4.14

Рис. 4.14. Построение таблицы saleslist

o в диалоговом окне динамического набора Dynaset: saleslist сделать щелчок на кнопке Add, рис. 4.15

Рис. 4.15. Построение таблицы, продолжение

o вводить данные, после ввода каждой записи делать щелчок на кнопке Update, затем снова Add и т.д,

o в окне Dynaset: saleslist сделать щелчок на кнопке Close; в окне Visdata выполнить команды: File Exit. Создание базы данных ado.mdb завершено; файл базы данных сохраняется на дисковом устройстве в каталоге (system32),

· для вывода элемента управления ADO Data выполнить следующее: Проект -> Компоненты -> Microsoft ADO Control 6.0 (OLEDB), рис. 4.16

Рис. 4.16. Microsoft ADO Data Control

· поместить элемент управления ADO Data на форму, рис. 4.17

Рис. 4.17. Элемент управления на форме

· присвоить значение свойства ConnectionString, рис. 4.18

Рис. 4.18. Окно Property Pages

· в диалоговом окне Property Pages сделать щелчок на кнопке Build, рис. 4.19

Рис. 4.19. Поставщики услуг

· в диалоговом окне Свойства связи с данными выбрать из списка поставщиков услуг Microsoft Jet 3.51 (или Microsoft Jet 4.0, если имеется в наличии), рис. 20. Эти поставщики используются при соединении источника данных, для которого не существует провайдера OLE DB, с другим источником данных OLE DB. Для баз данных Microsoft SQL Server используется Microsoft OLE DB Provider for SQL Server и т. д,

· в диалоговом окне Свойства связи с данными сделать щелчок на кнопке Далее. Перейти к регистру Подключение, рис. 4.20

Рис. 4.20. Регистр Подключение

· найти в дереве файлов базу данных ado.mdb, выбрать в списке имя базы данных ado.mdb. Использовать имя пользователя - admin, рис. 4.20

· сделать щелчок на кнопке Проверить подключение, если при этом выводится сообщение " Подключение успешно", то сделать щелчок на кнопке ОК,

· в диалоговом окне Свойства связи с данными сделать щелчок на кнопке ОК; cтроится строка " Provider:, путь к базе данных" в окне Property Pages, рис. 4.18 В диалоговом окне Property Pages сделать щелчок на кнопке ОК,

· присвоить значение свойству RecordSource для элемента данных ADO, рис. 4.21 следующим образом:

Рис. 4.21. Окно Property Pages

· в диалоговом окне Property Pages выбрать для Command Type значение 2-adCmdTable, а для Table or Stored Procedure Name - saleslist OK. Теперь установлена связь с базой данных ado.mdb и можно начать работу c элементами управления TextBox,

· присвоить свойству DataSource каждого элемента управления TextBox значение Adodc1; а свойству DataField (см. также поля Label) каждого элемента управления TextBox (соответственно) - name_of_product, price, quantity, total,

· стартовать проект, наблюдать выведенные данные, для этого перелистывать данные, используя стрелки > или >, см рис. 4.22


Рис. 4.22. Вид формы после старта проекта

· для добавления записей в таблицу базы данных выполнить следующее:

o остановить выполнение проекта,

o изменить значение свойства EOFAction объекта Adodc1 с 0 - adDoMoveLast на 2 - adDoAddNew,

· стартовать проект и заполнить пустую запись, следующую после пятой записи, например, следующим образом: printer 800 10 8000.

Замечание: для проверки (внесения записи) стартовать Visual Data Manager, двойным щелчком открыть и просмотреть таблицу. Переходить от одного поля TextBox к другому можно либо с помощью курсора мыши, либо с помощью клавиши Tab,

· остановить выполнение проекта,

· для выполнения SQL-запроса - для вывода в поле TextBox, например, наименования тех продуктов, стоимость которых равна 4000 (или больше 5000) выполнить следующее:

o поместить на форму ещe один элемент управления (Adodc2) и еще один элемент управленияTextBox,

o установить значение ConnectionString для элемента управления Adodc2 то же, что и у Adodc1 OK,

o при установке значения RecordSource в диалоговом окне Property Pages выбрать для Command Type значение 1 - adCmdText, а для Command Text (SQL) ввести запрос: Select * from saleslist where total=4000 (или total> 5000)

o установить свойства TextBox следующим образом: DataSource - Adodc2, DataField - name_of_product (название того поля, записи которого должны быть выведены в поле TextBox),

· стартовать проект, наблюдать результаты, для этого перелистывать данные, используя стрелки > <.

30c. ADO: вывод данных в MSFlexGrid; добавление записей в базу данных из проекта Visual Basic, поиск, удаление данных

Рассматриваются следующие задачи:

1. создание базы данных с помощью редактора Visual Data Manager,

2. создание связи с базой данных с использованием ADO,

3. вывод таблицы в поле элемента управления MsFlexGrid (см. Form1),

4. добавление новых записей в таблицу базы данных (см. процедуру Command1_Click ()),

5. обновление записей в элементе управления MsFlexGrid (см. процедуру Command5_Click ()),

6. отбор записей по введенному критерию (см. процедуру Command2),

7. удаление записи (см. процедуру Command3_Click ()).

Последовательность действий:

· создать базу данных с помощью Visual Data Manager:

· Добавления Visual Data Manager File New Microsoft Access Version7.0 MDB:, в открывшемся диалоговом окне ввести название базы данных (Inf.mdb) OK,

· в окне Database window сделать щелчок на правой кнопке мыши и выбрать New Table,

· в поле Table name ввести имя таблицы (Clients). Чтобы ввести названия полей таблицы сделать щелчок на кнопке Add Field. В открывшемся диалоговом окне в поле Name ввести название поля OK,

· ввести следующие названия: Name, FirstName, Experience, Marital, Status, Age, Post -> Close. В диалоговом окне Table Structure появились названия полей таблицы,

· сделать щелчок на кнопке Close. В окне Database window появилось название таблицы. Открыть ее двойным щелчком. Чтобы внести данные в таблицу, сделать щелчок на кнопке Add, после внесения - на кнопке Update (рис. 4.23) После того, как заполнили таблицу, закрыть все окна, кроме окна проекта,

Рис. 4.23. Cоздание таблицы

Созданная таблица имеет вид (рис. 4.24):

Рис. 4.24. Содержание таблицы

· сделать ссылку на библиотеку ADODB (Microsoft ActiveX Data Objects Library 2.1): Проект Ссылки Microsoft ActiveX Data Objects Library 2.1 - OK,

· создать на форме 4 элемента управления Command Вutton и элемент управления MsFlexGrid. Свойствам Captionэлементов управления Command Вutton присвоить значения: Добавить, Поиск, Удалить, Выход, Обновить,

· для добавления элемента управления MsFlexGrid выполнить следующее: Проект Компоненты Microsoft FlexGrid Control 6.0,

· ввести код, данный ниже:

' описание переменных cn (соединение с базой данных)' и rs (набор записей базы данных)Private cn As ADODB.ConnectionPrivate rs As ADODB.RecordsetPrivate Sub Form_Load()' cmd содержит адрес базы данныхDim cmd As String' sql - SQL-запрос Dim sql As String' установить соединение с базой данных' и открыть набор записейDim cn As ADODB.ConnectionDim rs As ADODB.Recordsetcmd = " Provider=Microsoft.Jet.OLEDB.4.0; " & " Data Source=" & _" C: \Program Files\Microsoft Visual Studio\" & " VB98\Inf.mdb" Set cn = New ADODB.Connection ' cоздать новое соединение: With cn' свойству ConnectionString объекта cn присвоить ' значение cmd.ConnectionString = cmd.OpenEnd With' cоздать SQL запрос, открывающий всю таблицу Clientssql = " select * from Clients" Set rs = New ADODB.Recordset 'создать новый набор записей: With rs' oткрыть таблицу:.Open sql, cn, adOpenKeyset, adLockOptimisticEnd With' данные вывести в поле элемента MSFlexGrid1: число ' столбцов в MSFlexGrid' равно числу полей в таблице.MSFlexGrid1.Cols = rs.Fields.CountMSFlexGrid1.Rows = 1 ' число строк = 1' вывести названия полей базы данных: For i = 0 To rs.Fields.Count - 1MSFlexGrid1.TextMatrix(0, i) = rs.Fields(i).NameNext I' заполнить остальные строки: Do Until rs.EOFMSFlexGrid1.Rows = MSFlexGrid1.Rows + 1For i = 0 To rs.Fields.Count - 1If Not rs.Fields(i) = " " ThenMSFlexGrid1.TextMatrix(MSFlexGrid1.Rows - 1, i) = rs.Fields(i)End IfNext irs.MoveNextLooprs.Close: Set rs = Nothingcn.Close: Set cn = NothingEnd Sub

стартовать проект и наблюдать данные таблицы в MSFlexGrid1, рис. 4.25

Рис. 4.25. Вид формы после старта проекта

· ввести код процедуры Command1_Click(), которая будет добавлять записи в базу данных:

Private Sub Command1_Click()' описание массивов названий Dim k(7) As Variant, z(7) As Variant Dim cmd As StringDim sql As StringDim cn As ADODB.Connection: Dim rs As ADODB.Recordsetcmd = " Provider=Microsoft.Jet.OLEDB.4.0; " & " Data Source=" & _" C: \Program Files\Microsoft Visual Studio\" & " VB98\Inf.mdb" Set cn = New ADODB.ConnectionWith cn.ConnectionString = cmd.OpenEnd Withsql = " select * from Clients " Set rs = New ADODB.Recordsetrs.CursorType = adOpenDynamicWith rs.Open sql, cn, adOpenKeyset, adLockOptimisticEnd WithWith rs.MoveLastDim f As Field ' описание переменной f как объект поле' в массиве k(t) запомнить названия всех полейFor Each f In rs.Fieldst = t + 1k(t) = f.Name' в массив z(t) занести значения, ' которые будут вводиться пользователем в таблицуz(t) = InputBox(" Введите данные для занесения _в поле " & k(t), " Добавления")NextWith rs' добавить строку в таблицу.AddNew Array(k(1), k(2), k(3), k(4), k(5), k(6), k(7)), _Array(z(1), z(2), z(3), z(4), z(5), z(6), z(7))End Withrs.Close: Set rs = Nothingcn.Close: Set cn = Nothing End Sub

· стартовать проект,

· после щелчка на кнопке " Добавить" выводится окно ввода и пользователь должен ввести данные для занесения в таблицу, однако введeнные данные можно наблюдать лишь после обновления записей MSFlexGrid, см. код процедурыCommand5_Click() " Обновить"

Private Sub Command5_Click()Dim cmd As String: Dim sql As StringDim cn As ADODB.Connection: Dim rs As ADODB.Recordsetcmd = " Provider=Microsoft.Jet.OLEDB.4.0; " & " Data Source=" & _" C: \Program Files\Microsoft Visual Studio\" & " VB98\Inf.mdb" Set cn = New ADODB.ConnectionWith cn.ConnectionString = cmd.OpenEnd Withsql = " select * from Clients " Set rs = New ADODB.RecordsetWith rs.Open sql, cn, adOpenKeyset, adLockOptimisticEnd WithMSFlexGrid1.Cols = rs.Fields.CountMSFlexGrid1.Rows = 1For i = 0 To rs.Fields.Count - 1MSFlexGrid1.TextMatrix(0, i) = rs.Fields(i).NameNext iDo Until rs.EOFMSFlexGrid1.Rows = MSFlexGrid1.Rows + 1For i = 0 To rs.Fields.Count - 1If Not rs.Fields(i) = " " ThenMSFleGrid1.TextMatrix(MSFlexGrid1.Rows - 1, i) = rs.Fields(i)End IfNext irs.MoveNextLooprs.Close: Set rs = Nothingcn.Close: Set cn = NothingEnd Sub

· провести поиск в соответствии с некоторым критерием

Private Sub Command2_Click()Dim cmd As String: Dim sql As StringDim cn As ADODB.Connection: Dim rs As ADODB.Recordsetcmd = " Provider=Microsoft.Jet.OLEDB.4.0; " & " Data Source=" & _" C: \Program Files\Microsoft Visual Studio\" & " VB98\Inf.mdb" Set cn = New ADODB.ConnectionWith cn.ConnectionString = cmd.OpenEnd With' переменные Po и Kr служат для хранения критериев поиска: Po = InputBox(" Введите названия полей, в которых будет_проводиться поиск")Kr = InputBox(" Введите критерий, в соответствии с которым будет проводиться поиск")' ввести SQL запрос, в соответствии с которым выводятся ' только те строки, которые соответствуют критериюsql = " Select * From Clients Where " & Po & KrSet rs = New ADODB.RecordsetWith rs' открыть только те строки таблицы, которые' соответствуют критерию.Open sql, cn, adOpenKeyset, adLockOptimisticEnd With' внести изменения в MSFlexGrid1: MSFlexGrid1.Cols = rs.Fields.CountMSFlexGrid1.Rows = 1For i = 0 To rs.Fields.Count - 1MSFlexGrid1.TextMatrix(0, i) = rs.Fields(i).NameNext iDo Until rs.EOFMSFlexGrid1.Rows = MSFlexGrid1.Rows + 1For i = 0 To rs.Fields.Count - 1If Not rs.Fields(i) = " " ThenMSFlexGrid1.TextMatrix(MSFlexGrid1.Rows - 1, i)_= rs.Fields(i)End IfNext irs.MoveNextLooprs.Close: Set rs = Nothingcn.Close: Set cn = NothingEnd Sub

· стартовать проект и сделать щелчок на кнопке " Поиск". Ввести данные. Наблюдать за изменениями в MSFlexGrid1.

· удаление выбранных записей

Private Sub Command3_Click()Dim cmd As String: Dim sql As StringDim cn As ADODB.Connection: Dim rs As ADODB.Recordsetcmd = " Provider=Microsoft.Jet.OLEDB.4.0; " & " Data Source=" & _" C: \Program Files\Microsoft Visual Studio\" & " VB98\Inf.mdb" Set cn = New ADODB.ConnectionWith cn.ConnectionString = cmd.OpenEnd Withsql = " select * from Clients" Set rs = New ADODB.RecordsetWith rs.Open sql, cn, adOpenKeyset, adLockOptimistic' переменной fa присвоить значение - фамилию, которую' хотим удалить вместе с соответствующей записьюfa = InputBox(" Введите фамилию для удаления _соответствующей записи")' найти запись с такой фамилией и удалить ееDo Until.EOFIf rs(" FirstName") = fa Thenrs.Delete adAffectCurrentEnd If.MoveNextLoopEnd Withrs.Close: Set rs = Nothingcn.Close: Set cn = NothingEnd Sub

· стартовать проект, сделать щелчок на кнопке " Удалить", ввести требуемые данные, затем сделать щелчок на кнопке " Обновить", при этом удаляется выбранная запись.

Private Sub Command4_Click()EndEnd Sub

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

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

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

2. две таблицы см. рис. 4.26рис. 4.27 рис. 4.28, ключевые поля таблиц,

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

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

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

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

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

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

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

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

Cоздать форму Form1, рис. 4.29и меню, табл. 4.13

Рис. 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 (рис. 4.31) - создать файл базы данных,

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

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

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

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

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

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

o Query - OpenQuery - открыть запрос (рис. 4.35),

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

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


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

o ввести код формы Form1, пояснения даны под комментариями:

Private Sub mnuCreate_Click() ' создать файл базы данныхLoad FrmCreateFrmCreate.ShowEnd SubPrivate Sub mnuCreateQuery_Click() ' создать запросCall QueryEnd SubPrivate Sub mnuExit_Click() ' завершение работы проектаCall DatabaseCloseUnload Form1MsgBox (" Завершение работы проекта!? "), vbCritical + vbOKOnlyEndEnd SubPrivate Sub mnuOpen_Click() ' выбрать файл для его' последующего открытияLoad FrmOpenFrmOpen.ShowEnd SubPrivate Sub mnuOpenQuery_Click() ' открыть запросLoad FrmQueryFrmQuery.ShowEnd SubPrivate Sub mnuRecordSetTab1_Click() ' создать записи в таблице 1Load FrmTarifFrmTarif.ShowEnd SubPrivate Sub mnuRecordSetTab2_Click()' создать записи в' таблице 2Load FrmKundeFrmKunde.ShowEnd SubPrivate Sub mnuRelation_Click() ' создать отношениеCall RelationEnd SubPrivate Sub mnuTab1_Click() ' создать структуру таблицы 1Call Tab1End SubPrivate Sub mnuTab2_Click() ' создать структуру таблицы 2Call Tab2End Sub

o ввести код модуля, данный ниже; пояснения даны под комментариями:

(General) (Declarations)Public NewDB As DatabasePublic NewWS As WorkspacePublic NewTbl As TableDef1Public NewTbl As TableDef2Public idx1 As IndexPublic idx2 As IndexPublic NewRel As RelationPublic sqlquery As QueryDefPublic NewRec As RecordsetPublic Sub Tab1() ' создание таблицы 1Set NewTbl1 = NewDB.CreateTableDef(" Tarif")Set f1 = NewTbl1.CreateField()Set f2 = NewTbl1.CreateField() f1.Name = " Razrjad" ' имя поляf1.Type = dbInteger ' тип данныхf2.Name = " Koeffcnt" f2.Type = dbSingleNewTbl1.Fields.Append f1NewTbl1.Fields.Append f2Set idx1 = NewTbl1.CreateIndex(" TarifIndex") ' создание индексаIdx1.Primary = TrueSet f1 = idx1.CreateField(" Razrjad") ' создание индексного поля' (используется метод объета idx)idx1.Fields.Append f1NewTbl1.Indexes.Append idx1NewDB.TableDefs.Append NewTbl1MsgBox (" Создана структура таблицы Tarif"), vbInformation +_vbOKOnlyEnd SubPublic Sub Tab2() ' создание таблицы 2Set NewTbl2 = NewDB.CreateTableDef(" Kunde")' создание полей таблицыSet f3 = NewTbl2.CreateField()Set f4 = NewTbl2.CreateField()Set f6 = NewTbl2.CreateField()' присваивание имeн полям и типов даннымf3.Name = " Tabnumber" f3.Type = dbIntegerf4.Name = " Nam" f4.Type = dbTextf4.Size = 20f4.AllowZeroLength = True' здесь позднее (см. Public Sub Relation) будет создано ' зависимое поле (f5) отношенияf6.Name = " Razrjad" f6.Type = dbInteger' добавление полей в таблицуNewTbl2.Fields.Append f3NewTbl2.Fields.Append f4NewTbl2.Fields.Append f6' создание индексаSet idx2 = NewTbl2.CreateIndex(" KundeIndex")' указание того, что главный индекс существуетidx2.Primary = True' создание индексного поляSet f3 = idx2.CreateField(" Razrjad")Idx2.Fields.Append f3NewTbl2.Indexes.Append idx2NewDB.TableDefs.Append NewTbl2MsgBox (" Создана структура таблицы Kunde! "), vbOKOnly +_vbInformationEnd SubPublic Sub Relation() ' создание отношенияSet NewRel = NewDB.CreateRelation(" RelKunde") ' используется' метод Создать отношение объекта База данных' указание главной таблицы в отношенииNewRel.Table = " Tarif" ' указание зависимой таблицы в отношенииNewRel.ForeignTable = " Kunde" ' создание зависимого поля в отношенииSet f5 = NewRel.CreateField(" Razrjad")' указание имени зависмого поля, по которому ' строится отношениеf5.ForeignName = " Razrjad" NewRel.Fields.Append f5' добавление отношения в базу данныхNewDB.Relations.Append NewRelMsgBox (" Отношение создано! "), vbOKOnly + vbInformationEnd SubPublic Sub Query() ' создание запросаSet sqlquery = NewDB.CreateQueryDef(" sql1")' указание того, что требуется выбрать в запросе, ' из каких таблиц провести выбор и формулировка ' cоответствующих условий sqlquery.SQL = " SELECT Kunde.Tabnumber, Kunde.Nam, _Kunde.Razrjad, Tarif.Razrjad, Tarif.Koeffcnt _FROM Tarif INNER JOIN Kunde ON Tarif.Razrjad = Kunde.Razrjad _WHERE Kunde.Tabnumber = 2; " MsgBox (" SQL-запрос введeнi! "), vbOKOnly + vbInformationEnd SubPublic Sub CreateFile() ' создание файла базы данныхSet NewWS = DBEngine.Workspaces(0)Set NewDB = NewWS.CreateDatabase(FrmCreate.txtPath.Text, _ dbLangCyrillic)MsgBox (" " Файл в формате mdb создан! "), vbInformationUnload FrmCreateEnd SubPublic Sub DatabaseClose() NewWS.CloseSet NewWC = NothingEnd SubSub Main() ' начало проектаresp = MsgBox(" Здравствуйте! Программное создание базы_ данных и работа с ней. Выберите ДА или НЕТ! ", vbYesNo, " ")If resp = vbYes ThenMsgBox " Сделайте щелчок на кнопке ОК для продолжения диалога! " Load Form1Form1.ShowEnd IfEnd Sub

o на форме FrmCreate, рис. 4.31 создать требуемые объекты и ввести код, данный ниже:

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

Private Sub Cancel_Click()Unload MeEnd SubPrivate Sub Create_Click()Call CreateFileEnd SubPrivate Sub dirDirect_Change()filFile.Path = dirDirect.PathEnd SubPrivate Sub drvDrive_Change()dirDirect.Path = drvDrive.DriveEnd SubPrivate Sub Path_Click() ' вывод пути и имени файла в' поле txtPath If drvDrive.Drive = " a: " ThendirDirect.Path = " a: \" txtPath.Text = dirDirect.Path + filFile.FileNameElsetxtPath.Text = dirDirect.Path + " \" + filFile.FileNameEnd IfEnd Sub

o на форме FrmOpen, рис. 4.32, создать требуемые объекты и ввести код, данный ниже:

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

Private Sub Cancel_Click()Unload MeEnd SubPrivate Sub Com1_Click() ' пометить требуемый файл и ' перейти к Form1MsgBox (" Файл: " + FrmOpen.txtPath.Text), vbInformation FrmOpen.Hide End SubPrivate Sub dirDirect_Change()filFile.Path = dirDirect.PathEnd SubPrivate Sub drvDrive_Change()dirDirect.Path = drvDrive.DriveEnd SubPrivate Sub filFile_Click()If Right(dirDirect.Path, 1) = " \" ThentxtPath = dirDirect.Path + filFile.FileNameExit SubElsetxtPath.Text = dirDirect.Path + " \" + filFile.FileNameEnd IfEnd Sub

o на форме FrmTarif, рис. 4.33 создать требуемые объекты и ввести код, данный ниже:

Private Sub Cancel_Click() 'Unload MeEnd SubPrivate Sub Com1_Click() ' добавить' открывает буфер для очередной записи в таблицеdatTarif.Recordset.AddNewEnd SubPrivate Sub Com2_Click() ' обновить' сбрасывает содержимое буфера для того, чтобы' изменения были зафиксированы в записиdatTarif.UpdateRecordEnd Sub Private Sub Com3_Click() ' выходUnload MeEnd SubPrivate Sub Com4_Click() ' удалить' уничтожает запись таблицыdatTarif.Recordset.DeleteEnd SubPrivate Sub Com5_Click() ' восстановить' если изменено содержимое записи, но ещё не обновлено, ' то восстановится предыдущее значение поляdatTarif.UpdateControlsEnd SubPrivate Sub Com6_Click() ' вперёдdatTarif.Recordset.MoveNextIf datTarif.Recordset.EOF ThenMsgBox " Конец таблицы! ", vbOKOnly + vbInformation, " " datTarif.Recordset.MoveLastEnd IfEnd SubPrivate Sub Com7_Click() ' назадdatTarif.Recordset.MovePreviousIf datTarif.Recordset.BOF ThenMsgBox " Hачало таблицы! ", vbOKOnly + vbInformation, " " datTarif.Recordset.MoveFirstEnd IfEnd SubPrivate Sub Com8_Click() ' к первой записиdatTarif.Recordset.MoveFirstEnd SubPrivate Sub Com9_Click() ' к последней записиdatTarif.Recordset.MoveLastEnd SubPrivate Sub Exit_Click() ' выходUnload MeEnd SubPrivate Sub Form_Load()Set NewDB = Worspaces(0).OpenDatabase(FrmOpen.txtPath.Text)' установка свойств элементов управленя Data и TextBox datTarif.DatabaseName = FrmOpen.txtPath.TextdatTarif.RecordSource = " Tarif" ' txtRazrjad.DataSource = " datTarif" ' можно испоьзовать окно ' свойств' txtKoeffcnt.DataSource = " datTarif" txtRazrjad.DataField = " Razrjad" txtKoeffcnt.DataField = " Koeffcnt" End Sub

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

o на форме FrmKunde, рис. 4.34 создать требуемые объекты и ввести код, данный ниже:

Private Sub Cancel_Click()Unload MeEnd SubPrivate Sub Com1_Click() ' добавитьdatKunde.Recordset.AddNewEnd SubPrivate Sub Com2_Click() ' обновитьdatKunde.UpdateRecordEnd SubPrivate Sub Com3_Click() ' выходUnload MeEnd SubPrivate Sub Com4_Click() ' удалитьdatKunde.Recordset.DeleteEnd SubPrivate Sub Com5_Click() ' восстановитьdatKunde.UpdateControlsEnd SubPrivate Sub Com6_Click() ' вперeд (к следующей записи)datKunde.Recordset.MoveNextIf datKunde.Recordset.EOF ThenMsgBox " Конец таблицы! ", vbOKOnly + vbInformation, " " datKunde.Recordset.MoveLastEnd IfEnd SubPrivate Sub Com7_Click() ' назад (к предыдущей записи)datKunde.Recordset.MovePreviousIf datKunde.Recordset.BOF ThenMsgBox " Начало таблицы! ", vbOKOnly + vbInformation, " " datKunde.Recordset.MoveFirstEnd IfEnd SubPrivate Sub Com8_Click() ' в начало таблицыdatKunde.Recordset.MoveFirstEnd SubPrivate Sub Com9_Click() ' в конец таблицыdatKunde.Recordset.MoveLastEnd SubPrivate Sub Exit_Click() ' выходUnload MeEnd SubPrivate Sub Form_Load()Set NewDB = Worspaces(0).OpenDatabase(FrmOpen.txtPath.Text)' yстановка свойств элементов управления Data иTextBoxdatKunde.DatabaseName = FrmOpen.txtPath.TextdatKunde.RecordSource = " Kunde" ' txtTabnumber.DataSource = " datKunde" ' можно' использовать окно свойств' txtNam.DataSource = " datKunde" ' txtRazrjad.DataSource = " datKunde" txtRazrjad.DataField = " Razrjad" txtNam.DataField = " Nam" txtTabnumber.DataField = " Tabnumber" End Sub

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

o на форме FrmQuery, рис. 4.35 создать требуемые объекты и ввести код, данный ниже:

Private Sub Cancel_Click()Unload MeEnd SubPrivate Sub Com1_Click() ' к первой записиNewRec.MoveFirstCall showfieldsEnd SubPrivate Sub Com2_Click() ' к последней записиNewRec.MoveLastCall showfieldsEnd SubPrivate Sub Com3_Click() ' к следующей записиNewRec.MoveNext' если достигнут конец таблицы, то выдаeтся ' соответствующее сообщение и проводится переход к ' последней записиIf NewRec.EOF ThenMsgBox " Kонец таблицы! ", vbOKOnly + vbInformation, " " NewRec.MoveLastEnd IfCall showfieldsEnd SubPrivate Sub Com4_Click() ' к предыдущей записи таблицыNewRec.MovePrevious' если достигнуто начало таблицы, то выдаeтся ' соответствующее сообщение и проводится переход' к первой записиIf NewRec.BOF ThenMsgBox " Hачало таблицы! ", vbOKOnly + vbInformation, " " NewRec.MoveFirstEnd IfCall showfieldsEnd SubPrivate Sub Exit_Click()NewDB.CloseSet NewDB = NothingUnload MeEnd SubPrivate Sub Form_Load()Set NewWS = DBEngine.Workspaces(0)Set NewDB = NewWS.OpenDatabase(FrmOpen.txtPath.Text)' указатель на набор данных создаeтся с помощью метода ' Recordset объекта Database. Синтаксис: ' Set RecordSet = Database.OpenRecordSet (" имя_таблицы или' SQL-запроса, из которых берут данные", dbName), здесь ' dbName - константа, которая определяет тип размещения' данных. В основном используется dbname = dbOpenDynaset' - размещение данных в виде динамического набора, ' открывающего полный доступ к таблицам: перемещение, ' индексирование, редактировние и т.д.Set NewRec = NewDB.OpenRecordset(" sql1", dbOpenDynaset)Call showfieldsEnd SubPrivate Sub showfields()' используемый синтаксис: NewRec(name), где NewRec - ' указатель на объект Recordset, name - имя поляtxtTabnumber.Text = NewRec(" Tabnumber")txtName.Text = NewRec(" Nam")txtRazrjad.Text = NewRec(" Tarif.Razrjad")txtKoeffcnt.Text = NewRec(" Koeffcnt")End Sub

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

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

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

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

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

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

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

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

Лекция 5:






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.