|
|
Sub list() - G2 S) R& W( }4 G! k) ~- X
Dim work As Workspace
. e7 R+ o8 J8 z- s- KDim new As Database " r- K4 }8 t, A0 y
Dim elem As Object ' a) R1 H: s; Q& l
Dim rs As Recordset
, g8 U, e# W# K; m( v2 KDim RowNum As Integer * H2 \0 T- Z: o1 v% n
Set work = DBEngine.Workspaces(0) 8 K/ G6 e; o7 ?8 v
Dim dbs As Database
+ x5 \; Y8 \& ~9 u" XDim tdfNew As TableDef 8 S4 a: Q7 f; N* F$ v+ X7 b
Dim tdf As TableDef {5 B7 s7 P$ x# f, ]1 G
Dim dbsname As String
' d' Y' K& k: B" {( a" V cDim array1 As Variant
$ }; S8 q3 [! N! K) dDim array2 As Variant ‘声明所需的变量及类型
$ H; i" E# l: }, g3 ]* ?4 Ydbsname = “D:\材料表.mdb”
/ K. l' S$ Y0 A, h‘声明Access数据库写到哪一个文件
5 y4 U7 @7 i' M& r5 t# p# W: rOn Error Resume Next ' k% e# h C, J9 C1 c; J' z. \# ~
Set dbs = work.CreateDatabase(dbsname, _
) ^/ r, F* q/ o3 ~dbLangGeneral) 0 O" `. {& l! Y- j" u
If Err Then * a7 r7 Q' G t7 t
Kill (dbsname)
% z, i( i' \! |1 a) K# C‘发现要写入的Access数据库文件已存在就将其删除 5 ]$ ~. U. p9 i
Set dbs = work.CreateDatabase(dbsname, _ ) v3 u; t2 i: ~4 E. z
dbLangGeneral)
" i# [" m. b- K; H: R( F* WEnd If
9 }: I4 r( v+ b# t0 W7 d SSet tdfNew = dbs.CreateTableDef
" D) N' y s O1 S' U4 _% l" H(“电气 _材料明细表”) 6 P2 z* \# s" L6 k
‘建立一个名为电气材料明细表的表
$ n3 h8 Y7 P) z' F. Y U1 b- }% VRowNum = 0 0 T( G) R" P% L8 W7 ~: a
Dim Header As Boolean : ~# r L$ D& Y, D
Header = False
, h+ @" b! Y( w, BFor Each elem In ThisDrawing.ModelSpace
+ e& S! l. D! r8 x/ h‘在CAD模型空间,查找所有图形对象
) {. g3 @7 e; U) U) kWith elem 0 I# f& a7 V. P; {5 c
If StrComp(.EntityName,_
! P$ K% O- F$ F4 w! q2 [0 @4 I“AcDbBlockReference”, 1) = 0 Then ) X- ]# S! @) C8 F
If .HasAttributes Then 4 ^5 |/ _ o/ T4 y N# X
array1 = .GetAttributes 8 p- H( j$ [9 l7 S
array2 = .GetConstantAttributes 2 p U \5 S" `
‘设置array1指向图形对象的属性
|. a6 X# }+ }9 ]& y‘设置array2指向图形对象的固定属性
+ P7 S& X3 D& j. ~4 Q$ B/ j% ^For Count = LBound(array2) To _
! @5 o/ v; p7 q% F6 UUBound(array2)
, t* n4 w4 Y9 r" i8 u! t, B3 eIf Header = False Then
4 ^8 I) m& x0 ~If StrComp(array2(Count).EntityName, _ . k( c# s6 n2 F5 O
“AcDbAttributeDefinition”, 1) = 0 Then 2 {) p+ R& W$ A: z$ F9 k( ?: @* d
tdfNew.Fields.AppendtdfNew._
. W+ V2 s! \5 Y+ P: r' tCreateField(array2(Count).TagString, dbText)
! X5 |* Z- b% E$ ZEnd If
! |8 {; Q _7 h6 l‘读出属性值读出,作为Access数据库表的标题
T( [, \1 \/ ^, n3 \4 b9 d9 EEnd If
; Y; v% Q3 C3 \/ DNext Count , @ ], m2 Z4 ~6 j$ ]9 w
For Count = LBound(array1) To _
' [, ~4 ~% _4 u4 Q, M {2 s; n+ UUBound(array1) / w X( g: o9 v& }: y" t
If Header = False Then ) R4 _$ Y- [# h! ?0 y! t/ y
If StrComp(array1(Count).EntityName, _
4 P2 z2 s$ w* N: q“AcDbAttribute”, 1) = 0 Then
; I( O+ S9 l. |& d$ mtdfNew.Fields.Append tdfNew. _ & A% K x" a" u
CreateField(array1(Count).TagString, dbText)
. y% O9 Q: ^1 E) E- eEnd If $ D- f+ }9 {- J( o: w" H/ Z
End If
( _) @3 z$ ?" K1 i. P4 fNext Count
! I0 h( d# L: H! {; @If Header = False Then ( ~0 O! G7 f* n* s& y
dbs.TableDefs.Append tdfNew 1 L8 \* Y, R: u' |" c8 ~) i
Set rs = dbs.OpenRecordset & K1 O- i$ e! F' a6 G
(“电气材料 _明细表”, dbOpenTable) ‘打开记录 2 Q& H. Y9 \; [2 h- m& o- r& u3 F( C, _
End If
9 y7 q8 I% J2 C0 a; G& P7 dRowNum = RowNum + 1
& _9 ?3 _% x% H( H% `rs.AddNew ‘增加一笔新记录
7 O" \$ p1 U. q: c) f' sFor Count = LBound(array2) _ - ^1 ?9 ]' R3 V+ Y/ Q
To UBound(array2) " G. _1 \3 |, V; N5 m% O( f
rs(Count).Value = array2(Count).TextString
8 ?8 N" \: {5 M# p. \Next Count ‘读固定属性值 : k! A1 H, r6 t" o5 J( ]
For Count = LBound(array1) To _
4 c8 X- W8 f( \- pUBound(array1)
, u1 U% a0 _2 h/ e# x2 n( E3 d) \rs(UBound(array2) + Count + 1).Value = _ ' B u: {% O& u; l2 S) {
array1(Count).TextString
4 E2 G! |) A; WNext Count ‘读输入属性值
) B# L9 {" i { @rs.Update ‘增加新记录修改结束 . h$ [% p( j: @% k f
Header = True
6 @( W# r2 c) T. D+ \4 R1 m+ K, bEnd If % e7 j; z; \9 |
End If / Q3 L9 S ~4 {4 N! L
End With : H& H3 F; N! ]0 y f* T8 P- i
Next elem $ [% Z, a1 w& Y: J" S' L: q
rs. Close ‘关闭记录,释放资源
. ~) V) b9 r: ~4 I8 Z& E- Gdbs.Close ‘关闭数据库,释放资源
. @0 \9 B, n/ L Q- @2 K+ MEnd Sub |
|