|
|
Sub list()
) r' ?' \. q' f$ [4 Z' A( P4 c1 SDim work As Workspace f9 j( s s$ l
Dim new As Database
9 y$ V |) }' W' e9 |Dim elem As Object # A( p9 e6 y6 K
Dim rs As Recordset . s, W8 [- a' q' E, D/ Z- p6 U
Dim RowNum As Integer o2 f6 y+ B$ G, v: @
Set work = DBEngine.Workspaces(0) " S; n( ~ @6 u5 _0 M) g) b7 D
Dim dbs As Database
( g. s9 ]; A! [" |8 z+ i) XDim tdfNew As TableDef
x* c/ y9 S: R0 u! C) g1 JDim tdf As TableDef
. r5 f o, L4 O8 _/ }( G' ~! H: ODim dbsname As String
$ O/ v' V( t# L' B( O' @Dim array1 As Variant , S& c/ ~' `" w
Dim array2 As Variant ‘声明所需的变量及类型 + d' X, J* ~; N( j
dbsname = “D:\材料表.mdb”
| @ q( x3 S3 M‘声明Access数据库写到哪一个文件 ' ^# N1 B2 n" ?) o, [6 j' f' C
On Error Resume Next ) p" h( W* v2 ~% {! [- w5 d
Set dbs = work.CreateDatabase(dbsname, _ & L( L. O" d; W7 O! r2 W
dbLangGeneral) % h! O+ Y& F+ B1 m% Z. f7 ^; K4 X
If Err Then
5 @5 Z; H. ^7 t% _6 K, T: `% ~, _0 ?Kill (dbsname)
! n% K4 v8 O$ q- f f5 V‘发现要写入的Access数据库文件已存在就将其删除 $ o0 y4 ?1 _ Z* Q) D. _7 V7 L
Set dbs = work.CreateDatabase(dbsname, _
" `, e2 e2 S8 a) vdbLangGeneral)
5 f% ?" V$ E% H) ?) Y* o( l, aEnd If
, Y+ C5 m/ M) JSet tdfNew = dbs.CreateTableDef
3 D+ t* y6 w/ ^) I7 K; v: o/ V(“电气 _材料明细表”)
/ U2 M6 f/ s* E‘建立一个名为电气材料明细表的表 : o8 f* [3 |! |0 G
RowNum = 0
3 A- v, z4 ~8 ?- [! s3 D4 _# GDim Header As Boolean
8 o$ I( ?% P6 PHeader = False
. v- \7 c( w& X9 V) m2 F7 wFor Each elem In ThisDrawing.ModelSpace $ s' Q2 [* E( x" O" A
‘在CAD模型空间,查找所有图形对象 0 D3 Y6 t4 m4 ~% ^# J) C# f" k
With elem , Q& z/ v4 ?! o* R& C
If StrComp(.EntityName,_
9 x& B1 H) \* i& j+ ^, C“AcDbBlockReference”, 1) = 0 Then
) E1 S; O9 C6 S- p; EIf .HasAttributes Then
$ h& E3 d2 D9 f) [& j9 |9 barray1 = .GetAttributes 6 [, j+ H2 I' M$ Y* l% q1 T
array2 = .GetConstantAttributes
" e8 p- k0 u2 u6 p3 G! W9 I `‘设置array1指向图形对象的属性
+ _) c/ g9 ]0 b; s) v K6 T‘设置array2指向图形对象的固定属性
, R8 U: E" L* j# i9 X% `6 X7 V. yFor Count = LBound(array2) To _ 8 T3 v1 l% \% q' t1 X3 B w
UBound(array2) 1 ?* v% d; S/ Q# m' |& E n
If Header = False Then , D& F, M8 r0 _$ d7 R9 n; s
If StrComp(array2(Count).EntityName, _
/ c) A8 M$ t" A7 r6 }“AcDbAttributeDefinition”, 1) = 0 Then / }+ u7 @! D- `, Q: K1 u
tdfNew.Fields.AppendtdfNew._
. }) O8 Y' o9 \, {' x- N4 \CreateField(array2(Count).TagString, dbText)
9 U7 z, O: \/ X8 a1 p+ NEnd If
9 @: p4 J0 R* m& `! _‘读出属性值读出,作为Access数据库表的标题 : O1 c1 d" f4 k( L
End If
9 O9 r9 E* B( ]9 M+ K: tNext Count + f* ]9 @, l z/ C
For Count = LBound(array1) To _ 9 {% l" _5 B$ K+ |9 g
UBound(array1)
' Y$ A3 Q4 K4 x: @# TIf Header = False Then 3 [# S4 L; \9 o" j/ y$ R
If StrComp(array1(Count).EntityName, _ % j# S% t+ ~7 ]( M( V H
“AcDbAttribute”, 1) = 0 Then ( ~( O8 f) k0 z: o8 g
tdfNew.Fields.Append tdfNew. _ 9 f, J2 V2 e- ~
CreateField(array1(Count).TagString, dbText)
+ G6 D' I( H- V. S" J( x0 z2 f, hEnd If
0 e6 f. N7 K* T1 P, T2 WEnd If " h3 x7 e4 I$ T( l2 k- ?5 a0 I
Next Count
. N- c0 ^5 Y3 R: K3 LIf Header = False Then 4 s- Z% u3 p* \- _1 K! ^" F7 W/ v' X
dbs.TableDefs.Append tdfNew
2 ~9 \1 u2 n; C N# v; r- BSet rs = dbs.OpenRecordset 5 O8 B% h- z& b- i
(“电气材料 _明细表”, dbOpenTable) ‘打开记录 / x- S5 X, J: Y! A
End If
) J9 k' a2 v3 O5 PRowNum = RowNum + 1 : W4 d6 U- X; F: t) M! o' J& K
rs.AddNew ‘增加一笔新记录 ( A# U, {* u% G. q( i L- F0 Q
For Count = LBound(array2) _ , P5 O9 m1 }- I
To UBound(array2) : J& n, {# U( v8 j( u
rs(Count).Value = array2(Count).TextString 5 Y1 F* T" ?9 B) P& C
Next Count ‘读固定属性值 " z0 S! a" X! C
For Count = LBound(array1) To _
% M4 D, J" _) w$ BUBound(array1)
( d+ H# D$ p' a$ B hrs(UBound(array2) + Count + 1).Value = _ & c4 a: e4 f: S5 z
array1(Count).TextString 1 z( D) D' D# I9 l/ D% ]
Next Count ‘读输入属性值
9 s0 E8 {& R. V0 ~+ W& T; Ers.Update ‘增加新记录修改结束 ) }1 g% o' n% r, Z6 f
Header = True 2 s; O" @3 m' J# P2 |
End If 8 O* L6 C% V/ s# v& M( T
End If
3 K/ M$ |9 C- Z% j- p" `End With - X* H, b8 K# F$ ^; d
Next elem 9 z! @' o3 j; {. [0 Z
rs. Close ‘关闭记录,释放资源 & v. q6 p& [3 H, Z0 i
dbs.Close ‘关闭数据库,释放资源 $ [" ]7 u- H) ]+ s* k* O/ ~$ b P5 D7 ?7 L' F
End Sub |
|