|
|
Sub list()
, z& ]4 M" I/ A8 g& T6 SDim work As Workspace
+ K* `# m0 f1 W' K- ODim new As Database
) |' Q$ S; |" e8 [4 @0 O: w. S3 N; g' sDim elem As Object , M& C; `$ }8 F
Dim rs As Recordset ; b9 {% K; l' g! B
Dim RowNum As Integer
( R, S" q* @! e# \4 o) LSet work = DBEngine.Workspaces(0)
3 ]; F! _- B) R' EDim dbs As Database
/ C! I0 q8 X1 Q- SDim tdfNew As TableDef & x" E; S) k& @0 A4 x
Dim tdf As TableDef
& ^0 {$ ?, p/ }6 B3 Q2 l& w% n& B, U& ?Dim dbsname As String ( x4 j8 w" N: m2 P7 v+ t. p
Dim array1 As Variant : M6 I2 L6 F0 ]* T$ H/ w& W
Dim array2 As Variant ‘声明所需的变量及类型 $ a8 K& G' ~. s9 ?/ H2 v4 J
dbsname = “D:\材料表.mdb” 8 ]- R; j R# p; I0 f% e$ W- x1 G% l
‘声明Access数据库写到哪一个文件 0 M, L5 ~% q) r2 D6 i0 {
On Error Resume Next : o' ]7 _ F' }' B5 \- X
Set dbs = work.CreateDatabase(dbsname, _
; q2 A; W: d' v. A8 a+ RdbLangGeneral) % ~3 q: E& q4 L( i. Q) A, W8 i1 G
If Err Then
6 b$ w( B' X8 i' O7 @0 i* b4 QKill (dbsname)
" x, C5 n. j# ?3 a2 N L9 u‘发现要写入的Access数据库文件已存在就将其删除 1 e! X8 ^/ }& F: ?! M' [+ h+ G
Set dbs = work.CreateDatabase(dbsname, _
# \4 z+ d. b1 k" A! ~4 JdbLangGeneral)
8 { H9 _. _. J" g5 g+ ~$ ?! XEnd If : b: L/ y) [1 i1 O7 s" H. f4 ^
Set tdfNew = dbs.CreateTableDef 9 N; E1 Z, s4 A- l; o
(“电气 _材料明细表”) 4 H" @0 i) L' J; [! D
‘建立一个名为电气材料明细表的表
, q" o9 i d7 ~" y7 j" ?RowNum = 0
+ h3 w" r% \ u( {# m% f: bDim Header As Boolean 4 D% A0 i* l+ o
Header = False
: v; a- m0 N$ mFor Each elem In ThisDrawing.ModelSpace ' p0 M! s! }" f
‘在CAD模型空间,查找所有图形对象
' k( d, U; N4 @2 K3 W; g' |2 ]( w! ZWith elem
. f( x r+ L* a* I9 c- nIf StrComp(.EntityName,_ % o0 C& c, r M" W$ s$ G: U, y
“AcDbBlockReference”, 1) = 0 Then ) z/ K9 N5 P3 w
If .HasAttributes Then
/ R! D0 e1 W- \; Y9 Z2 Carray1 = .GetAttributes
/ m! Q+ q+ Z, karray2 = .GetConstantAttributes
! M; s! R% V) ?1 K/ v& M( G# K; Z: D) ?‘设置array1指向图形对象的属性 # U* E- \5 N# ~9 J+ X; | R
‘设置array2指向图形对象的固定属性
9 T) R4 @2 {7 Z# H+ ?! ]For Count = LBound(array2) To _ 4 y% t) H9 _1 X# Q8 { |4 s9 l
UBound(array2)
* Z; Z: p" b: f# k8 MIf Header = False Then
0 v) R, P: q, k# u- @; eIf StrComp(array2(Count).EntityName, _
1 {4 [0 U2 e$ ^! m' P! v( f) [' Y“AcDbAttributeDefinition”, 1) = 0 Then - {' h+ b [! w& f2 M
tdfNew.Fields.AppendtdfNew._
2 W9 U0 z, {9 P+ nCreateField(array2(Count).TagString, dbText)
" Z7 h: |! W( [1 u/ [& S) qEnd If
7 T2 l" r: R5 K* w' `& c‘读出属性值读出,作为Access数据库表的标题
7 b; B5 W; J* b6 o& JEnd If
% M. f* [# h/ f6 Q4 `Next Count 1 f; a! |% M; ]- C: {* U, y7 ?0 j
For Count = LBound(array1) To _ , |( `. @4 |/ P1 c% Z" h
UBound(array1) 6 s$ N2 j) A# @2 R
If Header = False Then 8 k% P7 m+ A- P) Y) C; Y
If StrComp(array1(Count).EntityName, _
% p! G0 M1 ~" x# R“AcDbAttribute”, 1) = 0 Then
+ Q6 c2 B3 S5 n+ _tdfNew.Fields.Append tdfNew. _ & T! Y5 p. W: Q" J. N+ P. i
CreateField(array1(Count).TagString, dbText) 4 r! A# ]5 H) i" G, v3 n' @/ `/ f
End If
6 a; U5 C; L: h6 R/ n# zEnd If ( Y) v- T6 n9 P
Next Count
9 p% L9 ]# C+ N, iIf Header = False Then
/ d3 w) ]# S: e4 |dbs.TableDefs.Append tdfNew
% i I; {% y, ]3 |Set rs = dbs.OpenRecordset
. z6 x, I: o K( s(“电气材料 _明细表”, dbOpenTable) ‘打开记录 ! T5 I9 |+ Y, b" ^
End If - J5 D7 ~; L' q2 V. x' [) V" L
RowNum = RowNum + 1
% x) j2 M, H/ I( {0 V. `0 Xrs.AddNew ‘增加一笔新记录
1 _ [- j$ I* n( C0 W4 b" L- [For Count = LBound(array2) _
/ @$ e9 y! ^" c3 I# f* MTo UBound(array2) 8 l+ }. e, S$ J# E7 d
rs(Count).Value = array2(Count).TextString ) W5 ]) f. U A3 D
Next Count ‘读固定属性值
; ^- M6 n1 C3 C1 x8 \, \For Count = LBound(array1) To _
7 ]0 N/ Y3 O4 k& x' H2 z tUBound(array1)
6 V- j7 R' Y0 i l5 L+ f% R( d/ yrs(UBound(array2) + Count + 1).Value = _
1 J4 s0 e3 o e2 k2 D, F$ Rarray1(Count).TextString " U8 [$ b6 N( L e* _
Next Count ‘读输入属性值
7 _: N, }8 c' Drs.Update ‘增加新记录修改结束 - a$ G% N1 p+ S3 H" b
Header = True # l+ l; q% N+ U
End If ) Y7 P/ ?! d9 U) A& t5 L
End If
) B, W5 x9 E4 o n" REnd With
0 X$ E' t0 u; p$ jNext elem 1 ^: T0 X* p- Q$ L4 a$ M6 F
rs. Close ‘关闭记录,释放资源 % `% K+ X7 ^1 x. s) |- c. z4 O
dbs.Close ‘关闭数据库,释放资源
: g. x9 g& M3 h1 W8 G" y1 FEnd Sub |
|