//Выбор базы
Private Sub UserForm_Activate()
//Добавление базы из папки расположения AutoCAD
TextBox1.Text = ThisDrawing.Path + "\mydatabase.accdb"
//Присвоение переменной пути файла
path_db = TextBox1.Text
End Sub
//Запись в ComboBox Имени пользователя
Private Sub ComboBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
ComboBox1.Text = "Илья"
End Sub
//Обработчик нажатия на OptionButton
Private Sub OptionButton1_Click()
// Меняем значение переменной на ложь. Для второй OptionButton тоже //самое, только присваиваем значение истина
chec = False
End Sub
Private Sub CommandButton2_Click()
//Присвоение переменным значений полей
a = TextBox2.Text
n = ComboBox1.Text
//проверка условия входа базу
If chec = True Then
//Проверка пароля для дальнейшей работы
If (a = 11111) And (n = "Илья") Then
//Установка соединения с базой
Set ThisDrawing.adoConnect = New ADODB.Connection
With ThisDrawing.adoConnect
//Подключение провайдера для работы с базами и привязка базы к чертежу
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & TextBox1.Text
.Open
End With
Unload Me
UserForm3.Show
Else
// Если пароль введён не верно то выводится сообщение
MsgBox "Возможно пользователь или пароль введёны не правильно!!! Пожалуйста введите пользователя и пароль!!!", vbOKOnly + vbExclamation
End If
Else
Unload Me
End If
End Sub
Форма для регистратуры.
//Объявление глобальных переменных
Private Sub UserForm_Activate()
// Установка соединения
Set ThisDrawing.adoConnect = New ADODB.Connection
With ThisDrawing.adoConnect
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisDrawing.Path & "\rt.accdb"
.Open
End With
//Установка переменной выборки базы данных
Set record = New ADODB.Recordset
record.ActiveConnection = ThisDrawing.adoConnect
With record
//Текст запроса к базе
//Остальные запросы выполнены по аналогии с той лишь разницей, что //переменные будут другие, поэтому дальше текст запроса рассматривать не //будем
.Source = "Select * from Arendator where CustomerID =1"
.Open
End With
//Функция обновления выведенных данных прописана ниже
print_i
End Sub
Public Sub print_i()
//Присвоение текст боксу значения ячейки выбранной из базы. Код //аналогичен для всех выводов
TextBox1.Text = record!CustomerID
//Определение по логическому полю физическое лицо или юридическое
If (record!CustomerType = True) Then
TextBox2.Text = "Физическое"
Else
TextBox2.Text = "Юридическое"
End If
//Передача переменной Формы 4 параметра выборки для дальнейшего //использования
UserForm4.aa = record1!CustomerID
End Sub
//Переход по базам осуществляется аналогично выполнению запроса в //активации формы. Опишем лишь интересные моменты
//Если выборка достигает конца записи, то параметр i обнуляется
If record.EOF = True Then
i = 0
CommandButton5_Click
//Иначе продолжается выборка по запросам
Else
With record
s = i + 1
//передача параметра s в качестве переменной запроса
.Source = "Select * from Rooms where CustomerID =" & s
.Open
End With
//Далее идут запросы
//Обновление формы
print_i
i = i + 1
End If
End Sub
По большому счёту весь код данных форм практически идентичен предыдущему в силу того, что используются запросы с другими параметрами и из других таблиц, вот и все отличия.
Форма управления слоями
Для того, чтобы в объекте ListBox1 появился список слоёв, необходимо методе инициализации формы прописать следующие строки:
Private Sub UserForm_Initialize()
//Данный цикл выводит существующие слои в ListBox
For I = 2 To ThisDrawing.Layers.Count - 1
ListBox1.AddItem (ThisDrawing.Layers.Item(I).Name)
Next I
End Sub
В результате выполнения данного кода объект ListBox1 будет заполняться названиями существующих слоёв.
В обработчике кнопки «Отключить слой» пропишем следующие строки:
Private Sub CommandButton1_Click()
//проверка условия выбранного поля
If ListBox1.ListIndex = -1 Then
MsgBox "Выберите слой"
Else
//метод для отключения слоя
ThisDrawing.Layers.Item(ListBox1.Text).LayerOn = False
End If
//обновление формы
UserForm1.Refresh
End Sub
Этот участок кода отвечает за выключение выбранного слоя.
Аналогичный код будет и для кнопки «Включить слой». Разница будет лишь в методе:
ThisDrawing.Layers.Item(ListBox1.Text).LayerOn = True
Теперь следует рассмотреть код нажатия по блокам в среде AutoCAD.
//Объявление глобальных переменных
Public adoConnect As ADODB.Connection
Public path_db As String
Public ID As Variant
Public ID_A As Integer
Public a As String
Public n As String
//При загрузке приложения автоматически открывается форма //приветсвтия
Private Sub AcadDocument_Activate()
UserForm6.Show
End Sub
//Обработчик нажатия на блок
Private Sub AcadDocument_SelectionChanged()
//определение локальных переменных
Dim objGen As AcadEntity
Dim i As Integer
//Установка соединения и подключение провайдера
Set ThisDrawing.adoConnect = New ADODB.Connection
With ThisDrawing.adoConnect
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisDrawing.Path & "\rt.accdb"
.Open
End With
//Именно в этой части кода осуществляется передача данных //переменной objGen от блоков чертежа
If ThisDrawing.PickfirstSelectionSet.Count > 0 Then
Set objGen = ThisDrawing.PickfirstSelectionSet.Item(ThisDrawing.PickfirstSelectionSet.Count - 1)
//Проверка на принадлежность блоку
If objGen.ObjectName = "AcDbBlockReference" Then
Select Case objGen.Name
//По имени нажатого блока определяются параметры которые нужно //передать дальше для выполнения запросов
Case 1
ID_A = 10
//Передача параметров переменной формы 4
UserForm4.aa = ID_A
UserForm4.Show
Case 2
ID_A = 70
UserForm5.aa = ID_A
UserForm5.Show
Case 3
UserForm3.Show
End Select
End If
//Снятие всех выделений
For i = 0 To ThisDrawing.PickfirstSelectionSet.Count - 1
ThisDrawing.PickfirstSelectionSet.Item(i).Highlight (False)
ThisDrawing.PickfirstSelectionSet.Item(i).Update
Next i
ThisDrawing.SendCommand (".Выбрать" & vbCr)
End If
End Sub
1. Гурвиц Г.А. Microsoft Access 2007. Разработка приложений на реальном примере.- СПб.: БХВ-Петербург, 2007. – 672 с.: ил. + CD-ROM
2. AutoCAD 2007. Видео курс.- СПб.: БХВ-Петербург, 2007.