![]() |
C. ADO: вывод данных в MSFlexGrid; добавление записей в базу данных из проекта Visual Basic, поиск, удаление данныхDate: 2015-10-07; view: 838.
Рассматриваются следующие задачи: 1. создание базы данных с помощью редактора Visual Data Manager, 2. создание связи с базой данных с использованием ADO, 3. вывод таблицы в поле элемента управления MsFlexGrid (см. Form1), 4. добавление новых записей в таблицу базы данных (см. процедуру Command1_Click ()), 5. обновление записей в элементе управления MsFlexGrid (см. процедуру Command5_Click ()), 6. отбор записей по введенному критерию (см. процедуру Command2 ), 7. удаление записи (см. процедуру Command3_Click ()). Последовательность действий: · создать базу данных с помощью Visual Data Manager: · Добавления · в окне Database window сделать щелчок на правой кнопке мыши и выбрать New Table, · в поле Table name ввести имя таблицы (Clients). Чтобы ввести названия полей таблицы сделать щелчок на кнопке Add Field. В открывшемся диалоговом окне в поле Name ввести название поля · ввести следующие названия: 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): Проект · создать на форме 4 элемента управления Command Вutton и элемент управления MsFlexGrid. Свойствам Caption элементов управления Command Вutton присвоить значения: Добавить, Поиск, Удалить, Выход, Обновить, · для добавления элемента управления MsFlexGrid выполнить следующее: Проект · ввести код, данный ниже: · ' описание переменных 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 = 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 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 = NothingEnd 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 = NothingEnd 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 = NothingEnd Sub· стартовать проект, сделать щелчок на кнопке "Удалить", ввести требуемые данные, затем сделать щелчок на кнопке "Обновить", при этом удаляется выбранная запись. · Private Sub Command4_Click()· EndEnd Sub
|