|
|
Sub list()
. w! y$ ~. E# v: `; ^) pDim work As Workspace
0 n% T- _3 ~$ a$ sDim new As Database
3 C% l" x6 W0 p/ [% Z1 eDim elem As Object
6 L, j6 i5 C. t+ `% qDim rs As Recordset ; Q$ f% h- l6 l- l- H
Dim RowNum As Integer % q0 y; `5 n) ^- i4 \) u
Set work = DBEngine.Workspaces(0)
; d. t R% W ]/ l& ]5 uDim dbs As Database
( T+ `, s# X/ V, w* R0 k. `' eDim tdfNew As TableDef
5 _2 o! P' C2 z! f' IDim tdf As TableDef 3 I0 \, q$ Q9 |% u# i
Dim dbsname As String ' j, ~0 a% H% |1 C b3 l3 [) J' i
Dim array1 As Variant
# J) c' ^# f/ X) W/ j$ _6 xDim array2 As Variant ‘声明所需的变量及类型
/ L8 T9 h; }6 Cdbsname = “D:\材料表.mdb”
) G0 q1 p0 `: O+ J! d: V‘声明Access数据库写到哪一个文件 % Q( l5 x* w& ?
On Error Resume Next
0 @, c* v# M$ V% OSet dbs = work.CreateDatabase(dbsname, _ 1 W" C6 A8 ?8 o" Q" v
dbLangGeneral) * p- k4 {/ D0 m7 a/ Q3 U0 h0 ^' s
If Err Then
& O1 c; j/ r bKill (dbsname) 7 J1 \6 {6 P2 p ]5 L) q. k
‘发现要写入的Access数据库文件已存在就将其删除
6 t' l+ _5 v* k4 Q9 v$ ]Set dbs = work.CreateDatabase(dbsname, _ 6 e- E- O+ P+ V4 y
dbLangGeneral) ( R6 }" | Z: C
End If 7 x ?2 ^) c. x# z3 C) S
Set tdfNew = dbs.CreateTableDef , J- Y/ K/ _ w% E; w! f" S: i
(“电气 _材料明细表”)
) F8 L2 M9 L7 o, A( K‘建立一个名为电气材料明细表的表 ) @' z$ Z- w; {# e5 T4 w
RowNum = 0 4 h; B0 w; V6 U( T0 V
Dim Header As Boolean
, E& _( \! V+ @4 ~% ~Header = False # Q& q o) Q7 N7 p2 w4 W, M
For Each elem In ThisDrawing.ModelSpace ) W) f3 A2 s8 K4 R
‘在CAD模型空间,查找所有图形对象 4 V5 q4 C4 V0 {3 B J1 l! m
With elem " K [0 y% ?/ a
If StrComp(.EntityName,_
& Z" k4 u$ m8 W; Q% l/ x“AcDbBlockReference”, 1) = 0 Then
2 y! C! `- A9 Q; f9 C" o1 c' |If .HasAttributes Then : s, l% h/ d$ C8 X. T( }
array1 = .GetAttributes " u; S$ Q& Y/ R7 `
array2 = .GetConstantAttributes % I% M" j9 `, `! R( p7 \
‘设置array1指向图形对象的属性
. s% H4 o$ @/ c4 a* ?) R‘设置array2指向图形对象的固定属性 # p' I! J# v9 R0 }
For Count = LBound(array2) To _ % g( B, w: y- w" ]% z5 T- z
UBound(array2) , [- H8 t/ s$ C f2 C |% m, q% I0 t
If Header = False Then
( X1 ?2 k) \& v# U# X4 Z: nIf StrComp(array2(Count).EntityName, _ * @! m0 h; _, t# W( X0 W
“AcDbAttributeDefinition”, 1) = 0 Then
; m. k" W6 @" i5 k: otdfNew.Fields.AppendtdfNew._ 4 {5 T) d( L, A( S* w0 `' @! B
CreateField(array2(Count).TagString, dbText)
! h# \% B, z9 \! k8 Z dEnd If 5 U, N5 f6 [! L$ z4 T9 y
‘读出属性值读出,作为Access数据库表的标题
2 M! O: Z/ H/ S1 ]" jEnd If $ @" a% |" \: `" L( o
Next Count : n8 v, Y( L# ?! Y0 `
For Count = LBound(array1) To _ - Y1 N* `; x+ V9 k% ?/ a8 y. h
UBound(array1)
; q7 Z; ~7 p2 z/ b3 H xIf Header = False Then
) W: S6 C8 {9 P1 u! [If StrComp(array1(Count).EntityName, _
; _2 }. \' f6 o7 }9 {4 A“AcDbAttribute”, 1) = 0 Then ! h& q: h8 G& `6 s
tdfNew.Fields.Append tdfNew. _ : K4 N2 X2 d# E2 \6 N
CreateField(array1(Count).TagString, dbText) ) o7 A5 }' {, r7 p2 }
End If
8 d8 _$ m ~6 JEnd If * L, M! E2 h: k. ]/ u, z
Next Count & x5 n4 y, X7 W4 [* b% v
If Header = False Then
9 d' E* F* \! fdbs.TableDefs.Append tdfNew
- @& h7 S8 ]1 n7 M. `# R( [Set rs = dbs.OpenRecordset
a+ h+ o: @! X4 T(“电气材料 _明细表”, dbOpenTable) ‘打开记录 & y6 `8 }( j2 K) ~% N2 ~; [
End If 3 K7 U9 L+ H4 ?: a8 Y. n
RowNum = RowNum + 1
, T6 b3 _) o F C9 l/ ars.AddNew ‘增加一笔新记录 D" S$ B6 c4 I6 V
For Count = LBound(array2) _
: d& f3 ^3 C# ~9 N4 x- FTo UBound(array2)
+ k3 }; W( \) ~! R6 V z; yrs(Count).Value = array2(Count).TextString
6 p1 @. h+ x5 C2 N) ]9 GNext Count ‘读固定属性值
. O9 p5 ?0 E! o- S- o& DFor Count = LBound(array1) To _ " |2 W8 Z1 ?1 g; |; k, z; p0 H
UBound(array1)
. T5 K8 \; v# i! v- brs(UBound(array2) + Count + 1).Value = _
! u6 H4 |7 Y( X' d4 @4 `array1(Count).TextString
& S' S# r1 L5 t5 W. U( |3 ANext Count ‘读输入属性值
# b( i( E2 |' H F, xrs.Update ‘增加新记录修改结束
0 G& {/ v5 Z' D, \6 ? JHeader = True , m; ?3 j5 e1 f
End If 6 P- M4 {: [, q1 e! `( d
End If 8 {! p! b) ~2 R# q$ X
End With $ g2 ^1 d/ P! Z
Next elem 2 u' C3 P6 m' I. x
rs. Close ‘关闭记录,释放资源 ' s; M$ P5 C$ \$ }/ ~) t' g
dbs.Close ‘关闭数据库,释放资源
6 Q5 s. z9 Q: {2 E# X$ Q8 p: nEnd Sub |
|