Лекция 3: 2 Для создания возможности использования объектов файловой системы нужно подключить библиотеку DLL, содержащую эти объекты: меню Разработать > Ccылки > Microsoft Scriptlet Component (сделать щелчок на соответствующем элементе управления CheckBox). Не могу найти меню Разработать (Develop)>Links и т.д. |
Опубликован: 04.07.2006 | Уровень: для всех | Доступ: свободно
Лекция 4:
Базы данных
30c. ADO: вывод данных в MSFlexGrid; добавление записей в базу данных из проекта Visual Basic, поиск, удаление данных
Рассматриваются следующие задачи:
- создание базы данных с помощью редактора Visual Data Manager,
- создание связи с базой данных с использованием ADO,
- вывод таблицы в поле элемента управления MsFlexGrid (см. Form1),
- добавление новых записей в таблицу базы данных (см. процедуру Command1_Click ()),
- обновление записей в элементе управления MsFlexGrid (см. процедуру Command5_Click ()),
- отбор записей по введенному критерию (см. процедуру Command2 ),
- удаление записи (см. процедуру 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.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.Connection Private rs As ADODB.Recordset Private Sub Form_Load() ' cmd содержит адрес базы данных Dim cmd As String ' sql - SQL-запрос Dim sql As String ' установить соединение с базой данных ' и открыть набор записей Dim cn As ADODB.Connection Dim rs As ADODB.Recordset cmd = "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 .Open End With ' cоздать SQL запрос, открывающий всю таблицу Clients sql = "select * from Clients" Set rs = New ADODB.Recordset 'создать новый набор записей: With rs ' oткрыть таблицу: .Open sql, cn, adOpenKeyset, adLockOptimistic End With ' данные вывести в поле элемента MSFlexGrid1: число ' столбцов в MSFlexGrid' равно числу полей в таблице. MSFlexGrid1.Cols = rs.Fields.Count MSFlexGrid1.Rows = 1 ' число строк = 1 ' вывести названия полей базы данных: For i = 0 To rs.Fields.Count - 1 MSFlexGrid1.TextMatrix(0, i) = rs.Fields(i).Name Next I ' заполнить остальные строки: Do Until rs.EOF MSFlexGrid1.Rows = MSFlexGrid1.Rows + 1 For i = 0 To rs.Fields.Count - 1 If Not rs.Fields(i) = "" Then MSFlexGrid1.TextMatrix(MSFlexGrid1.Rows - 1, i) = rs.Fields(i) End If Next i rs.MoveNext Loop rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub
- стартовать проект и наблюдать данные таблицы в MSFlexGrid1, рис. 4.25
- ввести код процедуры Command1_Click(), которая будет добавлять записи в базу данных:
Private Sub Command1_Click() ' описание массивов названий Dim k(7) As Variant, z(7) As Variant Dim cmd As String Dim sql As String Dim cn As ADODB.Connection: Dim rs As ADODB.Recordset cmd = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & _ "C:\Program Files\Microsoft Visual Studio\" & "VB98\Inf.mdb" Set cn = New ADODB.Connection With cn .ConnectionString = cmd .Open End With sql = "select * from Clients " Set rs = New ADODB.Recordset rs.CursorType = adOpenDynamic With rs .Open sql, cn, adOpenKeyset, adLockOptimistic End With With rs .MoveLast Dim f As Field ' описание переменной f как объект поле ' в массиве k(t) запомнить названия всех полей For Each f In rs.Fields t = t + 1 k(t) = f.Name ' в массив z(t) занести значения, ' которые будут вводиться пользователем в таблицу z(t) = InputBox("Введите данные для занесения _ в поле " & k(t), "Добавления") Next With 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 With rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub
- стартовать проект,
- после щелчка на кнопке "Добавить" выводится окно ввода и пользователь должен ввести данные для занесения в таблицу, однако введeнные данные можно наблюдать лишь после обновления записей MSFlexGrid, см. код процедуры Command5_Click() "Обновить"
Private Sub Command5_Click() Dim cmd As String: Dim sql As String Dim cn As ADODB.Connection: Dim rs As ADODB.Recordset cmd = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & _ "C:\Program Files\Microsoft Visual Studio\" & "VB98\Inf.mdb" Set cn = New ADODB.Connection With cn .ConnectionString = cmd .Open End With sql = "select * from Clients " Set rs = New ADODB.Recordset With rs .Open sql, cn, adOpenKeyset, adLockOptimistic End With MSFlexGrid1.Cols = rs.Fields.Count MSFlexGrid1.Rows = 1 For i = 0 To rs.Fields.Count - 1 MSFlexGrid1.TextMatrix(0, i) = rs.Fields(i).Name Next i Do Until rs.EOF MSFlexGrid1.Rows = MSFlexGrid1.Rows + 1 For i = 0 To rs.Fields.Count - 1 If Not rs.Fields(i) = "" Then MSFleGrid1.TextMatrix(MSFlexGrid1.Rows - 1, i) = rs.Fields(i) End If Next i rs.MoveNext Loop rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub
- провести поиск в соответствии с некоторым критерием
Private Sub Command2_Click() Dim cmd As String: Dim sql As String Dim cn As ADODB.Connection: Dim rs As ADODB.Recordset cmd = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & _ "C:\Program Files\Microsoft Visual Studio\" & "VB98\Inf.mdb" Set cn = New ADODB.Connection With cn .ConnectionString = cmd .Open End With ' переменные Po и Kr служат для хранения критериев поиска: Po = InputBox("Введите названия полей, в которых будет_ проводиться поиск") Kr = InputBox("Введите критерий, в соответствии с которым будет проводиться поиск") ' ввести SQL запрос, в соответствии с которым выводятся ' только те строки, которые соответствуют критерию sql = "Select * From Clients Where " & Po & Kr Set rs = New ADODB.Recordset With rs ' открыть только те строки таблицы, которые ' соответствуют критерию .Open sql, cn, adOpenKeyset, adLockOptimistic End With ' внести изменения в MSFlexGrid1: MSFlexGrid1.Cols = rs.Fields.Count MSFlexGrid1.Rows = 1 For i = 0 To rs.Fields.Count - 1 MSFlexGrid1.TextMatrix(0, i) = rs.Fields(i).Name Next i Do Until rs.EOF MSFlexGrid1.Rows = MSFlexGrid1.Rows + 1 For i = 0 To rs.Fields.Count - 1 If Not rs.Fields(i) = "" Then MSFlexGrid1.TextMatrix(MSFlexGrid1.Rows - 1, i)_ = rs.Fields(i) End If Next i rs.MoveNext Loop rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub
- стартовать проект и сделать щелчок на кнопке "Поиск". Ввести данные. Наблюдать за изменениями в MSFlexGrid1.
- удаление выбранных записей
Private Sub Command3_Click() Dim cmd As String: Dim sql As String Dim cn As ADODB.Connection: Dim rs As ADODB.Recordset cmd = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" &_ "C:\Program Files\Microsoft Visual Studio\" & "VB98\Inf.mdb" Set cn = New ADODB.Connection With cn .ConnectionString = cmd .Open End With sql = "select * from Clients" Set rs = New ADODB.Recordset With rs .Open sql, cn, adOpenKeyset, adLockOptimistic ' переменной fa присвоить значение - фамилию, которую ' хотим удалить вместе с соответствующей записью fa = InputBox("Введите фамилию для удаления _ соответствующей записи") ' найти запись с такой фамилией и удалить ее Do Until .EOF If rs("FirstName") = fa Then rs.Delete adAffectCurrent End If .MoveNext Loop End With rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub
- стартовать проект, сделать щелчок на кнопке "Удалить", ввести требуемые данные, затем сделать щелчок на кнопке "Обновить", при этом удаляется выбранная запись.
Private Sub Command4_Click() End End Sub