- MSНFlexGrid і MSFlexGrid - елементи управління для відображення і оперування даними в табличному форматі
- Практична робота 28. MSFIexGrid
- Реплікація і синхронізація баз даних
- Практична робота 29. Реплікація і синхронізація баз даних
MSНFlexGrid і MSFlexGrid - елементи управління для відображення і оперування даними в табличному форматі
Елемент управління MSFlexGrid, виведений на форму при роботах з базами даних, являє собою сітки рядків і стовпців. MSFlexGrid підтримує такі функції:
- читання даних, якщо елементу MSFlexGrid призначений елемент керування даними; зв'язування даних для читання,
- динамічна перестановка стовпців і рядків; автоматична перегрупування даних при упорядкуванні стовпців,
- адаптація до існуючого програмного коду для пов'язаного елемента управління DataGrid,
- управління приміщенням в клітинку тексту / графіки; перенос тексту в осередках.
Висновок MSFlexGrid на панель елементів управління: меню Проект (Project) Компоненти (Components) 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
- Створити базу даних 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
- створити на формі об'єкти (див. Мал. 4.4 і код, даний нижче):
- ввести код, даний нижче, пояснення дані під коментарями: 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
- стартувати проект, ввести в текстове поле SQL-рядок (запит) SELECT * FROM student, зробити клацання на командній кнопці, в виведеному стандартному діалоговому вікні Open вибрати базу даних stud.mdb. У таблицю MSFlexGrid виводяться результати запиту. Одночасно в список елемента управління ComboBox виводяться імена всіх наявних таблиць, Мал. 4.4 .
- вибрати таблицю в списку ComboBox, змінити запит - ввести новий запит для іншої таблиці (ввести цей запит в текстове поле), зробити клацання на командній кнопці, спостерігати результат.
Реплікація і синхронізація баз даних
Реплицировать означає тиражувати. Якщо установа має в своєму розпорядженні мережею, тоді доцільно мати основну копію бази даних (головна репліка) в головному підрозділі фірми і кілька еe копій (реплік) в інших приміщеннях / на інших територіях. Користувачі баз даних на інших територіях в процесі роботи (наприклад, в результаті реалізації / придбання виробів, перелік яких містить база даних) роблять зміни таблиць в своїх копіях (репліках). Пізніше (періодично) кожний повинен внести їм зроблені зміни в головну репліку і отримати інформацію про зміни, зроблених іншими користувачами. Це процес синхронізації - приведення Реплікаційний набору в стан, коли репліки однакові.
Нехай є база даних sabi.mdb c кількома таблицями. Перетворимо sabi.mdb в головну репліку. Створимо на дисковому пристрої С: каталог rep, який будемо використовувати для проекту. Спочатку потрібно переглянути базу даних в додатку Visdata: меню Додавання Візуальний менеджер даних (Visual Data Manager) файл Відкрити базу даних Microsoft Access в виведеному списку вибрати файл sabi.mdb. У вікно програми виводиться список таблиць бази даних. Існують також системні таблиці; для їх виведення на екран за допомогою команди: Utility Preferences Include System Tables. Представляє особливий інтерес об'єкт Properties - властивості вихідної бази даних: Name = C: \: sabi.mdb, Connect *,:.
Практична робота 29. Реплікація і синхронізація баз даних
Для набуття навичок реплікації і синхронізації потрібно виконати кілька етапів:
- зробити посилання на бібліотеку Microsoft Jet and Replication Objects 2.1 Library (меню Проект посилання бібліотека OK) і бібліотеку, що забезпечує роботу з DAO: Microsoft DAO 3,54 Objects Library,
- створити головну репліку (Command1_Click (), див. нижче):
- відкрити базу даних,
- створити властивість Replicable і привласнити йому значення "Т",
- Створено копію головної репліки (Command2_Click (), див. нижче):
- відкрити базу даних,
- використовувати метод MakeReplica,
- внести зміни до головного репліку і еe копію:
- внести зміну в 1-ій записи головною репліки і копії,
- зафіксувати зміну значення поля s_Generation (див. нижче) при зміні вмісту таблиць; там з'являться нулі замість одиниць і відповідний запис буде пізніше скопійована при виконанню процедури синхронізації,
- виконання синхронізації - копіювання змін головною репліки в репліку і навпаки (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,
- Зробити зміни в репліці 1 раз, в головній репліці - 2 рази. Зробити клацання на третій командній кнопці, потім перевірити результат синхронізації.