Довелось мне как-то взяться за "лопату" и найти внятное описательное решение в Интернетах на простую тему "Как программно ковыряться в Access?". Это получилось далеко не сразу, поэтому просто оставлю это здесь.
1. Создание новой таблицы средствами VBA
Есть некая, одна из многих типичных, база данных учета машин. Необходимо создать новую таблицу с тремя полями "Гаражный номер", "Расход бензина", "Стоимость бензина". Совсем несложный скрипт позволит решить это проблему.
1. Создание новой таблицы средствами VBA
Есть некая, одна из многих типичных, база данных учета машин. Необходимо создать новую таблицу с тремя полями "Гаражный номер", "Расход бензина", "Стоимость бензина". Совсем несложный скрипт позволит решить это проблему.
В целом, вся система доступа к данным в БД осуществляется по логической цепочке: получаем доступ к текущей БД(переменная db типа DAO.Database указывает на текущую БД), далее мы получаем доступ к таблицам (создание, редактирование, что угодно, через переменную tdf типа TableDef), а далее - доступ к полям (через переменную fldl типа Field).
Собственно, создание новой таблицы (у меня она названа "Превышение"), осуществляется так:
Set tdf = db.CreateTableDef("Превышение")
А добавление в новую таблицу новых полей - вот так:
Set fld1 = tdf.CreateField("Гаражный_номер", dbText, 6)
Главное, про что стоит помнить: созданные поля нужно сохранять (Append нам в помощь после каждого добавленного поля),
tdf.Fields.Append fld1
а потом, собственно, тем же сохранить новую таблицу в БД
db.TableDefs.Append tdf
2. Копирование данных по условию в таблицу "Превышение" из другой таблицы
Просматривая таблицу "Авто" (с полями "Гаражный_номер", "Расход_бензина_л_км", "Стоимость_бензина"), пользователь потребовал скопировать данные в таблицу "Превышение" о тех машинах, которые превышают средний расход бензина, хранящийся в переменной sb.
Для начала, этот sb мы должны еще рассчитать. Мы должны получить доступ к таблице "Авто" через рекорсет, затем должны посчитать сумму расхода бензина и разделить ее на количество записей. Данные манипуляции приведены на рис. ниже.
Видно, что рекордсет MyRec содержит все данные из таблицы "Авто", а обращение к конкретному полю в этом рекордсете осуществляется через !, например,
myRec!Расход_бензина_л_км
Следующим шагом, после вычисления среднего расхода, является сравнение переменной sb с каждой записью по полю "Расход_бензина_л_км", если превышение есть, всю строку необходимо скопировать в таблицу "Превышение". Ниже на рис. представлен код реализации.
Для того, чтобы иметь возможность что-то копировать в таблицу "Превышение", необходимо создать поля, куда должны скопироваться данные. Это можно осуществить, только получив доступ к таблице "Превышение" через рекорсет rstCurr. Параметр dbOpenDynaset обозначает динамический набор записей.
После добавления данных, таблицу необходимо обновить, а после окончания работы с рекордсетами - обязательно их закрыть.
3. Редактирование существующих записей
Следующей задачей является изменение данных в поле "Стоимость_бензина" (увеличение их в 2 раза) в таблице "Превышение".
Снова нам понадобится доступ к таблице "Превышение" через рекорсет myRec1. Реализация задачи приведена на рис. выше. После обновления данных выдается сообщение "Данные обновлены" и количество записей в таблице.




Комментариев нет:
Отправить комментарий