Тема: Access and AutoCAD

Доброго утра всем!!!
У кого-нибудь не завалялась документация по VBA в Access???
А вообще мне очень хотелось узнать о взаимодействии Access с AutoCAD. Передача данных туда-обратно.
В яндексе, гугле, раблере никаких толковых ссылок не нашла!!!!

Re: Access and AutoCAD

А если искать, например, так?

Re: Access and AutoCAD

> Кулик Алексей aka kpblc
Скажите пожалуйста Алексей а есть ли что-нибудь на русском языке???
Я обязательно переведу  статьи, ссылку на которые Вы мне дали.

Re: Access and AutoCAD

Access 97 - help - на русском (большая часть).
Можно поставить - стыбзить - и деинсталировать.
В более современных Office - help на нормальном языке.

Re: Access and AutoCAD

> Кипятильник
А у меня все на английском!!!!
Вот так!!!

Re: Access and AutoCAD

А какая связь AutoCAD и Access вас собственно интересует?

Re: Access and AutoCAD

Я хочу получившиеся результаты подсчета по своему проекту загонять в базу данных. А то приходится все результаты переносить вручную в Word или Excel.
А также сделать базу данных, чтобы автокад брал из нее данные на основе которых он бы делал расчеты.

Re: Access and AutoCAD

> Дарья
У кого-нибудь не завалялась документация по VBA в Access???

У меня завалялась:
И.Харитонова, В.Михеева
"Access 2000
Разработка приложений."
Одна из самых хороших и симпатичных книжек по программированию из встреченных мной.

Re: Access and AutoCAD

Пример работы с БД:

Public Function MY1()
    Dim p As Variant
    p = ThisDrawing.Utility.GetPoint(, "Start point:")
    Dim MyTable As AcadTable
    Set MyTable = ThisDrawing.ModelSpace.AddTable(p, 5, 5, 10, 30)
    Set db = OpenDatabase("d:\1.mdb", 0, False, key)
    Set rs = db.OpenRecordset("SELECT * FROM T1")
    i = 1
    While ((Not rs.EOF) And (i <= 4))
            MyTable.SetText i, 0, rs.Fields("Nazv").Value
            MyTable.SetText i, 1, rs.Fields("Nomer").Value
            rs.MoveNext
            i = i + 1
    Wend
End Function

надо тут поставить в Tools->References галку Microsoft DAO Object Library
таким же образом можно не только выводить данные из БД но и записывать.

Re: Access and AutoCAD

> LeonidSN
А у Вас в электронном виде???
Если да пришлите мне пожалуйста

Re: Access and AutoCAD

> Дарья
Если бы была в электронном, то давно отправил бы без разговоров. Но неужели у вас нет возможности поискать ее (если это нужно) - либо на бумаге, либо в Сети?
Книжка действительно очень хороша! К ней прилагается диск с примерами, но у меня его нет.
Иногда такую информацию можно скачать с сайта издательства. В данном случае это - БХВ - Санкт-Петербург, 2000
ISBN 5-8206-0090-8

Re: Access and AutoCAD

http://rapidshare.com/files/12037090/001725.rar.html

Re: Access and AutoCAD

> Mbus
Скажите пожалуйста что значит эта ошибка при запуске Вашего примера???
"Run-time error 3078"
Ядро базы данных Microsoft Jet не может найти входную таблицу или запрос Т1.

Re: Access and AutoCAD

а вы базу данных с такой таблице сделали?
Т1 это таблица в 1.mdb на диске D
в этой таблице есть поля Nazv и Nomer

Re: Access and AutoCAD

> Mbus
Класс. Все заработало.
А библиотеку Microsoft DAO Object Library каждый раз надо галочку выставлять???

Re: Access and AutoCAD

1 раз в каждом новом проекте

Re: Access and AutoCAD

Спасибо

Re: Access and AutoCAD

> Mbus
Скажите пожалуйста можно ли таким же образом строку, а не столбец вставлять в таблицу???

Re: Access and AutoCAD

> Дарья
Например так
(Записываются: имя блока и значения 4-х атрибутов)

Option Explicit
' References to:
' Microsoft ActiveX Data Object 2.X Library
' Microsoft Access X.X Object Library
Sub WriteAttributes()
' Variables for AutoCAD Objects
Dim oSset As AcadSelectionSet
Dim oEnt  As AcadEntity
Dim oBlkRef As AcadBlockReference
Dim oAttr As AcadAttributeReference
Dim ftype(1) As Integer
Dim fdata(1) As Variant
Dim dxfCode, dxfValue
Dim attVar() As AcadAttributeReference
Dim i As Integer
' Variables for ADO Objects
Dim conn As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim strSQL As String
' Connect to the database
Dim tblName As String
tblName = "Blocks" '<-- change table name here
  'SQL string for adding recorset.
  strSQL = "INSERT INTO [" & tblName & "]"
  With conn
    .CursorLocation = adUseServer
    .Provider = "Microsoft.Jet.OLEDB.4.0"
    .Properties("Data Source").Value = "C:\VBA\ACCESS\MyBlocks.mdb" ' <-- change database name here
    .Open
  End With
  With rst
    .LockType = adLockPessimistic
    .ActiveConnection = conn
    .CursorType = adOpenKeyset
    .CursorLocation = adUseServer
    .Source = strSQL
  End With
If Err <> 0 Then
MsgBox "Could not open " & tblName & ". Make sure " & _
"it has been configured in the DbConnect Manager."
Exit Sub
End If
' Open the Blocks recordset
rst.Open tblName, conn, adOpenDynamic, adLockOptimistic
If Err <> 0 Then
MsgBox "Could not open spaces recordset"
Exit Sub
End If
' Make sure the Recordset supports AddNew
If Not rst.Supports(adAddNew) Then
MsgBox "Cannot add records to the recordset."
Exit Sub
End If
' Get the selection set of all blocks in the current drawing
          With ThisDrawing.SelectionSets
               While .Count > 0
                    .Item(0).Delete
               Wend
          Set oSset = .Add("$Blocks$")
          End With
ftype(0) = 0: ftype(1) = 2
fdata(0) = "INSERT"
fdata(1) = InputBox(vbCr & "Enter the block name: ", "Block Name", "MyBlock")
dxfCode = ftype: dxfValue = fdata
oSset.Clear ' debug only
oSset.Select acSelectionSetAll, , , dxfCode, dxfValue
'MsgBox oSset.Count 'debug only
If oSset.Count > 0 Then
' Switch to the last record
rst.MoveLast
' Loop through the selection and add the block data to the database
For Each oEnt In oSset
Set oBlkRef = oEnt
attVar = oBlkRef.GetAttributes
' Add a new blank record
rst.AddNew
' Set the field values
rst!BlockName = oBlkRef.EffectiveName
rst!TAG1 = attVar(0).TextString
rst!TAG2 = attVar(1).TextString
rst!TAG3 = attVar(2).TextString
rst!TAG4 = attVar(3).TextString
' Commit the changes
rst.Update
rst.MoveNext
Next
End If
' Close the recordset and the database connection
rst.Close
conn.Close
' Clean up
Set rst = Nothing
Set conn = Nothing
End Sub

~'J'~

Re: Access and AutoCAD

> fixo
А Вы не могли бы поподробнее рассказать, если это конечно не затруднит Вас, про этот код поподробнее.
Я протестировала его и не совсем поняла принцип его работы.

Re: Access and AutoCAD

> fixo
Скажите пожалуйста что делает этот код. Я вроде сделала все условия (подключила библиотеки, создала базу данных, изменила путь в коде к базе данных, изменила имя таблицы в базе данных, создала блок с именем "MyBlock" в чертеже). Насколько я поняла он присоединяет атрибуты к блоку MyBlock.
После запуска выскакивает ошибка:
Не удается найти объекта в семействе, соответствующий требуемому имени или порядковому номеру.
Подчеркивается вот эта строка в коде:
rst!BlockName = oBlkRef.EffectiveName

Re: Access and AutoCAD

> Дашуля
Видимо, у тебя более рання версия Автокада
Измени

rst!BlockName = oBlkRef.EffectiveName

на

rst!BlockName = oBlkRef.Name

Атрибуты имеют следующие имена:
TAG1,TAG2,TAG3,TAG4
Замени на свои тоже
Ну нет у меня времени на подробности!
~'J'~

Re: Access and AutoCAD

> fixo
У меня автокад 2008.
Все равно не получается. Ругается на эту же строку. Может с базой данных что-то не так???
Напишите пожалуйста основные требования для нормальной работы кода:
1) Подключение библиотек
2) Создание базы данных
3) Изменение в коде пути к базе данных, а также имени базы данных
4) Изменение названия таблицы в коде
5) Создание в чертеже блока с именем "MyBlock"
......
Что-то еще??

Re: Access and AutoCAD

????
Такой код полезный, помогите пожалуйста запустить его.