|
|
Sub list() 1 M N7 Q& [% g: u+ I r- b7 C
Dim work As Workspace 6 p4 v+ {1 m+ h
Dim new As Database 3 X% V! d6 b3 P
Dim elem As Object
4 t; T: N I4 o. w! D* I; NDim rs As Recordset 4 d4 o4 t' \: n, Z9 k( P
Dim RowNum As Integer $ i: J% }; @' b) \- a# ^
Set work = DBEngine.Workspaces(0)
6 D* v$ A! t7 m" S6 lDim dbs As Database 1 _) Y L+ ]5 H/ |/ y5 b7 V
Dim tdfNew As TableDef
9 [% x$ j, w4 Z! O) ODim tdf As TableDef
0 Y6 O* Z7 d. u; ^7 XDim dbsname As String / o3 w7 |; f7 P3 m! N. d) B& @0 X
Dim array1 As Variant
. @) Z( N& i6 Z5 B& t$ x. sDim array2 As Variant ‘声明所需的变量及类型 - _* m0 r( v# s: E9 W
dbsname = “D:\材料表.mdb”
$ h- I1 i2 n( O‘声明Access数据库写到哪一个文件
1 Q, L7 q/ X( v; \6 WOn Error Resume Next
7 o; z7 H& H9 f- E2 x! @4 I MSet dbs = work.CreateDatabase(dbsname, _
) D6 ?9 S0 u# C0 RdbLangGeneral)
/ X( S/ h5 Y0 oIf Err Then * ]$ h5 t8 F. e& ?; M
Kill (dbsname) 9 X) ^$ {/ I g' B
‘发现要写入的Access数据库文件已存在就将其删除
) q' k; Y! u, E2 V; L' R. \& MSet dbs = work.CreateDatabase(dbsname, _ ' ^2 m0 j" [ x8 F
dbLangGeneral) ( {- C: L, q. M) w: g' y
End If # \5 N5 s7 o% {
Set tdfNew = dbs.CreateTableDef 3 i, k/ W: `1 U% w% a0 r7 _
(“电气 _材料明细表”)
3 i# Z" e" ^$ N8 c‘建立一个名为电气材料明细表的表 ( ~8 {2 q0 Y# t7 a/ {, J- ^
RowNum = 0
! F, F0 Q- i) I' U. k, j. D3 {# J" s) aDim Header As Boolean
; U+ D9 n0 [: P, WHeader = False
' q. f V' @ \: e/ j0 uFor Each elem In ThisDrawing.ModelSpace
6 M- X) g2 _3 J. W6 j; {9 Z9 `; p‘在CAD模型空间,查找所有图形对象 ! V+ _0 R7 [+ x: A9 o9 v7 z9 S
With elem
2 w: B& l- c& MIf StrComp(.EntityName,_
% \9 V3 y- o% B" M* P: e“AcDbBlockReference”, 1) = 0 Then 9 x% A, {: ~5 G/ Q0 h0 W
If .HasAttributes Then
% @+ v2 \7 y8 n h5 a6 G9 I" m3 ~' T! qarray1 = .GetAttributes - W2 f3 a& L4 B7 V
array2 = .GetConstantAttributes + w# D1 I5 H" E* F$ y# [7 v& E! U
‘设置array1指向图形对象的属性
0 Q+ P. u; x8 B) [‘设置array2指向图形对象的固定属性 $ v( ~. M2 Z% }- \' T; M
For Count = LBound(array2) To _ 3 b; O$ @& ^+ w
UBound(array2)
5 c0 M, M: L# d/ r4 N; Q# t) ?. fIf Header = False Then + x+ m8 Z& W# _
If StrComp(array2(Count).EntityName, _
8 T/ }7 i2 |, n- O& _“AcDbAttributeDefinition”, 1) = 0 Then
7 T( w& t2 I( \$ R2 C" o7 AtdfNew.Fields.AppendtdfNew._ 0 C/ X9 P) H" T9 ?3 t( ]
CreateField(array2(Count).TagString, dbText) 0 n' ^" m6 z9 H! I- J; M2 z* D
End If : E7 J% q }% i
‘读出属性值读出,作为Access数据库表的标题 / p) ]3 z$ k6 P& ]7 I
End If 9 a, @: G& m# v) c4 }
Next Count P9 I- L: _$ ^+ o; s* A4 l
For Count = LBound(array1) To _
, Q: x& U1 @0 Y4 dUBound(array1) 9 u, @/ ?0 r9 o" Q1 [& ?
If Header = False Then
. B4 M2 D1 y% _ h5 LIf StrComp(array1(Count).EntityName, _ - w2 l) B* A, ~' M& l
“AcDbAttribute”, 1) = 0 Then
. J7 J' S2 b" `7 _tdfNew.Fields.Append tdfNew. _ : u# i' o! u5 G6 s$ _# |) M9 E8 `5 O
CreateField(array1(Count).TagString, dbText)
; S+ N* ^9 u. ]0 L- u9 jEnd If
5 ]; ?$ K1 Q y l$ _$ KEnd If 4 D9 G6 W' u+ Q4 g6 @) ^
Next Count
( r$ Z8 U/ _) R( O. w" E- m" t" FIf Header = False Then 9 M1 m/ n( M, s3 \
dbs.TableDefs.Append tdfNew % t1 e- _& d# z3 m$ ^3 }% X6 l
Set rs = dbs.OpenRecordset # N) l5 Z' _/ e" U6 |/ f
(“电气材料 _明细表”, dbOpenTable) ‘打开记录
- U. t |) Q% R' S; x- B3 ?End If
* D0 e) f j# y# HRowNum = RowNum + 1
F2 E! h( ~5 ^' J+ t6 X3 irs.AddNew ‘增加一笔新记录 7 _8 O. N8 K P/ e ^$ L n7 I
For Count = LBound(array2) _ 1 b7 [- o" c$ Z% \6 N- v
To UBound(array2)
2 F/ r0 C1 S* r, k) h' brs(Count).Value = array2(Count).TextString
& f; |9 }5 `( U# ~' B" RNext Count ‘读固定属性值 ; j3 [1 y9 ~ O9 q
For Count = LBound(array1) To _ 8 m& h$ p. H j
UBound(array1)
) U# a% a) @/ N: n9 Rrs(UBound(array2) + Count + 1).Value = _ 4 t& z/ R4 t$ Q" c2 J) L, ^
array1(Count).TextString 2 T/ i; E- e( H2 d2 m7 f7 @7 l
Next Count ‘读输入属性值 $ x% \, w( S. V0 _2 n
rs.Update ‘增加新记录修改结束 : g+ X, Y' h4 X8 t( O2 K0 P
Header = True ; h* @2 k2 i) D$ ~& [: ~& j% ^
End If
- W/ |& F8 X% [" ?9 A, g. K( uEnd If
- v% s1 a' Q" NEnd With 9 {$ t9 k! Q# M- u$ b
Next elem
" I) R4 Y$ B% D+ r+ i: f6 C1 Urs. Close ‘关闭记录,释放资源 ! b2 T% g" Q& w! |6 I! W5 J, B/ |
dbs.Close ‘关闭数据库,释放资源 - Y5 [0 v& Q" u' A' ^( z/ F
End Sub |
|