Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
19
Добавлен:
14.12.2015
Размер:
168.07 Кб
Скачать

4 4. Лекция: Базы данных: версия для печати и PDA

Большой материал по базам данных включает, среди прочего, DAO, ADO, использование соответствующих элементов управления, программное создание баз данных и работу с ними, репликацию и синхронизацию баз данных. В каждом случае материал поддерживается практическими работами. Использование элемента управления Data Элемент управления Data обеспечивает связь проекта Visual Basic с файлом базы данных. Следующие свойства элемента управления Data используются при реализации связи, табл. 4.1.

  Таблица 4.1. Свойства элемента управления Data Свойство Пример значения свойства Connect Access DatabaseName A:\Studium.mdb ' имя базы данных RecordSource software ' имя таблицы   Для отображения/редактирования данных в простейшем случае может быть использовано текстовое поле, поле списка и т.д., при этом используются их свойства, данные в табл. 4.2:

  Таблица 4.2. Свойства элемента управления TextBox Свойство Пример значения свойства DataSource Data1 ' элемент управления Data с его номером DataField Hersteller ' имя поля таблицы базы данных. Замечание: для каждого элемента управления TextBox не забудьте установить свое значение этого свойства   Практическая работа 21. Базы данных; элемент управления Data (считать таблицу в двумерный массив и вывести на экран в массив поля списка). Использование стандартного модуля Задание: создать таблицу базы данных, содержащую данные о 9 программных продуктах с полями: Hersteller - изготовитель, Typ - тип продукта, Preis - цена, Tendenz - тенденция, Anbieter - распространитель, Ort - местность, табл. 4.3:

  Таблица 4.3. Software Коde Hersteler Typ Preis Tendenz Anbieter Ort 1 Ahead Nero Burning 59 A Media Markt Berlin-Tegel 2 Steinberg Maxima Studio 59 В Media Markt Koeln 3 Norton Anti Virus 70 A Schaubandt Flensburg 4 G Data Power Adress-manager 70 A Pro Markt Berlin 5 Top Systems Win Zip 89 B Media Markt Stuttgart 6 Alfons Lernwelt Deutsch 98 A Media Markt Berlin-NeuKoeln 7 Microsoft Encarta 99 A Saturn Duesseldorf 8 Cequadrat Picture it 99 A Schaubandt Isenhagen 9 Corel Corel Draw 379 A US-Electronic Hilden   Следует создать стандартный модуль для обеспечения использования переменных в (данном случае) в 2-х формах. Первую форму использовать для связи проекта с базой данных (использовать элементы управления Data и TextBox) и создания двумерного массива, соответствующего таблице базы данных. Вторую форму использовать для вывода двумерного массива на экран (в массив поля списка) и нахождения максимальной цены программного продукта.

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

  Создать модуль

на первой форме (рис.4.1): элементы управления Data и массив Text1(7) для вывода 7 полей таблицы на экран, 3 командные кнопки: для процедуры построчного считывания записей таблицы в двумерный массив,

для процедуры разового считывания тех же данных в тот же массив,

для перехода ко второй форме,

 

на второй форме: массив List1 (9) для вывода данных двумерного массива на экран, элемент управления Label1, 2 командные кнопки для: процедуры вывода двумерного массива на экран в массив поля списка,

процедуры нахождения максимальной цены продукта и вывода в поле Label1 результата,

 

присвоить значения свойствам элемента управления Data и свойствам элементов массива текстового поля (примеры даны в табл. 4.1: и табл. 4.2:),

описать переменные в области модуля и ввести код, данный ниже (пояснения даны под комментариями), стартовать проект

 

   

Рис. 4.1.  Доступ к данным; использование элемента управления Data, вид формы Form 1  

   

Рис. 4.2.  Доступ к данным - Data, вид формы Form2  

  (General) (Declarations) ' описание двумерного массива, соответствующего ' таблице software базы данных Public mass(9, 6) As Variant Public i As Integer, j As Integer, k As Integer ' переменная-счетчик для работы с номерами записей ' таблицы Public n As Integer ' переменная для хранения максимальной цены продукта Public max As Integer Form1

  ' Последовательное считывание данных таблицы software ' в массив текстового поля. Щелчком на правой ' кнопке элемента Data и последовательным ' нажатием командной кнопки Command1 (Caption = Lesen1) ' присвоить текущему элементу массива ' mass(n, j) текущее значение свойства Text ' элементов массива текстового поля Private Sub Command1_Click() mass (n, 1) = Text1(1): mass (n, 2) = Text1(2) mass (n, 3) = Text1(3): mass (n, 4) = Text1(4) mass (n, 5) = Text1(5): mass (n, 6) = Text1(6) n = n + 1 ' увеличить значение переменной-счeтчик на 1 End Sub ' автоматическое считывание данных в массив ' (Caption = Lesen2) Private Sub Command2_Click() For n = 0 To 8 mass (n, 1) = Text1(1): mass (n, 2) = Text1(2) mass (n, 3) = Text1(3): mass (n, 4) = Text1(4) mass (n, 5) = Text1(5):mass (n, 6) = Text1(6) ' MoveNext - метод, обеспечивающий автоматический ' переход к следующей записи Data1.Recordset.MoveNext Next n End Sub ' Методы MoveFirst, MoveLast, MoveNext, MovePrevious ' находят в указанном объекте Recordset соответствующую ' запись и делают еe текущей Private Sub Command3_Click() Unload Me Form2.Show End Sub Form2

  ' вывод данных двумерного массива на экран в ' массив поля списка Private Sub Command1_Click() For i = 0 To 8 For j = 1 To 6 List1(i).List(j - 1) = mass (i, j) Next j, i End Sub ' нахождение максимальной цены продукта и вывод в ' поле метки результата Private Sub Command2_Click() max = mass(0,3) For k = 1 To 8 If mass (k, 3) > max Then max = mass (k, 3) Next k Label1.Caption = max End Sub Объекты доступа к данным DAO - Data Access Object Объекты доступа к данным - это объекты, представляющие структуру базы данных и её содержимое. Программист может использовать DAO для создания и изменения таблиц и запросов, для защиты баз данных или для доступа к данным внешнего источника. DAO позволяет обрабатывать из проекта Visual Basic данные, находящиеся в базе данных.

  Для работы с источниками данных используется иерархия объектов Microsoft Jet, табл. 4.4:

  Таблица 4.4. Иерархия объектов, фрагмент DBEngine Workspaces Properties Users... Groups... Databases TableDef... QueryDef ...Recordset ...Relation Field... Index Field ...Field   DBEngine - объект самого верхнего уровня в иерархии объектов Microsoft Jet обеспечивает связь приложения с СУБД Microsoft DBMS. Система управления базами данных - это множество процедур; происходит взаимодействие с набором процедур-трансляторов и запросы пользователя переводятся на язык, воспринимаемый базой данных. Процедуры-трансляторы есть для баз данных формата Microsoft Access, FoxPro и т.д.; имеются трансляторы для источников данных ODBC (Open Databasе Connectivity - открытое взаимодействие с базами данных). С помощью машины Microsoft Jet можно обращаться к файлам данных любого формата (если есть соответствующие процедуры-трансляторы). Объект DBEngine имеет свойства и методы и содержит коллекции - объекты одного типа,

коллекция Properties содержит свойства объекта DBEngine,

коллекция Workspaces. Объект Workspace - это рабочее пространство, которое определяет именованный сеанс работы пользователя. Коллекция Workspaces содержит все определeнные рабочие пространства. Workspaсe имеет свойства (Name - имя рабочего пространства, UserName - имя пользователя, IsolateODBCTrans используется для контроля за числом соединений ODBC, установленных с базой данных во время сеанса) и 2 метода - CreateDatabase и OpenDatabase,

Users - учетные записи пользователей,

Groups - учетные записи группы пользователей,

коллекция Databases содержит все объекты Database - базы данных, открытые для данного объекта Workspace. Объект Database создается каждый раз, когда пользователь открывает базу данных с помощью метода OpenDatabase. Содержит несколько свойств и методов (Name, Connect, : Connection ), например, метод OpenRecordset служит для доступа к таблицам баз данных,

TableDef - определение таблицы,

QueryDef - определение запроса,

Recordset - объект, содержащий наборы записей; имеется большое количество свойств и методов, доступность которых зависит от того, в каком рабочем пространстве был создан объект Recordset - Microsoft Jet или ODBCDirect. Технология ODBCDirect - модель доступа к данным ODBC. Частью этой модели доступа является объект Connection. Эта модель даeт возможность программисту обращаться к источникам данных ODBC напрямую, не используя объекты данных Microsoft Jet.

Relation - содержит информацию об установленных между таблицами отношениях (указание полей и типа связей),

Field - содержит информацию о поле таблицы, содержит коллекцию Properties, имеет несколько свойств и методов,

Index - определение индекса (Index - это совокупность перекрестных ссылок между полями таблицы, они создаются для ускорения поиска записей).

  Объекты DAO используются в определeнном порядке. Сначала с помощью ключевого слова Set формируется Workspace, затем Database, Recordset и другие объекты. Для открытия базы данных используется метод OpenDatabase объекта Workspace, а для открытия таблицы - метод OpenRecordset объекта Database. Для получения доступа к определенному количеству строк таблицы используется метод GetRows(numrows) объекта Recordset, numrows - это число строк. Строки/столбцы нумеруются, начиная с 0.

  Практическая работа 22. Базы данных; DAO Создать фрагмент базы данных Access: внутренний валовой продукт США (в американской статистике внутренний валовой продукт подразделяется на категории: сельскохозяйственные товары, услуги и промышленные сооружения) с полями, указанными в табл. 4.5:,

вывести в поле ListBox записи поля structures (см. процедуру Form_Load()),

вычислить средние значения за каждые 2 года (как пример - 4-го поля - объем промышленных сооружений) и результат занести в файл (см. процедуру Form_Load()),

вывести записанный результат из файла в поле списка, см. процедуру Command1_Click().

  Следует сделать ссылку на библиотеку объектов доступа к данным: Проект Информация Microsoft DAO 3,51 Object Library.

  Таблица 4.5. Внутренний валовой продукт США # year population incomepercapital structures goods services CDP 1 1997 245 16634 479 1942 2460 4836 2 1998 248 17709 511 20928 2634 4884 3 1999 249 18725 512 2167 2834 4848 4 2000 252 18523 466 21193 3012 6020   Создать необходимые элементы упрaвления и ввести код, данный ниже, пояснения даны под комментариями, затем стартовать проект.

  (General) (Declarations) Dim DB As Database, Table As Recordset ' описание переменной, характеризующей ячейки таблицы Dim R As Variant ' описание переменной для работы с полями таблицы Dim K As Integer Dim S(4) As Single ' описание массива средних значений Dim a1 As Single, a2 As Single, I As Integer, J As Integer Private Sub Form_Load() ' реализация доступа к данным Set DB = Workspaces(0).OpenDatabase("A:\Dao1.mdb") Set Table = DB.OpenRecordset("dao4") R = Table.GetRows(4) For I = 0 To 3 ' вывод на экран 4-ого поля таблицы ' базы данных List1(0).List(I) = R(4, I) Next I ' открыть файл для записи Open "A:\DATA.TXT" For Output As #1 K = 4 ' работа с 4-м полем таблицы For I = 0 To 1 ' рассматриваются I блоков (2) ' по J элементов (2) S(K) = 0 For J = 0 To 1 S(K) = S(K) + R(K, I * 2 + J) Next J Write #1, S(K) / 2 ' среднее значение за каждые 2 года Next I Close #1 ' закрыть файл End Sub Private Sub Command1_Click() ' открыть файл для чтения Open "A:\DATA.TXT" For Input As #1 Input #1,a1, a2 List1(1).List(0) = a1 ' вывод средних значений в поле списка List1(1).List(1) = a2 End Sub Практическая работа 23. Базы данных. Свойства рабочего пространства В разделе 4.2 перечислены свойства рабочего пространства. Введите код, данный ниже, обеспечивающий вывод на экран этих свойств; результат выполнения проекта дан на рис. 4.3.

  Private Sub Command1_Click() Dim WS As Workspace Dim property As Object ' описание объектной переменной ' описание переменной для хранения сообщения Dim str As String ' проход по всем рабочим пространствам For Each WS In DBEngine.Workspaces ' проход по всем свойствам текущего Workspace For Each property In WS.Properties str = str & property.Name & "=" & property.Value Next MsgBox str, vbInformation 'синтаксис функции MsgBox дан в работе 44 Next End Sub  

Рис. 4.3.  Свойства рабочего пространства  

  Практическая работа 24. Базы данных. Свойства набора записей Объекты, содержащие наборы записей, представляют наибольший интерес. Ввести код, данный ниже, пояснения даны под комментариями к коду, затем стартовать проект, сделать щелчок на командной кнопке, проанализировать выведенные данные.

  Private Sub Command1_Click() Dim WS As Workspace, db As Database Dim property As Рroperty, recSet As Recordset Dim strWS As String, strDB As String, strRS As String, str As String strWS = "WS" ' задать значения переменным strDB = "A:\dar.mdb" ' использование SQL-запроса strRS = "Select * FROM tr" ' установить соединение Set WS = DBEngine.CreateWorkspace(strWS, "admin", "") Set db = WS.OpenDatabase(strDB) Set recSet = db.OpenRecordset(strRS, dbOpenDynaset) For Each property In recSet.Properties ' вывод результатов str = str & property.Name & vbCrLf Next MsgBox str, vbInformation, " RecordSet" recSet.Close ' закрыть объекты db.Close: WS.Close Set property = Nothing: Set recSet = Nothing Set db = Nothing: Set WS = Nothing End Sub Использование инструкций SQL При работе с базами данных проекте Visual Basic часто возникает необходимость создать инструкцию SQL. Простейший способ создания инструкции SQL заключается в создании запроса на бланке запроса, последующем использовании меню Вид режим SQL ; копировании создаваемой автоматически в выводимом окне инструкции SQL и вставке еe в процедуру.

  Практическая работа 25. Базы данных. Использование инструкций SQL При работе с объектом QueryDef (запрос) должна быть использована допустимая строка SQL.

  25a. Создать объект QueryDef В данном примере создаваемый запрос возвращает данные таблицы Products базы данных Nwind.mdb (Microsoft Visual Studio).

  Последовательность действий: создать требуемые элементы управления, ввести код, данный ниже, выполнить запрос, прочитать результат, он находится в запросе nin.

  Private Sub Command1_Click() Dim dbs As Database, qdf As QueryDef Dim strSQL As String, Table As Recordset Set dbs = Workspaces(0).OpenDatabase("D:\Program_ Files\Microsoft Visual Studio\VB98\Nwind.mdb") Set Table = dbs.OpenRecordset("Products") strSQL = "SELECT [Product List].ProductID, [Product_ List].ProductName FROM Products AS [Product List] WHERE_ ((([Product List].Discontinued) = No)) ORDER BY [Product_ List].ProductName;" Set qdf = dbs.CreateQueryDef("nin", strSQL) 'замечание: nin - имя запроса End Sub 25b. Создать аналогичный объект QueryDef Создать объект QueryDef с использованием инструкции SQL. Создаваемый запрос возвращает количество товаров, проданных после 21.01.98, содержимое таблицы базы данных dar1.mdb приведено в табл. 4.6,

ввести код, сделать щелчок на командной кнопке, результат находится в запросе nin1.

  Private Sub Command2_Click() Dim dbs1 As Database, qdf1 As QueryDef Dim strSQL1 As String Dim Table1 As Recordset Set dbs1 = Workspaces(0).OpenDatabase("A:\dar1.mdb") Set Table1 = dbs1.OpenRecordset("Verkauf") strSQL1 = "SELECT menge FROM verkauf WHERE datum_ >#21/01/98#;" Set qdf1 = dbs1.CreateQueryDef("nin1", strSQL1) ' замечание: nin1 - имя запроса End Sub Таблица 4.6. Таблица базы данных Verkauf name kunde menge prеis datum vernseheapparat a 45 879 23.09.99 buecher b 89 56 21.01.98 rechner c 345 56 04.05.97 telefon d 678 567 14.11.99   Практическая работа 26. SQL- инструкция. Использование переменной в запросе Часто при выполнении запросов нужно использовать данные, вводимые или изменяемые пользователем. В этом случае нужно вводить в запрос переменные или элемент управления (см. Практическая работа 27).

  В примере создаeтся объект QueryDef, в котором используется значение, сохраняемое в переменной datumStart (As Date). Запрос возвращает из таблицы Verkauf (см. табл. 4.6) количество товаров, проданных позднее вводимой пользователем (в диалоговом режиме) даты datumStart. Ввести код, сделать щелчок на командной кнопке, ввести дату, результат находится в запросе nin2.

  Private Sub Command3_Click() Dim datumStart As Date, dbs2 As Database, qdf2 As QueryDef Dim strSQL2 As String, Table2 As Recordset Set dbs2 = Workspaces(0).OpenDatabase("A:\dar1.mdb") Set Table2 = dbs2.OpenRecordset("Verkauf") strSQL2 = "SELECT verkauf.menge, verkauf.datum FROM verkauf_ WHERE verkauf.datum > datumStart;" Set qdf2 = dbs2.CreateQueryDef("nin2", strSQL2) ' Замечание: дату вводить в формате: 21-01-98; nin2 ' - имя запроса End Sub Практическая работа 27. SQL- инструкция. Использование в запросе элемента управления Создать объект QueryDef, в котором используется элемент управления. Обратить внимание на ссылку на элемент управления (strSQL3 = : > Forms!verkauf!datum). Ввести код, сделать щелчок на командной кнопке, ввести дату, результат находится в запросе nin3.

  Private Sub Command4_Click() Dim dbs3 As Database, qdf3 As QueryDef Dim strSQL3 As String, Table3 As Recordset Set dbs3 = Workspaces(0).OpenDatabase("A:\dar1.mdb") Set Table3 = dbs3.OpenRecordset("Verkauf") strSQL3 = "SELECT verkauf.menge, verkauf.datum _ FROM verkauf_ WHERE verkauf.datum > Forms!verkauf!datum;" Set qdf3 = dbs3.CreateQueryDef("nin3", strSQL3) ' замечание: дату вводить в формате: 21-01-98; nin3 - ' имя запроса End Sub MSНFlexGrid и MSFlexGrid - элементы управления для отображения и оперирования данными в табличном формате Элемент управления MSFlexGrid, выводимый на форму при работах с базами данных, представляет собой cетку строк и столбцов. 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 и код, данный ниже): MSFlexGrid (см. выше),

CommonDialоg: Проект Компоненты Управление Microsoft CommonDialog Control,

CommandButton (Name = Command1),

Data (Name = Data1, Connect = Accеss),

ComboBox (Name = Combo1, Style = 0), см. 10.1,

TеxtBox (Name = Text1),

 

ввести код, данный ниже, пояснения даны под комментариями: 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.  

Рис. 4.4.  MSFlexGrid  

 

выбрать таблицу в списке 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 и присвоить ему значение "Т",

 

cоздать копию главной реплики ( 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,

 

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 ADO Общие сведения Модель ADO - ActiveX Data Objects разработанная корпорацией Microsoft представляет собой семейство объектов, используемых для работы с источниками данных.

  OLE DB - основа универсальной модели доступа к данным представляет собой набор интерфейсов COM, которые обеспечивают доступ программ к данным. Способ использования приложением функциональных возможностей ADO частично определяется наличием поставщика OLE DB для данных. ADO разработан для работы с OLE DB, если поставщик OLE DB недоступен, можно использовать ADO для непосредственного соединения с помощью драйвера ODBC.

  Наиболее простое средство реализации ADO в приложениях - использование элемента управления ADO Data.

  Когда ADO связывается с базой данных, работа происходит через сетевую библиотеку. Выбор сетевой библиотеки определяется поставщиком и конфигурацией системы.

  Объекты Объект Connection - соединение позволяет приложениям установить связь с источником данных. После этого объект Connection можно употреблять для исполнения SQL-запросов, он может также использоваться объектами Command и Recordset. Для установления соединения с источником данных используется метод Open, для закрытия соединения - метод Close. Свойства объекта Connection:

  ConnectionTimeout. Указывает время ожидания выполнения операции установки связи с базой данных в секундах. По истечению заданного интервала генерируется ошибка,

ConnectionString. Предоставляет информацию, необходимую для установки связи с базой данных,

CursorLocation. Указывает позицию курсора,

DefaultDatabase. Указывает базу данных, заданную для данного объекта Connection по умолчанию,

Mode. Определяет права доступа на запись и чтение данных. Присвоить значение этому свойству можно только до установки связи с источником данных. В случае с удаленными службами данных его значение должно быть adModeUnknown,

State. Возвращает текущее состояние связи - значение adStateClosed, adStateOpen, adStateExecuting, adStateConnecting.

  Методы объекта Connection:

  BeginTrans. Используется, чтобы начать транзакцию,

Cancel. Прекращает выполнение текущей асинхронной операции,

CommitTrans. Фиксирует все изменения в объекте Connection,

Execute. Выполняет команду, представленную в виде объекта Command. Формат обращения к этому объекту имеет вид: Connection.Еxecute CommandText, RecordsAffected, Options здесь: CommandText - это выражение SQL, имя таблицы, имя хранимой процедуры или иной текст команды. RecordsAffected возвращает количество записей, обработанных командой. В качестве значения параметра Options используют константу adExecuteSync, чтобы стартовать асинхронную операцию, или adFetchAsync, указывающее, что строки, остающиеся после заполнения буфера, должны возвращаться асинхронно,

 

Open. Устанавливает связь с источником данных. При использовании удаленных служб данных связь не устанавливается, пока не открыт набор записей Recordset. Формат обращения к методу Open: Сonnection.Open ConnectionString, UserID, Password, Option

  Аргументы UserID и Password задают соответственно учетную запись и пароль пользователя. Значение аргумента Option может быть установлено равным константе adAsyncConnect, чтобы установка связи происходила асинхронно. Все аргументы являются необязательными

  ,

OpenSchema. Возвращает информацию о схеме базы данных, например, о структуре таблицы,

RollbackTrans. Отменяет все изменения в текущем объекте Connection,

 

Объект Command.Объект Command используется для передачи команд в источник данных. Для источников данных типа SQL Server состоят из динамических команд SQL, подготовленных команд SQL или вызовов хранимых процедур (Хранимая процедура предствляет собой откомпилированное заранее семейство инструкций SQL и необязательных инструкций управления порядком выполнения, хранимое под некоторым именем и обрабатываемое как единое целое). Свойство Текст команды (CommandText) содержит саму команду, а метод Исполнить (Execute) ее стартует. Некоторые свойства:

  ActiveConnection. Ассоциирует объект Command с объектом Connection,

CommandText. Является текстовой строкой, содержащей команду, которая должна быть выполнена, например, инструкция языка SQL SELECT: acmd.CommandText = "SELECT * FROM empl"

CommandTimeout. Указывает период времени в секундах, предоставленный команде на выполнение. Если значение данного поля равно 0, то время ожидания не ограничено. Значение по умолчанию - 30,

CommandType. Описывает тип команды,

Prepared. Является значением типа Boolean, указывающим, нужно ли перед выполнением команды ее скомпилировать,

State. Указывает текущее состояние объекта. Методы объекта Command. У объекта Command есть три метода. Метод Execute используется для старта команд. Если команда возвращает строки таблицы, ее результат должен быть присвоен объекту Recordset: Set ars = acmd.Execute ars - объект типа Recordset, acmd - объект типа Command Метод Cancel используется для остановки выполнения текущей команды. Метод CreateParametеr используется для создания нового объекта Parameter: Set Parameter = command.CreateParameter (Name, Type, Direction, Size, Value)

 

 

Коллекция. Parameters и объект Parameter Коллекция Parameters представляет все параметры или аргументы запроса или сохраненной процедуры. У каждого объекта Parameter есть коллекция Parameters. Свойства объекта Parameter: Attributes. Описывает объект Parameter при помощи одной из следующих констант: adParamSigned - параметр принимает числовые значения со знаком, adParamNullable - параметр может принимать значение Null, adParamLong - объект может принимать значение двоичных или символьных данных очень большого размера через метод AppendChunk,

Direction. Указывает направленность параметра, то есть определяет, является объект Parameter входным или выходным, или изменяемым параметром, или результатом выполнения хранимой процедуры базы данных,

NumericScale. Является переменной типа Byte, указывающей количество десятичных знаков для представления значения числового параметра,

Size. Указывает максимальный размер параметра в байтах,

Type. Указывает тип объекта Parameter,

Value. Задает и возвращает значение объекта Parameter. Тип этого свойства - Variant. Методы объекта Parameter: имеется один метод AppendChunk. Используемый формат: object.AppendChunk Data, здесь Data - данные, добавляемые к значению свойства Value объекта Parameter. При первом вызове этого метода данные не добавляются, они переписываются вместо старых данных. При последующих вызовах данные добавляются к концу существующих. Этот метод используется для размещения в объекте Parameter большого количества текстовой или двоичной информации.

 

 

Объект Recordset. Представляет набор записей той или иной базы данных либо набор записей, являющийся результатом выполнения определенной команды. Объект Recordset позволяет преходить от одной записи к другой, редактировать и удалять записи. В модели ADO для объектов Recordset применяются четыре различные типа курсора: динамический курсор. Позволяет произвольно перемещаться по записям объекта,

индексный курсор. Аналогичен динамическому, но запрещает доступ к записям, добавленным или удаленным другими пользователями,

статический курсор. Создает Объект Recordset, который допускает неограниченное перемещение по объекту, однако изменения, вставки и удаления записей, произведенные другими пользователями невидимы,

однонаправленный курсор. Идентичен статическому курсору с той разницей, что по записям объекта можно двигаться только вперед. Свойства объекта Recordset:

 

AbsolutePosition. Возвращает или устанавливает абсолютный номер текущей записи. (Число типа Long, нумерация записей ведется с 1). Может также возвращать одну из следующих констант:

AdPosBOF указывает, что достигнуто начало файла,

AdPosEOF указывает, что достигнут конец файла,

adPosUnknown указывает, что позиция текущей записи неизвестна,

BOF. Будучи установленным True, указывает, что курсор указывает на начальную запись набора Recordset,

Bookmark. Устанавливает или возвращает значение типа Variant, содержащее определенную позицию (положение текущей записи) в базе данных. С помощью закладки можно запомнить текущую позицию и впоследствии вернуться к ней,

CacheSize. Устанавливает или возвращает количество локально буферируемых записей. Например, если установить значение этого свойства равным 20, то при открытии объекта Recordset в локальную память будет скопировано 20 записей. Чтобы в уже находящихся в буфере записях отобразились изменения, произведенные другими пользователями, нужно использовать метод Resync,

CursorLocation. Устанавливает или возвращает размещение механизма курсора. Значение adUseServer указывает, что должен использоваться курсор, базирующийся на сервере. Значение adUseClient указывает, что курсор должен управляться локально,

CursorType. Устанавливает или возвращает тип курсора. Может принимать значения: adOpenForwardOnly (однонаправленный), adOpenKeyset (индексный), adOpenDynamic (динамический), adOpenStatic (статический),

EditMode. Возвращает режим обработки текущей записи,

EOF. Если значение - True, то курсор находится в конце набора записей Recordset,

Filter. Устанавливает или возвращает значение типа Variant, которое может содержать текстовую строку критерия отбора записей (например, "emp_Gender = "ж" OR emp_Salary > 8000" ), массив закладок или одну из констант. Для отмены действия условия отбора нужно присвоить этому свойству значение пустой строки "" или константу adFilterNone,

LockType. Устанавливает или возвращает тип блокировки, присущий данной записи,

MaxRecords. Ограничивает количество записей, предоставляемых по одному запросу,

PageSize. Позволяет разбить набор записей на логические страницы. Например, если вы хотите, чтобы на экране одновременно отображалось 20 записей, можно установить значение этого параметра равным 20. Можно пользоваться свойством AbsolutePage, для перехода на указанную страницу: ' задать 20 страниц и перейти на 3-ю ars.PageSize = 20 ars.AbsolutePage = 3

PageCount возвращает количество страниц в базе данных,

RecordCount. Возвращает количество записей в базе данных,

Sort. Позволяет сортировать объект Recordset по любому полю или набору полей. Сортировка доступна, если значение свойства CursorLocation равно adUseClient. С помощью ключевого слова ASCENDING или DESCENDING может быть указан порядок сортировки. Например: ars.sort = "emp_gender", Ascending

Source. Устанавливает и возвращает источник данных,

State. Возвращает информацию о текущем состоянии объекта,

Status. Возвращает сведения о текущей записи в виде комбинации констант (табл. 4.8): Таблица 4.8. Сведения о текущей записи в виде комбинации констант Константа Описание adRecOK Запись была обновлена успешно adRecNew Запись только что создана adRecModified Запись была изменена adRecDeleted Запись была удалена adRecUnmodified Запись не была изменена adRecInvalid Запись не была сохранена, поскольку закладка неверна adRecMultipleChanges Запись не была сохранена, т.к. сохранение затронуло бы несколько записей adRecPendingChanges Запись не была сохранена по причинам, связанным с отложенной вставкой adRecCanceled Запись не была сохранена, т.к. операция была отменена adRecCantRelease Новая запись не была сохранена из-за блокирования записей adRecConcurrencyViolation Запись не была сохранена, т.к. применялась оптимистическая стратегия параллельного доступа к данным adRecIntegrityViolation Запись не была сохранена, т.к. пользователь нарушил условие непротиворечивости данных adRecMaxChangesExceeded Запись не была сохранена, т.к. было слишком много незаконченных изменений adRecObjectOpen Запись не была сохранена из-за конфликта с открытым объектом хранения adRecOutOfMemory Запись не была сохранена, т.к. у компьютера закончились ресурсы свободной памяти adRecPermissionDenied Запись не была сохранена из-за недостаточности полномочий пользователя adRecSchemaViolation Запись не была сохранена, т.к. она нарушает структуру базы данных adRecDBDeleted Запись уже удалена из источника данных  

Методы объекта Recordset:

  AddNew. Добавляет новую запись. Дополнительно можно указать значения полей записи. При этом имена полей и их значений указываются с помощью функции Array: ars.AddNew Array ("emp_salary", "emp_gender"), Array (55000, "m" )

 

CancelBatch. Отменяет незавершенное пакетное обновление,

CancelUpdate. Отменяет незавершенные изменения,

Clone. Создает копию объекта Recordset со всеми сохраненными закладками,

Delete. Удаляет текущую запись,

Find - поиск. Синтаксис обращения: Find (criteria, SkipRows, searchDirection, start), здесь: criteria - допустимое выражение инструкции WHERE SQL (без самого ключевого слова WHERE ), например, "emp_gender = 'g""

  Ключевое слово Like может применяться для поиска похожих текстовых строк, например: ars.find ("emp_name Like 'F_*").

  Аргумент SkipRows указывает количество строк таблицы, которые необходимо пропустить, начиная с заданной позиции. Аргумент SearchDirection указывает направление поиска. С помощью аргумента start можно передать закладку, с которой нужно начинать поиск,

 

Move. Позволяет переместить текущую позицию курсора,

MoveFirst, MoveLast, MoveNext, MovePrevious. Методы позволяют установить текущую позицию на первую, последнюю, следующую и предыдущую соответственно,

Requiry. Обновляет данные в объекте Recordset, выполняя запрос повторно,

Resync. Обновляет данные в объекте Recordset, отображая изменения, произведенные другими пользователями,

Save. Сохраняет объект Recordset в виде файла. Если установлено какое-либо условие отбора, то сохраняются только записи, удовлетворяющие ему. Файл не закрывается до тех пор, пока не будет закрыт объект Recordset. Синтаксис: Recordset.Save FileName, PersistFormat, здесь PersistFormat указывает формат файла.

 

Supports. Указывает, обладает ли объект Recordset определенными функциональными возможностями,

Update. Сохраняет изменения текущей записи. При перемещении от одной записи к другой программное обеспечение ADO автоматически вызывает метод Update,

UpdateBatch. Сохраняет все пакетные изменения на диске.

 

Коллекция Fields и объект Field. У каждого объекта Recordset есть коллекция Fields, состоящая из объектов Field. Каждый объект Field представляет отдельное поле объекта Recordset. Объект Field содержит основную информацию о поле (значение, тип данных и размер). Каждый объект Field содержит коллекцию Properties. Свойства объекта Field:

  ActualSize. Возвращает количество байт, хранящихся в поле,

 

Attributes. Описывает характеристики объекта. Используются некоторые константы, значение которых может принимать,

adFldUpdatable. Объект Field может быть обновлен,

adFldFixed. Объект Field содержит данные фиксированной длины,

adFldNullable. Объект Field может содержать значение Null,

adFldRowVersion. Объект Field содержит номер версии или отметку времени,

DefinedSize. Содержит максимальный размер объекта Field (в байтах),

Name. Содержит имя поля в базе данных или в команде выборки данных,

OriginalValue. Содержит значение объекта Field, присущее ему до измеения соответствующего поля,

Type. Возвращает константу, указывающую тип поля,

UnderLyingValue. Возвращает текущее значение поля, хранящееся в базе данных,

Value. Устанавливает или возвращает текущее значение поля. Методы объекта Field: у объекта Field есть два метода: AppendChunk и GetChunk, используемых для управления большими объемами двоичной или текстовой информации. Метод GetChunk используется для получения всей информации, хранящейся в объекте Field или ее части. С помощью метода AppendChunk можно добавить к полю новые данные.

 

 

Коллекция Properties и объект Propertу. У объектов Connection, Command, Recordset, Parameter и Field есть коллекция Properties, содержащая объекты Property. У объекта Property есть 4 свойства: Name. Устанавливает или возвращает имя свойства,

Value. Устанавливает или возвращает значение свойства,

Attributes. Устанавливает или возвращает значение, равное комбинации констант: adPropNotSupported (поставщик не поддерживает это свойство), adPropRequired (значение этого свойства должно быть указано до инициализации источника данных), adPropOptional (значение этого свойства не обязательно указывать до инициализации источника данных ), adPropRead (свойство доступно для чтения), adPropWrite (свойство доступно для записи),

Type. Устанавливает или возвращает тип данных.

 

Коллекция Errors и объект Error. При возникновении ошибки поставщика данных, содержимое коллекции удаляется и в коллекцию помещается один или несколько новых объектов Error. Некоторые сообщения поставщика данных добавляются к коллекции Errors, не приостанавливая выполнения программы. При каждом действии, которое может вызвать ошибку, следует очищать коллекцию с помощью метода Clear. Ошибки ADO обрабатываются системой обработки Visual Basic. Свойства объекта Error:

  Description. Возвращает строку с кратким описанием ошибки. Задается либо программным обеспечением ADO, либо поставщиком данных,

NativeError. Указывает код ошибки поставщика данных,

Number. Указывает номер, однозначно определяющий объект Error,

Source. Указывает имя объекта в котором произошла ошибка,

SQLState. Содержит код состояния SQL для данного объекта Error.

 

  События, предусмотренные в модели ADO CommitTransComplete. Происходит после выполнения транзакции объектом Connect,

ConnectComplete. Генерируется после связывания с базой данных,

EndOfRecordset. Происходит при попытке обратиться по адресу, находящемуся за пределами области данных,

ExecuteComplete. Активизируется после выполнения команды (метода Execute объектов Connection или Command или метода Open объекта Recordset ),

FetchComplete. Происходит, когда в результате выполнения продолжительной асинхронной операции были получены все записи в наборе записей,

FetchProgress. Aктивизируется при выполнении продолжительной асинхронной операции выборки записей, давая возможность отменить операцию,

FieldChangeComplete. Происходит после изменения одного или нескольких объектов Field методами Value или Update объекта Recordset,

InfoMessage. Генерируется при активизации какого-либо события объекта связи, если соответствующая операция прошла успешно, но поставщик данных пересылает дополнительную информацию,

MoveComplete. Происходит после изменения текущей позиции в наборе записей Recordset,

OnError. Происходит при возникновении какой-либо ошибки базы данных,

RecordChangeComplete. Активизируется при изменении хотя бы одной записи в объекте Recordset одним из методов: AddNew, CancelButton, CancelUpdate, Delete, Update или UpdateBatch,

RecordsetChangeComplete. Происходит после изменения набора записей методами Close, Filter, Open, Requery или Resync объекта Recordset,

RollbackTransComplete. Происходит после завершения метода RollBackTrans объекта Connection, отменяющего последнюю транзакцию,

WillChangeField. Происходит перед изменением одного или нескольких объектов Field методами Value или Update объекта Recordset,

WillChangeRecord. Происходит перед изменением одной или нескольких записей в объкте Recordset одним из методов: AddNew, CancelButton, CancelUpdate, Delete, Update или UpdateBatch,

WillChangeRecordset. Происходит перед изменением набора записей методами Close, Filter, Open, Requery или Resync объекта Recordset,

WillExecute. Происходит перед выполнением команды (метода Execute объектов Connection или Command или метода Open объекта Recordset ),

WillConnect. Происходит перед установкой связей с базой данных,

WillMove. Происходит перед изменением текущей структуры позиции в наборе записей Recordset.

  Практическая работа 30. ADO 30а. ADO: вывод данных в поле списка; добавление/удаление записей в базу данных из проекта Создать на форме 5 полей списка ( lstName, lstVorname, lstVatersn, lstGebdat, lstNummer ),

создать ссылку на библиотеку: Проект Информация (рис. 4.5) установить флажок Microsoft ActiveX Data Object 2.0 сделать щелчок на кнопке ОК,  

Рис. 4.5.  MSFlexGrid  

 

создать на форме меню (рис. 4.6): Инструменты Редактор меню, данные табл. 4.9 OK, Таблица 4.9. Данные, используемые при создании меню Имя Название mnuDob &Добавить mnuUd &Удалить mnuExit &Выход  

ввести код, данный ниже, пояснения даны под комментариями, (General) (Declarations) (формы) ' описание переменных как объектов подключения и ' набора записей Private cn As adodb.Connection Private rs As adodb.Recordset  

Рис. 4.6.  Вид формы Form1  

  Private Sub Form_Activate() ' переменная для хранения строки подключения к базе данных Dim cmd As String ' переменная для хранения SQL-запроса sql As String Dim cn As adodb.Connection Dim rs As adodb.Recordset ' очистить списки lstName.Clear lstVorname.Clear lstVatersn.Clear lstGebdat.Clear lstNummer.Clear ' создать строку подключения. Подключение проводится с помощью ' провайдера OLEDB (иначе в строке нужно указать другого провайдера). ' Следующий параметр (см. строку программы) определяет имя базы данных. ' Строка кода выделяется в отдельную функцию, что позволяет реализовать работу с ' различными источниками данных. Такой функции можно передать параметр. cmd = "Provider=Microsoft.Jet.OLEDB.3.51;Persist Security _ Info=False;Data Source=A:\db1.mdb" ' установить соединение с базой данных Set cn = New adodb.Connection cn.ConnectionString = cmd cn.Open ' создать запрос sql = "select * from Таble1" ' открыть набор записей. Открывается объект Recordset, ему нужно передать ' SQL-запрос (sql = "select * from Table1"), Set rs = New..... Далее ' набор открывается командой rs.Open sql, cn,adOpenDynamic, adLOckOPtimistic ' параметр sgl хранит SQL-запрос, второй параметр означает, что для 'подключения к базе нужно использовать объект cn, следующий параметр ' определяет тип курсора (табл. 4.10 ) Таблица 4.10. Типы курсоров Тип курсора Описание ad OpenForwardOnly Лишь для перебора записей в одном направлении adOpenKeyset Для большого набора записей adOpenDynamic Позволяет отслеживать изменения, вносимые другими пользователями в набор записей adOpenStatic Для небольших наборов   Последний параметр определяет тип доступа к набору записей (табл. 4.11)

  Таблица 4.11. Тип блокировки Тип блокировки Описание ad LockReadOnly Использовать, если не нужно добавлять, обновлять или удалять записи adLockPessimistic

Соседние файлы в папке INTUIT Лекции Visual Basic