|
|
Sub list()
+ G) L9 B" w8 \: \Dim work As Workspace ; u' ]/ X3 l! c( P) b
Dim new As Database ) Q0 \9 r z2 |* X+ n
Dim elem As Object
8 k% L( r) T3 h1 h! f: fDim rs As Recordset # H% i! Y4 I# W4 W* F P8 g3 N& o
Dim RowNum As Integer
" f S' q- |1 r# d9 \Set work = DBEngine.Workspaces(0)
7 D C4 h! t- p8 D' c! N, H2 {Dim dbs As Database 7 N' i. n! S) X5 T N, r: r
Dim tdfNew As TableDef
& w B& @: q* K" [* ~Dim tdf As TableDef % Y5 z5 W1 v& l! ~. R
Dim dbsname As String
u9 M6 E) F- k4 N# cDim array1 As Variant 9 p& W! O$ d" C0 h! Z
Dim array2 As Variant ‘声明所需的变量及类型 % P, x8 o* D* h9 z6 c
dbsname = “D:\材料表.mdb” $ @4 _! }7 M( c# g: ~
‘声明Access数据库写到哪一个文件 1 S( B1 Z; a m6 V. O
On Error Resume Next / G' P( ?8 T+ }. N
Set dbs = work.CreateDatabase(dbsname, _ ! d5 a7 \0 {, A+ i
dbLangGeneral) / [0 Z) s/ x& d* r
If Err Then $ S W9 f" T4 ?5 f2 A3 K# q0 Q
Kill (dbsname) # |: ?* ~3 ]1 S4 S3 x
‘发现要写入的Access数据库文件已存在就将其删除
- t' ~! }+ G: L8 JSet dbs = work.CreateDatabase(dbsname, _
9 a5 f6 ]9 u4 s k- NdbLangGeneral) 5 W4 K, ?' U" |9 s( G
End If : l9 a# |3 v9 J2 E
Set tdfNew = dbs.CreateTableDef
Q9 a! g! x. w5 G1 Q7 h(“电气 _材料明细表”) ! @* @! b& n/ i2 _
‘建立一个名为电气材料明细表的表 6 Q/ y. s9 }% ?/ {7 G
RowNum = 0
q* `+ h5 R' Q/ j, ~/ t4 H* `6 GDim Header As Boolean ! m' v6 T) D% S. f4 B6 Y
Header = False
# y# K) D( P; h7 a4 ]# zFor Each elem In ThisDrawing.ModelSpace ! ~8 F7 [, p. N" e5 o) K* ]
‘在CAD模型空间,查找所有图形对象 & E: v+ _ l7 X- b f% @/ p1 ~
With elem 4 T8 u4 V8 T' `" M; A
If StrComp(.EntityName,_ ) `# K2 E$ ]* n1 a. e ~) a
“AcDbBlockReference”, 1) = 0 Then $ r. C) _8 _4 l( y
If .HasAttributes Then
4 c+ }- A/ d2 B! S9 b+ Varray1 = .GetAttributes
) P& m, v$ d2 }% warray2 = .GetConstantAttributes
) I' l5 ?! }; B+ ?. b: _‘设置array1指向图形对象的属性
" o( d, K, P* G4 w! L2 V; N5 N‘设置array2指向图形对象的固定属性
" j7 d$ n! y4 ?6 m$ S) f DFor Count = LBound(array2) To _
. a+ x, t% X3 V4 G5 gUBound(array2) 3 c3 @+ O; S& N9 q8 d( [+ j
If Header = False Then 7 s% x* N' `' H7 ^# E# P, h, c
If StrComp(array2(Count).EntityName, _
4 l* o* n, q) `# ~9 X7 V" S“AcDbAttributeDefinition”, 1) = 0 Then
* }: o8 [1 q- Z5 K9 @6 E+ ftdfNew.Fields.AppendtdfNew._
+ ]$ _" x; T" s/ aCreateField(array2(Count).TagString, dbText)
. i4 }4 Y& V: y) i: eEnd If 9 J! ^$ Z1 j2 J
‘读出属性值读出,作为Access数据库表的标题 0 u1 I* s$ q6 M, D$ Z# z
End If
# R/ k3 a5 b; x% zNext Count 1 |, r2 B, M1 g8 Z' Q
For Count = LBound(array1) To _ : Y) O4 V6 R% u, H
UBound(array1) $ X$ ?3 h- d) Q7 I
If Header = False Then
( b; H8 F* B- `; l5 z& }4 nIf StrComp(array1(Count).EntityName, _ 3 Z w4 G1 B+ y
“AcDbAttribute”, 1) = 0 Then 3 v4 ]; i: {% C
tdfNew.Fields.Append tdfNew. _
`4 j+ Z5 N! \# c, UCreateField(array1(Count).TagString, dbText)
' k3 d+ A! F3 ?End If - O1 R& O% O6 d0 Y" c
End If * J( @0 u- `0 a4 }" {
Next Count 0 Z* k. x8 y) p! f1 q1 |
If Header = False Then
9 {- ^7 U+ X4 }4 F$ N' _; zdbs.TableDefs.Append tdfNew
! c' K! V' t: [% o. `7 uSet rs = dbs.OpenRecordset ; |* q A# n7 ^( E2 w- e, n
(“电气材料 _明细表”, dbOpenTable) ‘打开记录 ' @! e! @: l1 Z1 k2 O% J
End If 6 j% y' x" P+ k. L) _5 P
RowNum = RowNum + 1 ! X2 w2 L/ f" m2 h
rs.AddNew ‘增加一笔新记录 ' L" a5 p- i2 I- f( Q6 w! {, l
For Count = LBound(array2) _
2 H1 O1 h& b, i2 iTo UBound(array2) # P7 h( m( K4 G; N& @
rs(Count).Value = array2(Count).TextString
+ f1 s: K: ?8 j) A1 M1 N KNext Count ‘读固定属性值
7 q+ o' N# w- n% p. p/ YFor Count = LBound(array1) To _ % T% V5 X9 h. o( C
UBound(array1) 3 a- p$ u$ t, C; t: Z \6 i
rs(UBound(array2) + Count + 1).Value = _
8 @2 D* f4 j( O$ L; z$ j: `5 Harray1(Count).TextString " k f0 W! ?3 \1 U; D) _5 Y
Next Count ‘读输入属性值
9 R& E9 z: ] a# V$ Xrs.Update ‘增加新记录修改结束
: u( x" c8 A( AHeader = True ) z* a9 `8 ?) q; K) y5 B/ j0 Q# V; f
End If + c& ]5 M. B d7 P! Y, Q* h, U- F
End If : A H2 u. R7 y$ l9 F
End With 0 |5 d7 n) e4 E T3 x
Next elem
: J. F0 w* f" V ~* ]. grs. Close ‘关闭记录,释放资源
; E' f7 i1 U# K U: Zdbs.Close ‘关闭数据库,释放资源 ) x7 Q' ~- s, \+ t: @8 @
End Sub |
|