Опубликован: 04.07.2006 | Уровень: для всех | Доступ: свободно
Лекция 4:

Базы данных

MSНFlexGrid и MSFlexGrid - элементы управления для отображения и оперирования данными в табличном формате

Элемент управления MSFlexGrid, выводимый на форму при работах с базами данных, представляет собой cетку строк и столбцов. MSFlexGrid поддерживает следующие функции:

  • чтение данных, если элементу MSFlexGrid назначен элемент управления данными; связывание данных для чтения,
  • динамическая перестановка столбцов и строк; автоматическая перегруппировка данных при упорядочении столбцов,
  • адаптация к существующему программному коду для связанного элемента управления DataGrid,
  • управление помещением в ячейку текста/графики; перенос текста в ячейках.

Вывод MSFlexGrid на панель элементов управления: меню Проект (Project) \to Компоненты (Components) \to Microsoft FlexGrid 6.0.

Свойство Rows таблицы, выводимой на форму при использовании MSFlexGrid, можно использовать для задания количества строк в таблице, а свойство Cols - для задания количества столбцов. На рис. 4.4 представлена сетка MSFlexGrid. В качестве первого индекса ячейки используется номер строки, в качестве второго - номер столбца. Например, ячейка в левом верхнем углу таблицы имеет адрес 0, 0. Чтобы поместить данные в ячейку таблицы MSFlexGrid, нужно использовать свойство TextMatrix и задать координаты ячейки.

Пример 1: поместить слово "элемент" в ячейку (2, 1): MSFIexGridl.TextMatrix (2,1) = "элемент"

Пример 2: ввести число 3000 в ячейку (5, 2): MSFIexGridl.TextMatrix (5,2) = 3000

MSFlexGrid обеспечивает множество стандартных стилей форматирования ячеек. Если при работе нужно добавить новые строки в таблицу, то используется метод Addltem.

MSHFIexGrid - Microsoft Hierarchical FlexGrid - иерархическая гибкая таблица поддерживает по сравнению с MSFIexGrid множество дополнительных функций:

  • ActiveX Data Binding - привязывание данных ActiveX, когда свойства DataSource и DataMember элемента управления связаны с поставщиком данных,
  • связывание через Data Binding Manager - Диспетчер связывания данных в Visual Basic,
  • привязывание непосредственно к сгруппированным и связанным наборам записей ADO ( ADO RecordSet ) из иерархии Command (Управление),
  • создание отображений сгруппированных и связанных наборов RecordSet.

Практическая работа 28. MSFIexGrid

  1. Создать базу данных ACCESS с таблицами, например, student (см. табл. 4.7) и др, сохранить в файле stud.mdb; впоследствие это имя выбирается в стандартном диалоговом окне Open,
    Таблица 4.7. Содержимое таблицы student базы данных
    Num Name Geschl Geb_dat Gruppe
    1012 Wolf M 20.08.76 Kp-3
    1013 Hase M 30.09.77 Kp-4
    1021 Weiss W 24.06.77 Kp-3
    1040 Kalb M 23.03.77 Kp-3
  2. создать на форме объекты (см. рис. 4.4 и код, данный ниже):
    • MSFlexGrid (см. выше),
    • CommonDialоg: Проект \to Компоненты \to Управление \to Microsoft CommonDialog Control,
    • CommandButton (Name = Command1),
    • Data (Name = Data1, Connect = Accеss),
    • ComboBox (Name = Combo1, Style = 0), см. 10.1,
    • TеxtBox (Name = Text1),
  3. ввести код, данный ниже, пояснения даны под комментариями:
    Private Sub Command1_Click()
    Dim i As Integer
    ' очистить свойство объекта CommonDialog, содержащее 
    ' имя базы данных 
    CommonDialog1.FileName = ""
    ' стартовать CommonDialog 
    CommonDialog1.Action = 1
    ' выводится стандартное диалоговое окно Open; 
    ' нужно выбрать требуемую базу данных.
    
    ' связать объект Data1 с файлом базы данных, выбранным с
    ' помощью элемента управления CommonDialog1 
    Data1.DatabaseName = CommonDialog1.FileName 
    ' обновить содержимое элемента управления Data1 
    Data1.Refresh
    
    ' читать в цикле имена таблиц базы данных и занести
    ' их в ComboBox (AddItem)
    For i = 0 To Data1.Database.TableDefs.Count - 1
    ' свойство Count определяет количестко элементов 
    Combo1.AddItem (Data1.Database.TableDefs(i).Name)
    Next i
    ' после добавления имeн таблиц в ComboBox очистить теку-
    ' щее значение свойства Text 
    Combo1.Text = ""
    
    ' введeнный в текстовое поле строку SQL присвоить 
    ' свойству RecordSource элемента Data1 
    Data1.RecordSource = Text1.Text
    ' обновить содержимое Data1. Реализуется запрос, т.к 
    ' свойству RecordSource присвоено значение строки SQL
    Data1.Refresh
    
    ' оставшаяся часть кода может быть заменена
    ' следующим оператором присваивания: 
    ' MSFlexGrid1.DataSource = Data1 в Окне свойств. Эта
    ' часть кода нужна лишь для того чтобы пользователь мог
    ' освоить работу с ячейками MSFlexGrid. 
    ' Свойство MSFlexGrid1.Cols - характеризует количество 
    ' столбцов в сетке; Data1.Recordset.Fields.Count - количество 
    ' столбцов таблицы базы данных, к которой сделан 
    ' SQL-запрос
    MSFlexGrid1.Cols = Data1.Recordset.Fields.Count
    ' MSFlexGrid1.Rows - количество строк в сетке 
    ' установить равным 1
    MSFlexGrid1.Rows = 1
    
    ' в элементе управления MSFlexGrid1 доступ к строкам и 
    ' столбцам проводится начиная с ячейки (0,0),
    ' свойство TextMatrix(X, Y) позволяет получить доступ 
    ' к отдельным ячейкам таблицы 
    
    For i = 0 To Data1.Recordset.Fields.Count - 1
    ' занести название имeн полей таблицы базы данных в 
    ' первую строку MSFlexGrid1
    MSFlexGrid1.TextMatrix(0, i) = Data1.Recordset.Fields(i).Name
    Next i
    
    ' проверить, является ли запись в таблице (строка) по-
    ' следней; организовать цикл прохода по строкам 
    Do While Not Data1.Recordset.EOF
    ' увеличить количество строк в MSFlexGrid на единицу
    MSFlexGrid1.Rows = MSFlexGrid1.Rows + 1
    
    ' цикл переноса данных из Data1 в MSFlexGrid1
    For i = 0 To Data1.Recordset.Fields.Count - 1
    ' перенос данных данной строки (по полям). Если данные в
    ' ячейке Data1 имеются, то перенести их в 
    ' таблицу MSFlexGrid1
    If Not Data1.Recordset.Fields(i) = "" Then
    MSFlexGrid1.TextMatrix(MSFlexGrid1.Rows - 1, i) = Data1.Recordset.Fields(i)
    End If
    ' конец цикла переноса данных из элемента управления Data1 
    ' в таблицу MSFlexGrid1 для одной строки
    Next i
    
    ' использовать метод MoveNext - переход к 
    ' следующей строке
    Data1.Recordset.MoveNext
    Loop
    End Sub
  4. стартовать проект, ввести в текстовое поле SQL-строку (запрос) SELECT * FROM student, сделать щелчок на командной кнопке, в выведенном стандартном диалоговом окне Open выбрать базу данных stud.mdb. В таблицу MSFlexGrid выводятся результаты запроса. Одновременно в список элемента управления ComboBox выводятся имена всех имеющихся таблиц, рис. 4.4.
    MSFlexGrid

    Рис. 4.4. MSFlexGrid
  5. выбрать таблицу в списке ComboBox, изменить запрос - ввести новый запрос для другой таблицы (ввести этот запрос в текстовое поле), сделать щелчок на командной кнопке, наблюдать результат.

Репликация и синхронизация баз данных

Реплицировать означает тиражировать. Если учреждение располагает сетью, тогда целесообразно иметь основную копию базы данных (главная реплика) в главном подразделении фирмы и несколько еe копий (реплик) в других помещениях/на других территориях. Пользователи баз данных на других территориях в процессе работы (например, в результате реализации/приобретения изделий, перечень которых содержит база данных) делают изменения таблиц в своих копиях (репликах). Позднее (периодически) каждый должен внести им сделанные изменения в главную реплику и получить информацию об изменениях, сделанных другими пользователями. Это процесс синхронизации - приведение репликационного набора в состояние, когда реплики одинаковы.

Пусть имеется база данных sabi.mdb c несколькими таблицами . Превратим sabi.mdb в главную реплику. Создадим на дисковом устройстве С: каталог rep, который будем использовать для проекта. Сначала нужно просмотреть базу данных в приложении Visdata: меню Добавления \to Визуальный менеджер данных (Visual Data Manager) \to Файл \to Открыть базу данных \to Microsoft Access \to в выведенном списке выбрать файл sabi.mdb. В окно приложения выводится список таблиц базы данных. Существуют также системные таблицы; для их вывода на экран использовать команду: Utility \to Preferences \to Include System Tables. Представляет особый интерес объект Properties - свойства исходной базы данных: Name = C:\ : sabi.mdb, Connect*,: .

Практическая работа 29. Репликация и синхронизация баз данных

Для приобретения навыков репликации и синхронизации нужно выполнить несколько этапов:

  1. сделать ссылку на библиотеку Microsoft Jet and Replication Objects 2.1 Library (меню Проект \to Ссылки \to библиотека \to OK) и библиотеку, обеспечивающую работу с DAO: Microsoft DAO 3,54 Objects Library,
  2. создать главную реплику ( Command1_Click (), см. ниже):
    • открыть базу данных,
    • создать свойство Replicable и присвоить ему значение "Т",
  3. cоздать копию главной реплики ( Command2_Click (), см. ниже):
    • открыть базу данных,
    • использовать метод MakeReplica,
  4. внести изменения в главную реплику и еe копию:
    • внести изменение в 1-ой записи главной реплики и копии,
    • зафиксировать изменение значения поля s_Generation (см. ниже) при изменении содержимого таблиц; там появятся нули вместо единиц и соответствующая запись будет позднее скопирована при выполении процедуры синхронизации,
  5. выполнение синхронизации - копирование изменений главной реплики в реплику и наоборот ( Command3_Click (), см. ниже):
    • открыть базу данных,
    • использовать метод Cynchronize объекта Database.

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

  • ввести код процедур Command1_Click () и Command2_Click (), см. ниже,
  • стартовать первую процедуру (создание главной реплики),
  • после остановки выполнения проекта открыть базу данных (главную реплику) в приложении Visdata, найти добавленные поля каждой таблицы: в каждую таблицу главной реплики добавлены 3 поля:
    • s_Generation, идентифицирующее записи, которые были изменены Вами/сотрудниками учреждения. После изменения записей, содержимое поля меняется с 1 на 0 (сначала везде была 1) и в процессе синхронизации, т.е. позднее, пересылаются только записи, которым соответствует значение поля 0,
    • s_GUID, содержащее идентификатор каждой записи,
    • s_Lineage, хранящее количество изменений записи.

Пояснения: после создания главной реплики в главной реплике появились новые системные таблицы, появились дополнительные свойства главной реплики. Свойство Replicable (установлено в Т) означает, что для базы данных можно создавать реплики. После создания главной реплики появились новые свойства любой таблицы главной реплики.

  • стартовать вторую процедуру (создание реплики),
  • после остановки выполнения проекта просмотреть базу данных в приложении Visdata (в базе данных содержатся те же самые таблицы),
  • открыть таблицу MSysReplicas, содержащую информацию о каждом члене репликационного набора, где появилась вторая запись из-за создания реплики (ранее была только одна запись),
  • поочерeдно открыть базы данных (главную реплику и реплику) в любом приложении, предназначенном для работы с базами данных и сделать изменения в одной записи какой-либо таблицы. Наблюдать изменения поля s_Generation - появление чисел 0 вместо 1 после внесения изменений Вами/сотрудниками учреждения в записи таблиц главной реплики и реплики,
  • создать и стартовать процедуру Command3_Click (), см. код ниже,
  • после остановки выполнения проекта загрузить реплику в приложение Visdata, просмотреть содержимое соответствующей таблицы (в этой таблице появились изменения, сделанные ране в главной реплике) и значения поля s_Generation: в процессе синхронизации значение поля увеличивается на 1 при каждом изменении записи.

    В тех случаях, когда в разных репликах изменяется одна и та же запись несkолько раз, то в итоге в процессе синхронизации копируются данные той реплики, которая изменила запись большее число раз. В случае равенства числа изменений Microsoft Jet выбирает запись из таблицы с наименьшим значением ReplicaID,

  • cделать изменения в реплике 1 раз, в главной реплике - 2 раза. Сделать щелчок на третьей командной кнопке, затем проверить результат синхронизации.
Private Sub Command1_Click() ' создание главной реплики
Dim dbHaupt As Database, replicaProp As Property
' открыть базу
Set dbHaupt = OpenDatabase("C:\rep\sabi.mdb", True) 
' создать свойство Replicable
Set replicaProp = dbHaupt.CreateProperty("Replicable", dbText, "T")
dbHaupt.Properties.Append replicaProp ' добавить свойство
' свойству присвоить значение True
dbHaupt.Properties("Replicable") = "T" 
End Sub

Private Sub Command2_Click() ' создание реплики
Dim dbHaupt As Database
' открыть базу
Set dbHaupt = OpenDatabase("C:\rep\sabi.mdb", True) 
'создать новый объект репликационного набора
dbHaupt.MakeReplica "C:\rep\sabicopy.mdb", "Replica of " & "dbHaupt"
dbHaupt.Close
End Sub

Private Sub Command3_Click() ' процесс синхронизации
Dim dbHaupt As Database
' открыть базу данных - главную реплику
Set dbHaup = OpenDatabase("C:\rep\sabi.mdb", True) 
' копирование изменений 
dbHaupt.Synchronize "C:\rep\sabicopy.mdb"
End Sub
Константин Новков
Константин Новков

Лекция 3: 2

Для создания возможности использования объектов файловой системы нужно подключить библиотеку DLL, содержащую эти объекты: меню Разработать > Ccылки > Microsoft Scriptlet Component (сделать щелчок на соответствующем элементе управления CheckBox).

Не могу найти меню Разработать (Develop)>Links и т.д.

антонина квасова
антонина квасова