Спонсор: Microsoft
Опубликован: 04.07.2006 | Доступ: свободный | Студентов: 5450 / 625 | Оценка: 4.11 / 3.96 | Длительность: 11:08:00
Лекция 4:

Базы данных

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:
  • Добавления \to Visual Data Manager \to File \to New \to Microsoft Access \to Version7.0 MDB:, в открывшемся диалоговом окне ввести название базы данных (Inf.mdb) \to OK,
  • в окне Database window сделать щелчок на правой кнопке мыши и выбрать New Table,
  • в поле Table name ввести имя таблицы (Clients). Чтобы ввести названия полей таблицы сделать щелчок на кнопке Add Field. В открывшемся диалоговом окне в поле Name ввести название поля \to OK,
  • ввести следующие названия: Name, FirstName, Experience, Marital, Status, Age, Post -> Close. В диалоговом окне Table Structure появились названия полей таблицы,
  • сделать щелчок на кнопке Close. В окне Database window появилось название таблицы. Открыть ее двойным щелчком. Чтобы внести данные в таблицу, сделать щелчок на кнопке Add, после внесения - на кнопке Update (рис. 4.23) После того, как заполнили таблицу, закрыть все окна, кроме окна проекта,
    Cоздание таблицы

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

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

    Содержание таблицы

    увеличить изображение
    Рис. 4.24. Содержание таблицы
  • сделать ссылку на библиотеку ADODB (Microsoft ActiveX Data Objects Library 2.1): Проект \to Ссылки \to Microsoft ActiveX Data Objects Library 2.1 - \to OK,
  • создать на форме 4 элемента управления Command Вutton и элемент управления MsFlexGrid. Свойствам Caption элементов управления Command Вutton присвоить значения: Добавить, Поиск, Удалить, Выход, Обновить,
  • для добавления элемента управления MsFlexGrid выполнить следующее: Проект \to Компоненты \to 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
    Вид формы после старта проекта

    увеличить изображение
    Рис. 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
антонина квасова
антонина квасова
Владимир Муратов
Владимир Муратов

По курсу Visual Basic где же взять материалы для практических работ? 

Анастасия Михеева
Анастасия Михеева
Россия
Денис Скрипов
Денис Скрипов
Россия, Омск, ОмГУ им. Ф.М. Достоевского