|
|
Sub list()
+ a; U% G1 [! ]8 u5 o" uDim work As Workspace 3 Q& L# H7 R) f) w1 \
Dim new As Database 5 m# g v0 n" I3 }
Dim elem As Object
: o/ I! K, Z! t) F7 }Dim rs As Recordset 7 ^8 B& P& x! P) l
Dim RowNum As Integer
3 l; _5 ] t+ m' B/ j! K7 P- LSet work = DBEngine.Workspaces(0)
) w/ G% W# A+ o( D( BDim dbs As Database
5 g. D2 M' d/ e3 `/ x/ ]' ^Dim tdfNew As TableDef
% a- i( k; u4 HDim tdf As TableDef * h2 K- P5 h: _" v5 l5 l8 M: @4 D* D
Dim dbsname As String + h, f( w% ~* `4 _8 N' s- W
Dim array1 As Variant ) P; k% r$ e8 x. J- w
Dim array2 As Variant ‘声明所需的变量及类型
# k4 I4 ] F3 b- \' J% ydbsname = “D:\材料表.mdb”
' X6 B. T; T( J3 _( m‘声明Access数据库写到哪一个文件
5 J' g" J& y! {. H! \4 mOn Error Resume Next 1 j* l8 e" d6 }$ w0 L- D
Set dbs = work.CreateDatabase(dbsname, _
k( p" m/ o- ~) R5 p8 hdbLangGeneral)
" t% `9 g9 q: v9 I/ SIf Err Then , {) s. I+ I& e6 y. A' q! y
Kill (dbsname) ' j3 N; G4 |1 H7 }5 d
‘发现要写入的Access数据库文件已存在就将其删除
# k$ q% ^" i3 p6 i$ RSet dbs = work.CreateDatabase(dbsname, _ ! K7 j+ [& C) N' `: A. b6 {2 |2 Z& j
dbLangGeneral)
% Z$ s' j' o: oEnd If 1 v, ^& o4 h. E% I! o) ^; Z/ K
Set tdfNew = dbs.CreateTableDef
4 U- y9 ]& A/ i(“电气 _材料明细表”) & u% p. V" w2 J- W9 n% Y
‘建立一个名为电气材料明细表的表 ) F0 p8 A- S" k- i/ R. c2 d. y& @
RowNum = 0
6 E5 M. g$ l. y+ b' aDim Header As Boolean
5 e+ D/ x$ W5 w% ~2 IHeader = False , h9 ?3 E t4 B) s+ Z+ q
For Each elem In ThisDrawing.ModelSpace
! T- r6 [9 H, j9 ~* l‘在CAD模型空间,查找所有图形对象 ) Q ~' `9 }2 U! T; P+ C* j2 p
With elem
( K$ f' [8 P! B' A2 {If StrComp(.EntityName,_ 6 p+ m# q" d. E( I
“AcDbBlockReference”, 1) = 0 Then
( i) l. ?6 D! A: D# C2 o; l4 S' I9 S rIf .HasAttributes Then + o0 {2 }1 e0 W/ d8 I' m6 l* ~9 _
array1 = .GetAttributes 7 B5 V) Y. U d4 W
array2 = .GetConstantAttributes
$ G/ I# ~% e* G% `6 r/ m1 j6 n0 s! M‘设置array1指向图形对象的属性
& M; K# A0 ~1 O* L1 q: V‘设置array2指向图形对象的固定属性 2 M( q4 S2 z- j0 H3 g& d) A
For Count = LBound(array2) To _
4 c) u4 B, R6 }% s5 D0 ^7 CUBound(array2) 8 Q8 S {: y' A8 `2 d% P
If Header = False Then 3 {7 {% i0 v% n) O4 }4 l
If StrComp(array2(Count).EntityName, _ $ l1 z- G; j# T, F1 p) ]
“AcDbAttributeDefinition”, 1) = 0 Then & i3 h- I, G; _; K
tdfNew.Fields.AppendtdfNew._
8 z5 ^) H0 z+ z" ~! d4 z* G1 y _7 nCreateField(array2(Count).TagString, dbText) . |" G% Z% j. H" c* g" B
End If ! X, r- u) P+ s' `, z/ ~$ C
‘读出属性值读出,作为Access数据库表的标题 0 ]+ u* H. y4 {% A( k) J- {. J
End If
1 }! l2 m7 ^! R O( A" MNext Count
% u0 N2 X# E6 F/ `For Count = LBound(array1) To _ ( z4 C9 M+ e/ c1 e0 [8 a' M0 C
UBound(array1)
( ~# V# e6 i, x3 V4 [3 f2 [If Header = False Then
* z2 \/ e# I" U3 I! JIf StrComp(array1(Count).EntityName, _ & m R, H3 k" k0 C& _+ r
“AcDbAttribute”, 1) = 0 Then
: E& ]3 I! x( u( O% ytdfNew.Fields.Append tdfNew. _ % C1 h- a8 {2 y+ L3 w
CreateField(array1(Count).TagString, dbText)
1 T) [1 Y. P2 ZEnd If ) w/ Z& z5 o) ~8 i J1 B' C# T1 o
End If
( C' {: O S/ k) VNext Count
5 [4 ` d+ ]6 zIf Header = False Then
1 Q ~- r1 M% P% d4 ~; b/ e* S5 [) Rdbs.TableDefs.Append tdfNew
& k/ V# B# f1 E7 ySet rs = dbs.OpenRecordset 4 W3 f' K( C3 {2 p/ X4 W
(“电气材料 _明细表”, dbOpenTable) ‘打开记录 ! h5 ~. @0 U- w- F8 u! h# m
End If % {' V2 d! A( Z# {) R$ @3 i
RowNum = RowNum + 1
% p- `$ X* v5 K' D& M$ F4 a- Drs.AddNew ‘增加一笔新记录
/ G! o5 n' [8 y9 ]* E- mFor Count = LBound(array2) _ 0 S0 S$ G; Z# z/ r. \+ M
To UBound(array2)
4 }; f; ^- J! C$ |4 ]rs(Count).Value = array2(Count).TextString 4 P1 O! b. b4 }: |+ w- A9 q! U
Next Count ‘读固定属性值 1 I% g4 B- l- L* x5 U# m3 b
For Count = LBound(array1) To _ % ~ l3 `. m; v' N: o# A
UBound(array1) ' F4 K) D+ W; M. Y+ y; X
rs(UBound(array2) + Count + 1).Value = _
, w# M" V% e5 Y. v$ C9 H* _array1(Count).TextString 4 d% r3 l- z: Q, s
Next Count ‘读输入属性值 + N' \ Q& X) b
rs.Update ‘增加新记录修改结束 ( ]4 L z8 y3 m0 a' x
Header = True
* |, ]2 P! ~' ^- \% YEnd If
, l5 z. S! o P0 p5 ^End If 8 l3 p9 t' s! |" ~' @ m$ J; D
End With
9 Y0 Q: B. I/ e' k7 |0 Z5 H. [Next elem
. O$ I1 X$ }: c/ ers. Close ‘关闭记录,释放资源 ' k' S9 ]# G) L1 u0 k6 A8 B, ?' F
dbs.Close ‘关闭数据库,释放资源
' A6 @- ] _+ I! e9 MEnd Sub |
|