Практическая работа 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. ввести код, данный ниже, пояснения даны под комментариями, (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.11
5. добавить новую форму для добавления записей в базу данных, на форме создать 6 элементов управления Label (значения свойств Caption даны на рис. 4.7 5 текстовых полей (txtName, txtVorname, txtVatersn, txtGebdat, txtNummer) и 2 элемента управления CommandButton, рис. 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 Sub7. добавить новую форму для работ по удалению записей из базы данных, создать на форме элементы управления 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 Sub9. cтартовать проект, при этом выводятся данные в поля ListBox, ввести записи в базу данных из проекта, удалить записи. 30b. Элемент управления ADO Data: вывод данных, добавление записей в таблицу из проекта, выполнение SQL-запроса, вывод результатов В данной работе рассматриваeтся: · создание базы данных (ado.mdb) с использованием Visual Data Manager, · вывод с помощью ADO Data Control данных таблицы saleslist, см. табл. 4.12, в текстовое поле, · выполнение SQL-запроса и вывод результатов. ·
Порядок выполнения: · создать на форме 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 currencyo сделать щелчок на кнопке 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
· для добавления записей в таблицу базы данных выполнить следующее: 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, внешний вид. Создано меню и указана последовательность выполнения задания
Здесь: 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
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 Subo ввести код модуля, данный ниже; пояснения даны под комментариями: (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 Subo на форме 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 Subo на форме 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 Subo на форме 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:
|