Использование базы данных Oracle внутри AutoCAD
Вопрос: Возникла проблема подключения базы Oracle к AutoCAD. Как при помощи API получить информацию из моей базы Oracle?Ответ: Начиная с AutoCAD 2020 он только 64-разрядный – нет 32-разрядного AutoCAD.
Если вы хотите подключится к Oracle вам понадобятся 64-разрядные OLE Db драйвера клиента Oracle.
Необходимо будет инсталлировать соответствующие драйвера. У меня Oracle 19c database, соответственно мне понадобилось установить драйвера Oracle 19c OLE Db.
Oracle Db
Oracle Ole Db
Теперь подключимся к базе Oracle из AutoCAD VBAIDE
Шаг1: Подключаем соответствующие файлы.
- AutoCAD 2021 Type Library
- Ole Automation
- Microsoft Activex Data Objects
- Microsoft Activex Data Objects Recordset
- OraOLEDb 1.0 Type Library
Шаг 2 : Готовим строку подключения
"Provider=OraOLEDB.Oracle;User ID=<yourUserId>;Password=<yourPassword>;Data Source=<yourDatabase>;"
Например:
"Provider=OraOLEDB.Oracle;User ID=SYSTEM;Password=Abcdef!23;Data Source=moogalm19;"
UserId : Пользователь, созданный для подключения к вашей базе
Password: Пароль, требующийся для подключения к базе
DataSource: База данных, к которой вы хотите подключится.
Шаг 3: Код, который выполняет подключение и открывает базу.
- Sub ReadOracleDB()
- Dim adoDbConn As New ADODB.Connection
- Dim adoDbRs As New ADODB.Recordset
- Dim selectCmd As New ADODB.Command
- Dim strCon As String
- Dim RC, CC As Long
- ' строка подключения, с теми же userId и паролем, которые я использую для входа в sqlplus'
- ' Data Source = имя базы данных'
- strCon = "Provider=OraOLEDB.Oracle;User ID=SYSTEM;Password=Aut0desk!23;Data Source=moogalm19;"
- adoDbConn.Open (strCon)
- ' открываем таблицу adOpenStatic, и проходимся по всем записям до конца
- adoDbRs.Open "SELECT * FROM EMPLOYEES", adoDbConn, adOpenStatic
- MsgBox "Не найдено записей!"
- Exit Sub
- End If
- RC = adoDbRs.RecordCount
- CC = adoDbRs.Fields.Count
- Dim MyModelSpace As AcadModelSpace
- Set MyModelSpace = ThisDrawing.ModelSpace
- Dim pt(2) As Double
- Dim MyTable As AcadTable
- ' RC+2 для строк заголовка и шапки таблицы'
- Set MyTable = MyModelSpace.AddTable(pt, RC + 2, CC, 10, 60)
- Dim i As Integer
- Dim j As Integer
- With MyTable
- .RegenerateTableSuppressed = True
- .RecomputeTableBlock False
- .TitleSuppressed = False
- .HeaderSuppressed = False
- .SetTextStyle AcRowType.acTitleRow, "Standard"
- .SetTextStyle AcRowType.acHeaderRow, "Standard"
- .SetTextStyle AcRowType.acDataRow, "Standard"
- Dim col As New AcadAcCmColor
- col.SetRGB 255, 0, 255
- ' Заголовок'
- col.SetRGB 194, 212, 235
- .SetCellBackgroundColor 0, 0, col
- col.SetRGB 127, 0, 0
- .SetCellContentColor 0, 0, col
- .SetCellType 0, 0, acTextCell
- .SetText 0, 0, "MOOGALM19"
- ' Шапка'
- i = i + 1
- For j = 0 To .Columns - 1
- .SetCellType i, j, acTextCell
- .SetText i, j, CStr(adoDbRs.Fields(j).Name)
- Next
- ' Строки данных'
- For i = 2 To .Rows - 1
- For j = 0 To .Columns - 1
- .SetCellType i, j, acTextCell
- .SetText i, j, adoDbRs.Fields(j).Value
- Next j
- adoDbRs.MoveNext
- Next i
- .RegenerateTableSuppressed = False
- .RecomputeTableBlock True
- .Update
- .GetBoundingBox minp, maxp
- ZoomWindow minp, maxp
- ZoomScaled 0.9, acZoomScaledRelative
- End With
- ' Закрываем соединение с базой и освобождаем память'
- adoDbRs.Close
- Set adoDbRs = Nothing
- Set selectCmd = Nothing
- adoDbConn.Close
- Set adoDbConn = Nothing
- ThisDrawing.SetVariable "LWDISPLAY", 1
- End Sub
Демонстрация:
Источник: https://adndevblog.typepad.com/autocad/2020/03/connecting-oracle-database-with-autocad.html
Опубликовано 31.03.2020
Отредактировано 31.03.2020 в 10:41:13