|
|
Sub list()
" o3 U* Y9 E M1 i: F% ZDim work As Workspace 3 |6 c" E0 P) b0 p) A2 b& t
Dim new As Database
' Y9 O$ u, _3 ^0 e/ D# R+ |Dim elem As Object & s3 L! `! @% S. r. Y# ]8 N$ h
Dim rs As Recordset
( n- m* P, `: \Dim RowNum As Integer
0 S3 j! G! S# T ySet work = DBEngine.Workspaces(0)
9 l( T) `1 \1 _Dim dbs As Database - L3 S: b& C1 ^2 \+ R. p
Dim tdfNew As TableDef 0 I9 v# v; P; v& s; c7 I. J
Dim tdf As TableDef
9 w9 v6 Y" B- V6 ~Dim dbsname As String ) J: N. a/ j8 s e% m9 F" ?
Dim array1 As Variant " T1 l! Y2 G- d/ @
Dim array2 As Variant ‘声明所需的变量及类型
. N! ^6 p8 d/ gdbsname = “D:\材料表.mdb”
. _) f& J- _$ v( f2 Z‘声明Access数据库写到哪一个文件 , m& k, A2 V- S. |1 s, @
On Error Resume Next ' a/ }# j* Y7 ]# X7 U
Set dbs = work.CreateDatabase(dbsname, _ * t; [' i5 `2 q4 D
dbLangGeneral) $ z' m- S4 P# I2 G4 G6 i! A
If Err Then
6 P% x9 B4 S( P' T5 XKill (dbsname)
: a- `+ \$ \& n‘发现要写入的Access数据库文件已存在就将其删除 ' z9 R8 X$ f1 K, Y* m
Set dbs = work.CreateDatabase(dbsname, _ . |6 f1 P; \2 Y7 ~/ M: n2 H% }
dbLangGeneral) 3 [( ?: S/ J' C7 r
End If 9 u! `7 P5 ~; F5 X2 g( t
Set tdfNew = dbs.CreateTableDef . G6 v' R7 l% \# H2 h4 p, U/ _
(“电气 _材料明细表”) 8 k/ H; f1 L- z, k, J/ V" b+ d
‘建立一个名为电气材料明细表的表
9 z: i2 P/ n+ H9 e3 xRowNum = 0 $ r- Q( |% Q5 e7 d N2 P O2 H
Dim Header As Boolean
+ b0 o% i n/ F) T) _. CHeader = False
4 h( o2 ?1 W; H/ h: \For Each elem In ThisDrawing.ModelSpace
& {8 t" V/ W; `/ b& Y‘在CAD模型空间,查找所有图形对象
1 l. \6 `0 o+ z: S# `- J& ]- J8 sWith elem
1 J! C }- e- sIf StrComp(.EntityName,_ : i* o! h' g! F' C. G
“AcDbBlockReference”, 1) = 0 Then 4 _6 i$ e- ^3 ^, J
If .HasAttributes Then
& q! ]. u1 n. I' }* C% D7 \2 aarray1 = .GetAttributes
$ I- I T4 X# W! u* Warray2 = .GetConstantAttributes ; X r/ |. ^# `) a
‘设置array1指向图形对象的属性
3 I3 b7 N. ~& Q& T! z5 K! T‘设置array2指向图形对象的固定属性
+ H3 A# l' S- J5 h1 |* rFor Count = LBound(array2) To _ 9 c! e7 |3 j5 P6 r) Q
UBound(array2) 6 I, h. F) R# f/ b6 [! |. ]# y9 F
If Header = False Then 3 u: \0 F4 m( s g6 |( ] h, B
If StrComp(array2(Count).EntityName, _ / m$ b+ t9 X$ w5 N3 T+ m, ?
“AcDbAttributeDefinition”, 1) = 0 Then
2 P/ B/ F# Y$ \* G5 N+ HtdfNew.Fields.AppendtdfNew._
% ?+ Y P# H: N+ z" a' {CreateField(array2(Count).TagString, dbText)
9 u% ?4 Q5 m0 q" Q8 ?, iEnd If # g D% f: p1 G4 {' z
‘读出属性值读出,作为Access数据库表的标题 : t |/ q% ~9 Z, r3 s
End If
1 [, o) \- t0 kNext Count 7 G* f' z: W3 K8 y* K
For Count = LBound(array1) To _
9 ~+ T2 R, G9 B4 u/ o! C8 wUBound(array1) 0 f+ u! x. {; k" {( ~
If Header = False Then 4 u7 |5 z H% D3 L& y; P
If StrComp(array1(Count).EntityName, _
) R' W; \2 A4 f% S“AcDbAttribute”, 1) = 0 Then
* _$ p1 H% g6 g% \" B. LtdfNew.Fields.Append tdfNew. _
: [6 q6 {6 d8 V0 z) o* rCreateField(array1(Count).TagString, dbText)
9 J% n0 X V g r0 K' HEnd If
% `" K, S: k: p* M5 dEnd If
" {# O \2 d. QNext Count $ ~& C9 l3 R$ j9 |
If Header = False Then
# r! x+ Z$ v4 j6 R% {2 t# Gdbs.TableDefs.Append tdfNew
8 R5 |0 c9 z: i7 JSet rs = dbs.OpenRecordset * H+ ~& u9 K- F
(“电气材料 _明细表”, dbOpenTable) ‘打开记录 4 b3 g) o* u& g/ z& n4 M; X. o
End If
: v$ C- R" H! P6 L8 RRowNum = RowNum + 1 # R& J9 G: s/ p0 j
rs.AddNew ‘增加一笔新记录 " s7 d4 g9 s* @
For Count = LBound(array2) _ m% Z& j& t* r/ u8 t
To UBound(array2)
2 u* C2 G5 l5 D3 _7 grs(Count).Value = array2(Count).TextString
# n$ K% }5 U l& D9 tNext Count ‘读固定属性值 ~+ J: T0 w8 l
For Count = LBound(array1) To _
( k' ]. ]( v% L) \# h& zUBound(array1) 1 _" L* v( I& g5 M
rs(UBound(array2) + Count + 1).Value = _
3 L9 `: p" M$ ~9 S) Qarray1(Count).TextString & C, O; d4 v: q& q1 l+ C% g
Next Count ‘读输入属性值 , x: f, p% ?: N6 V2 e" N4 u4 Q2 |2 e
rs.Update ‘增加新记录修改结束
9 [$ ?0 G# }! r! s8 [Header = True
4 Y. G; K% W8 L5 Z; g4 mEnd If / C. F* U, f% T7 h* ? \$ m
End If 1 G% p) N* K8 B$ i
End With 7 ^1 b) Z$ R% i8 |# p9 B4 {% o
Next elem
' v5 G t& X G" |rs. Close ‘关闭记录,释放资源 ( G, H3 Y. p. q* P
dbs.Close ‘关闭数据库,释放资源 ( r9 T0 Z% {! Y
End Sub |
|