|
|
Sub list()
. h3 p; V6 J9 A: SDim work As Workspace $ z. s3 `4 N( O; n" m/ O
Dim new As Database
% r3 Y# ?5 X9 Q+ `Dim elem As Object
4 g3 q* h9 S4 {6 u# VDim rs As Recordset ; g: [ P4 K2 F F- X
Dim RowNum As Integer " R+ l; e3 y8 _ T3 {& W! W
Set work = DBEngine.Workspaces(0) $ q. k1 ?9 t" j) Y
Dim dbs As Database 5 |2 L( d1 | D3 P
Dim tdfNew As TableDef
. D8 K" |% ^3 L, ~* |! p CDim tdf As TableDef 6 x0 A9 [4 ?) ^9 f
Dim dbsname As String
) h/ m3 M/ d9 h- U! c& _- TDim array1 As Variant
: {2 E, |) X1 n4 zDim array2 As Variant ‘声明所需的变量及类型 - [7 H/ Z6 U: r/ F" R- c
dbsname = “D:\材料表.mdb”
5 D1 I( q, c2 {& Z‘声明Access数据库写到哪一个文件
D. n" F: [' b7 }/ u* A7 yOn Error Resume Next
, X7 {2 n7 H( Y8 d# c wSet dbs = work.CreateDatabase(dbsname, _
& p7 \9 B$ |" A/ {dbLangGeneral)
( a" h0 T2 R: `( E) iIf Err Then
5 q6 A& O9 @5 Q4 e1 [! }Kill (dbsname)
# _) c; \4 ?1 v6 L/ N‘发现要写入的Access数据库文件已存在就将其删除
: h7 ]; w* f4 i$ GSet dbs = work.CreateDatabase(dbsname, _ ' g9 a/ g0 f$ H) X
dbLangGeneral)
: O( B2 p5 A" `- B8 zEnd If
; U9 C& i0 g0 U+ }6 BSet tdfNew = dbs.CreateTableDef
9 f4 ^( a- U/ Q0 d(“电气 _材料明细表”)
& M( e5 H2 S2 \( l3 g, O‘建立一个名为电气材料明细表的表 ' e5 r7 o" f1 w" Q
RowNum = 0
& K. L# ]4 o/ M2 {) aDim Header As Boolean 2 U0 ~# G, q m
Header = False + S) v8 R1 n3 M2 Y: Z
For Each elem In ThisDrawing.ModelSpace 9 k) l3 b( G2 ^0 v
‘在CAD模型空间,查找所有图形对象
/ ]$ b: P! G0 K& }( _) rWith elem 4 ~. I- D' T) `6 Q1 T. X0 S
If StrComp(.EntityName,_
4 ~. A* D) j9 D4 ]8 K0 V“AcDbBlockReference”, 1) = 0 Then / n0 H/ @& Z( k8 e2 N, J# Q" P
If .HasAttributes Then
( }1 Y( R8 ?0 Barray1 = .GetAttributes
5 d8 F6 [' }" @" Harray2 = .GetConstantAttributes & X7 N. t5 ^2 Y. [
‘设置array1指向图形对象的属性
4 r/ C( b h. B- v9 b‘设置array2指向图形对象的固定属性 9 k: Z/ C) u1 `; p3 @
For Count = LBound(array2) To _
* S8 R" M: m+ HUBound(array2)
3 Q* o d6 t( d/ Q3 RIf Header = False Then
6 T" _$ I/ T) z( D' K. xIf StrComp(array2(Count).EntityName, _ : k& ]' g0 x- r% c3 e8 u' Y
“AcDbAttributeDefinition”, 1) = 0 Then " s# v' c& m- u* ?! w2 S
tdfNew.Fields.AppendtdfNew._
/ b, d/ P* G ]& fCreateField(array2(Count).TagString, dbText)
7 z/ ?7 J6 r- x+ S5 C1 MEnd If
/ D- O! j$ E/ G1 u4 G. ]" O‘读出属性值读出,作为Access数据库表的标题
v1 `3 V; C8 V3 [8 |$ qEnd If ; X4 G V# O; m( P
Next Count
, M1 W! t* Q4 e- u" _For Count = LBound(array1) To _
7 N) H1 Z6 g" n2 F" xUBound(array1)
6 z+ Z4 Q- f7 L" n4 m# ZIf Header = False Then 3 P7 ~* e- R9 ~* D
If StrComp(array1(Count).EntityName, _ 4 I( q3 x: }1 y
“AcDbAttribute”, 1) = 0 Then
' _6 w8 l" e) ktdfNew.Fields.Append tdfNew. _ g/ J9 c* s: F7 j# H+ R6 I) a
CreateField(array1(Count).TagString, dbText)
( s6 m5 J; D2 x; V, q; B3 \End If
6 K+ B% G' O) R+ @. AEnd If
: \. \& h; M2 l) [Next Count
& v# V- R2 C3 c# fIf Header = False Then . a% K6 y7 z5 b+ h4 K& P
dbs.TableDefs.Append tdfNew ! ?$ f! _' H! r$ O
Set rs = dbs.OpenRecordset
% o1 c8 |0 p$ W1 H(“电气材料 _明细表”, dbOpenTable) ‘打开记录
9 c7 `; o- ]; a* T) k/ ?; o* J5 PEnd If
/ S, @9 o; ^6 D+ ^$ X' ZRowNum = RowNum + 1
3 k8 [3 o3 |6 H: v L4 U/ Ers.AddNew ‘增加一笔新记录 . T$ A- G& Y' L5 I' Q* t
For Count = LBound(array2) _
. v* _' b2 O' \' @3 ATo UBound(array2) 2 k% r5 O# M2 Q* U
rs(Count).Value = array2(Count).TextString
+ P; u/ I9 ?/ j$ O8 t0 I4 {! YNext Count ‘读固定属性值
) r; u4 t8 ]. m; Y3 d; MFor Count = LBound(array1) To _
4 c K0 [4 L/ L5 \6 A P9 d5 [UBound(array1)
2 G* f+ \& H* Z% Ers(UBound(array2) + Count + 1).Value = _
, W/ B1 A- h& B4 M7 ]array1(Count).TextString 6 D5 B! h+ J" m1 e3 }
Next Count ‘读输入属性值
9 D$ {# ^* P B9 Jrs.Update ‘增加新记录修改结束 " {( l7 q% R: r+ t/ a/ t
Header = True . V- M6 a. c, h# c3 i9 a* w l
End If 9 V8 Q" g5 t/ \
End If
]4 [4 a5 i" t/ }7 x% y: j6 QEnd With # \" m" \% y5 U" h. r
Next elem
9 L# h4 L. ~5 v* `: d( P. k, k% t' L- Xrs. Close ‘关闭记录,释放资源 / P: p" X. L; t9 O5 p% Q
dbs.Close ‘关闭数据库,释放资源
; h/ }7 I4 k. H7 N' x* jEnd Sub |
|