Лекция 3: 2 Для создания возможности использования объектов файловой системы нужно подключить библиотеку DLL, содержащую эти объекты: меню Разработать > Ccылки > Microsoft Scriptlet Component (сделать щелчок на соответствующем элементе управления CheckBox). Не могу найти меню Разработать (Develop)>Links и т.д. |
Базы данных
Объекты доступа к данным DAO - Data Access Object
Объекты доступа к данным - это объекты, представляющие структуру базы данных и её содержимое. Программист может использовать DAO для создания и изменения таблиц и запросов, для защиты баз данных или для доступа к данным внешнего источника. DAO позволяет обрабатывать из проекта Visual Basic данные, находящиеся в базе данных.
Для работы с источниками данных используется иерархия объектов Microsoft Jet, табл. 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.
Создать необходимые элементы упр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
Практическая работа 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
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