Private Sub Form_Load()
Dim DataBase
As DataBase
Dim QueryDef
As QueryDef
Dim Recordset
As Recordset
' Создаем новую базу данных
Set DataBase = CreateDatabase("c:\1.mdb", dbLangGeneral)
' Создаем таблицу table1 с колонками:
' Адрес и фамилия (текстовые поля длиной 20 символов),
' Возраст (числовое поле 2 байта)
DataBase.Execute "create table table1 (Адрес text(20),Фамилия text(20), Возраст integer2, Зарплата integer2);"
' Добавляем в таблицу 5 строк
DataBase.Execute "insert into table1 values (
'Ленина', 'Иванов', 21, 2000);"
DataBase.Execute "insert into table1 values (
'Пушкинская', 'Петров', 22, 2100);"
DataBase.Execute "insert into table1 values (
'Лермонтовская', 'Сидоров', 25, 2100);"
DataBase.Execute "insert into table1 values (
'Ленина', 'Соколов', 27, 2100);"
DataBase.Execute "insert into table1 values (
'Садовая', 'Иванов', 23, 2200);"
' Создадим два запроса
' Запросом можно назвать таблицу, состоящую из данных, выбранных
' из других таблиц (выборка)
' При создании запроса, указываются названия таблиц и колонок,
' которые нужно добавить в запрос,
' а также условия выбора данных (необязательно)
' Запросы могут быть обычными и временными
' обычные запросы сохраняются в базе данных
' а временные действуют только во время выполнения программы
' для того, чтобы создать временный запрос, нужно
' вместо имени указать пустые кавычки
' Создаем временный запрос и поместим туда данные (адрес и возраст)
' из таблицы table1, где указана фамилия Иванов
Set QueryDef = DataBase.CreateQueryDef("", "select Адрес, Возраст from table1 where Фамилия=
'Иванов';"
' Отобразим полученные данные
' (с запросом можно работать также как
' и с таблицей через объект RecordSet)
Set Recordset = QueryDef.OpenRecordset
Debug.
Print "Выборка по фамилии Иванов"
Do While Not Recordset.EOF
Debug.
Print "адрес "; Recordset(0) & ", возраст " & Recordset(1)
Recordset.MoveNext
Loop
' Создадим запрос testQuery из таблицы table1
' который будет представлять выборку из всех колонок этой таблицы,
' где в колонке адрес будет Ленина
' Этот запрос останется в базе данных
' Если в таблицу table1 добавится строка с адресом Ленина
' то она автоматически будет добавлена в таблицу-запрос
' аналогично при изменении данных в таблице-запросе testQuery, эти изменения
' произойдут и в таблице table1
DataBase.CreateQueryDef "testQuery", "select * from table1 where Адрес=
'Ленина';"
' Теперь скопируем таблицу table1 в ту же базу данных
' в таблицу с названием table1copy
DataBase.Execute "select * into table1copy from table1;"
' Очень удобное средство SQL - обновление данных в полях таблицы
' сразу по нескольким строкам
' Изменим зарплату в таблице table1
' на 3000 тем людям, которым больше 22 лет
DataBase.Execute "update table1 set Зарплата=3000 where Возраст>22;"
' В приведенной выше таблице адреса могут повторяться
' В таблице может быть десятки тысяч строк
' при нескольких сотнях адресов
' Для уменьшения объема базы данных
' в этом случае можно применить справочник
' Создадим таблицу table2 наподобие приведенной выше,
' Только вместо названий адресов укажем их
' идентификационный номер
DataBase.Execute "create table table2 (АдресID integer2, Фамилия text(20), Возраст integer2, Зарплата integer2);"
' Добавим в таблицу строки
DataBase.Execute "insert into table2 values (1,
'Иванов', 21, 2000);"
DataBase.Execute "insert into table2 values (2,
'Петров', 22, 2100);"
DataBase.Execute "insert into table2 values (3,
'Сидоров', 25, 2100);"
DataBase.Execute "insert into table2 values (1,
'Соколов', 27, 2100);"
DataBase.Execute "insert into table2 values (4,
'Иванов', 23, 2200);"
' Создадим справочник адресов adrref, состоящий из поля с
' идентификационным номером адреса и поля с адресом
DataBase.Execute "create table adrref (АдресID integer2, Адрес text(20));"
DataBase.Execute "insert into AdrRef values (1,
'Ленина');"
DataBase.Execute "insert into AdrRef values (2,
'Пушкинская');"
DataBase.Execute "insert into AdrRef values (3,
'Лермонтовская');"
DataBase.Execute "insert into AdrRef values (4,
'Садовая');"
' Теперь создадим запрос Query2, объединяющий эти две таблицы
' Как видно ниже сначала указываются колонки, а затем список таблиц
' такой способ применим, если в таблицах нет одноименных колонок
' Полученная таблица-запрос будет по содержанию идентична
' созданной выше таблице table1
DataBase.CreateQueryDef "Query2", "select Адрес, Фамилия, Возраст, Зарплата from adrref, table2 where adrref.АдресID=table2.АдресID;"
' Созданные таблицы и запросы Вы можете посмотреть в MS Access
End Sub