Статьи

НОУ ІНТУЇТ | лекція | Бази даних

  1. MSНFlexGrid і MSFlexGrid - елементи управління для відображення і оперування даними в табличному форматі
  2. Практична робота 28. MSFIexGrid
  3. Реплікація і синхронізація баз даних
  4. Практична робота 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

  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 і код, даний нижче):
  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 .
  5. вибрати таблицю в списку 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. Реплікація і синхронізація баз даних

Для набуття навичок реплікації і синхронізації потрібно виконати кілька етапів:

  1. зробити посилання на бібліотеку Microsoft Jet and Replication Objects 2.1 Library (меню Проект посилання бібліотека OK) і бібліотеку, що забезпечує роботу з DAO: Microsoft DAO 3,54 Objects Library,
  2. створити головну репліку (Command1_Click (), див. нижче):
    • відкрити базу даних,
    • створити властивість Replicable і привласнити йому значення "Т",
  3. Створено копію головної репліки (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,

  • Зробити зміни в репліці 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

Новости