|
|
Sub list()
* X: {; Q; U* ?# L8 Y; FDim work As Workspace
' I" Z8 C% i7 m# v; x8 TDim new As Database
' @* ], o/ s$ V" y/ fDim elem As Object , C6 Y- n: z9 h7 D" J0 L
Dim rs As Recordset
; i( a6 R6 @" k" W- N7 T3 g0 ^Dim RowNum As Integer
0 I" K! n/ m, ~7 B7 S! W. E6 nSet work = DBEngine.Workspaces(0)
; `) H; `+ }" t' ?) Z3 jDim dbs As Database
8 ^; z- ]) ]3 K+ UDim tdfNew As TableDef & y) x( F/ j7 M" A" ~
Dim tdf As TableDef % B+ x7 [' A7 l% i
Dim dbsname As String 5 @: Q1 W: V$ {
Dim array1 As Variant
- q+ O6 r2 X. y& zDim array2 As Variant ‘声明所需的变量及类型 * [& l( i6 V3 ~, M2 R/ F8 H
dbsname = “D:\材料表.mdb”
x& q* E2 J& L0 x( o8 P3 Q; S‘声明Access数据库写到哪一个文件 / ]& |* H% x# g- a2 C& ^
On Error Resume Next
7 V% W7 o; ]( z; y1 PSet dbs = work.CreateDatabase(dbsname, _
* Y+ y1 c4 y. d0 }dbLangGeneral)
% c' F' I) R2 u/ X3 T- A, U1 WIf Err Then & a. W" q2 f) z0 s% f+ \
Kill (dbsname)
' n! [' i$ @ ^7 G' G‘发现要写入的Access数据库文件已存在就将其删除
7 t4 F) x9 M+ B$ }# S: rSet dbs = work.CreateDatabase(dbsname, _
! T+ ]; E& w j$ O) j DdbLangGeneral)
& f. s% C8 ]2 _5 ?End If + {1 n) K6 J+ U9 n
Set tdfNew = dbs.CreateTableDef
1 j! [3 x+ r a* B(“电气 _材料明细表”)
2 C7 `& r) P2 D8 Q" a. j- g‘建立一个名为电气材料明细表的表 7 u; P0 t0 V7 d4 F+ X! m9 k/ \
RowNum = 0 8 R' x. D5 P8 F+ r; K
Dim Header As Boolean ! q- _' W( P4 N% j* e# v* f+ g
Header = False 4 S2 A0 }5 m+ D9 u0 B. P3 z- T
For Each elem In ThisDrawing.ModelSpace
1 D/ e7 B" U0 q6 R- i/ A‘在CAD模型空间,查找所有图形对象
( ~: o+ y& E; k9 W" @7 BWith elem 9 q4 [& c8 I3 t q4 I1 j- C$ M
If StrComp(.EntityName,_
, a/ ~: z4 f2 r! N z, U& G, S“AcDbBlockReference”, 1) = 0 Then 7 a5 }2 k- P$ \4 x, r
If .HasAttributes Then V; q, S9 p, S, t5 d& S( h, [
array1 = .GetAttributes 1 z3 A* Z" L( `2 c( J7 ~
array2 = .GetConstantAttributes / m! \% W* w- s* J
‘设置array1指向图形对象的属性 * A! E% h8 X' _0 W
‘设置array2指向图形对象的固定属性
7 `) _) h0 `& v; h0 S- k7 p4 B0 zFor Count = LBound(array2) To _
% f) l' @; Q+ c! U9 rUBound(array2) , W6 Q" Q3 u& D9 Q/ m. F
If Header = False Then
8 j8 I G9 F. K' {1 x8 H' B4 n! y3 tIf StrComp(array2(Count).EntityName, _ H& K% ~4 s" I! ^; k/ w
“AcDbAttributeDefinition”, 1) = 0 Then 4 \7 w, S5 ^: [" j* ^5 a4 M
tdfNew.Fields.AppendtdfNew._
& o! w5 w- S- V* ~- N9 i7 cCreateField(array2(Count).TagString, dbText) + M& u3 J1 M) e8 Q
End If
5 q- ?. ]1 {& }' X. i‘读出属性值读出,作为Access数据库表的标题 ' T, [- v; J1 f7 L& n5 w) u, p# ^, w
End If # d) i& p/ d/ S& @* U
Next Count / i4 F( T1 f1 W* \1 P! ?; K
For Count = LBound(array1) To _ ( g) z% q0 S3 B
UBound(array1)
$ u: r9 M- y! T) _* e- x$ TIf Header = False Then ! V. D" \0 X, N
If StrComp(array1(Count).EntityName, _ . [. Z7 ~ S9 P* I. U+ z* S
“AcDbAttribute”, 1) = 0 Then : g9 h# a6 h. P" E6 F6 q; j# e, V
tdfNew.Fields.Append tdfNew. _ % ~' J( \/ t! ]
CreateField(array1(Count).TagString, dbText) ( G# g% }) z9 y1 e4 V! C& S6 n
End If - Y. _. x* i6 k* d7 t
End If 3 o; P' F4 O! R, D4 \; n u2 i
Next Count 6 ?& r6 o* b8 I* S9 s
If Header = False Then % P; I6 T7 w) n( Y$ C0 u3 x5 @
dbs.TableDefs.Append tdfNew
# K* A5 j P$ y% m/ r) kSet rs = dbs.OpenRecordset
2 ?- f* E! e& a! g0 J: h. o(“电气材料 _明细表”, dbOpenTable) ‘打开记录
' C" F3 d+ Z5 z8 V9 \2 H( y6 x9 J! VEnd If 2 Y" ^4 r. X# _0 R
RowNum = RowNum + 1 5 s+ Z1 S/ H( a4 b: L6 [' N
rs.AddNew ‘增加一笔新记录 5 J N7 H' c) C5 j. \. ?
For Count = LBound(array2) _ 7 n$ b- \ x9 _6 }3 r+ X* Y- T
To UBound(array2) : f% K0 T7 e `/ D2 L: h
rs(Count).Value = array2(Count).TextString
3 A% Q% ^9 a' i) jNext Count ‘读固定属性值
* v# F' r$ ~, v) [ T& ?3 @) n' u6 ~For Count = LBound(array1) To _
' |" C R- |$ X5 ^UBound(array1) , ?/ ?; V4 Q' S, w& f& d
rs(UBound(array2) + Count + 1).Value = _
5 m7 Y; a: A! k. v7 yarray1(Count).TextString
; q5 E6 y6 G8 W; H1 j* ^Next Count ‘读输入属性值 " h! X: n7 B. J- {1 O
rs.Update ‘增加新记录修改结束 ; b' x! Q* y' {* Z" y
Header = True + f: a* C* \9 f8 ?, Y) D+ T
End If
6 B" u% e: K7 T% tEnd If O. @/ y9 B" [" F+ |/ w0 q
End With / l |) s5 v) x, O) h/ V
Next elem + ^) T' g; _$ \( y1 o5 M
rs. Close ‘关闭记录,释放资源
# Z9 ]% }2 }7 |8 V. Ndbs.Close ‘关闭数据库,释放资源 ' D) ^8 ^& o' A% J7 N
End Sub |
|