|
|
Sub list() ; G" H3 w/ ]$ \, M7 x5 P
Dim work As Workspace ; P' j6 V4 o$ m. }- S. I" A! g- g& ]5 j
Dim new As Database
" h: l8 `. }5 d- t; W" C; f$ }Dim elem As Object
5 |# h; n3 h _ j0 RDim rs As Recordset
- k8 I" ~+ J4 `( \) w9 b& iDim RowNum As Integer 5 D, S4 G* A! c. [' c# O( a
Set work = DBEngine.Workspaces(0)
$ A! T# O' O7 @7 F' UDim dbs As Database * P" ?; C: I, ?' m q: G: V. W
Dim tdfNew As TableDef , A+ b; Q1 W! V1 o% h" R1 S; @# p8 `
Dim tdf As TableDef 3 y1 L2 d' L. w6 k4 a4 ]2 p
Dim dbsname As String
* `, t/ P- a n* L% h( pDim array1 As Variant
% I# y* a" P U% @1 Y9 d' p- @$ g. eDim array2 As Variant ‘声明所需的变量及类型 6 t$ n# |( ?3 Z) P7 }% x8 `* q# ~9 }
dbsname = “D:\材料表.mdb”
4 n% I. G9 X4 V& @0 I‘声明Access数据库写到哪一个文件
2 h) O" N" @' J9 y& b5 F/ k1 l! dOn Error Resume Next
2 j1 g4 H5 u: [! l, W' S' mSet dbs = work.CreateDatabase(dbsname, _ % V/ L% v6 t2 S; D- @. l
dbLangGeneral) . _( T3 b1 b, d" }
If Err Then ) T) S; v7 e& L
Kill (dbsname) ) i) R& L* n6 a( r8 F$ ^- O/ j
‘发现要写入的Access数据库文件已存在就将其删除 * M) G7 v+ W% T
Set dbs = work.CreateDatabase(dbsname, _ ' N/ E* k5 N: \5 ~" G x2 z
dbLangGeneral) * w2 ?* |; j- j4 X+ \' v
End If 6 O! b7 G! ^. Q: N; R& m: L) j6 s3 c7 \1 b
Set tdfNew = dbs.CreateTableDef ( t5 @( o0 ^# c. i8 C6 H0 o
(“电气 _材料明细表”)
7 U! I( n; D4 P$ Y/ Z! u‘建立一个名为电气材料明细表的表
4 l7 ]- B M. r0 W3 ~3 W' F iRowNum = 0
9 j4 X2 |2 ]4 z/ b& RDim Header As Boolean
; M3 d3 k0 d9 u% k( }* O8 Z4 UHeader = False
/ @. s" Z& h8 s Z2 J7 g3 i- o2 l4 iFor Each elem In ThisDrawing.ModelSpace
# E5 S( Q( v2 Y‘在CAD模型空间,查找所有图形对象
7 w, H( o& w, n3 f- f0 W @. IWith elem
+ b6 \7 B, q$ \5 B$ OIf StrComp(.EntityName,_ 4 Y/ A* I2 {& A, ~) Y
“AcDbBlockReference”, 1) = 0 Then
3 v4 ]* ]/ p; X+ [, W FIf .HasAttributes Then # X7 S5 I+ j2 t6 d0 i
array1 = .GetAttributes
6 T( q% M; V$ p3 K" y/ U" T. }8 yarray2 = .GetConstantAttributes 2 f( k4 x B% t9 E4 m3 v& n
‘设置array1指向图形对象的属性
) u8 |* f0 \& S0 N3 v‘设置array2指向图形对象的固定属性 . ]4 a- Y9 L9 h1 y8 s" C7 y6 ~) ]
For Count = LBound(array2) To _
$ \( Q; p& a- }3 {' d, aUBound(array2)
# [9 U" w. `& ~$ j( c, H& ]( ~If Header = False Then
2 T; w; d- S' I [- s; sIf StrComp(array2(Count).EntityName, _
7 w# ]3 M+ E# g8 r2 _% `/ ~“AcDbAttributeDefinition”, 1) = 0 Then
' |0 n: M1 D3 ktdfNew.Fields.AppendtdfNew._
$ A& l8 [; P: h" x: T' ?$ UCreateField(array2(Count).TagString, dbText) 7 c. N; O* I' W, q4 z
End If , Q3 F7 R5 |3 [% O
‘读出属性值读出,作为Access数据库表的标题 2 M( @* b+ |( X( ^) F# z; ~- ~8 }; V3 P
End If
% e' `. L$ u, v, J; i( X- h& H% bNext Count
/ c1 N0 `! r; _9 ?For Count = LBound(array1) To _ 6 J3 a3 Z5 M. Q4 t6 j
UBound(array1) 9 `7 A) O6 J7 t. |+ H. F, M: |
If Header = False Then # \/ h* W. w7 z" r$ v( v* j3 s
If StrComp(array1(Count).EntityName, _
: x; f1 u/ h+ A“AcDbAttribute”, 1) = 0 Then
: \. f) j- x% p0 ftdfNew.Fields.Append tdfNew. _ 2 R3 q B5 o& q% j! n6 w% e
CreateField(array1(Count).TagString, dbText)
$ f5 R. U# r! G1 F$ cEnd If * X4 ?$ U0 A9 _
End If ! \" x. _) c6 e5 d4 U0 }
Next Count ; r1 q& U) Z7 i- Q" M
If Header = False Then
1 V! W; |: \& M" L: Edbs.TableDefs.Append tdfNew
/ ]/ i. } z" B \+ `! }Set rs = dbs.OpenRecordset 1 R# ^) p! u" y) I b' ~3 B
(“电气材料 _明细表”, dbOpenTable) ‘打开记录
/ s+ W1 W; }% O. V8 v# {! DEnd If # N0 q$ Q% a) ]3 R
RowNum = RowNum + 1 7 I% U9 B5 G5 w/ t
rs.AddNew ‘增加一笔新记录 ) E6 U" z8 U1 f% S% \% {
For Count = LBound(array2) _
# v7 y; k5 x, DTo UBound(array2) ! M! T6 K3 _% o6 I, d* |/ F
rs(Count).Value = array2(Count).TextString ( P! I! a# @- u7 J
Next Count ‘读固定属性值
# S) K; B6 E0 _% EFor Count = LBound(array1) To _
; O( j) |8 |' r1 w! gUBound(array1)
; R% Z( X- g- c# u* ^' \, crs(UBound(array2) + Count + 1).Value = _
% |9 x+ R9 g& g0 ? N7 o& marray1(Count).TextString
4 e/ V8 I, J, t& ]. w" JNext Count ‘读输入属性值 6 W& Z2 H' D1 W! K& `
rs.Update ‘增加新记录修改结束 $ v$ V0 H+ q! \. w
Header = True
% ~3 W% K7 _1 I. mEnd If 6 L# |/ S+ `; G9 d
End If 7 C+ Y7 Z; Z8 R) u
End With
$ {( T% y+ F! k8 i5 d; x# ZNext elem 3 h% j2 b, y9 }) X
rs. Close ‘关闭记录,释放资源 # K- E. `7 S" p' N/ h* Z6 N
dbs.Close ‘关闭数据库,释放资源
. u O7 j- ^( MEnd Sub |
|