|
|
Sub list()
* g0 q* u% p' b5 y3 {' o8 XDim work As Workspace
7 w, k' R8 _, d* T a: W! VDim new As Database - G7 A/ T' F. [ _1 h; |% N
Dim elem As Object
/ h6 u" T2 R! G1 f- f+ ~Dim rs As Recordset
1 o& | m+ w8 u/ uDim RowNum As Integer 8 y" O9 k- @! j
Set work = DBEngine.Workspaces(0) ! H! a9 Y; |9 ^3 E: V9 K
Dim dbs As Database + Q2 x( ~- J! m
Dim tdfNew As TableDef
$ E. R6 c! @: R5 h; c( lDim tdf As TableDef
, }- A( E+ `$ l: _" f! @Dim dbsname As String 1 q* }# [) E1 E0 }
Dim array1 As Variant 9 u. {( ^" f2 n
Dim array2 As Variant ‘声明所需的变量及类型 , K; u7 @7 a0 O3 L) w, k( e5 H
dbsname = “D:\材料表.mdb” ! ~5 C& o1 }7 d- S
‘声明Access数据库写到哪一个文件
$ i) w* E7 l0 AOn Error Resume Next
/ ]% n7 w y& E8 Z" z# e9 eSet dbs = work.CreateDatabase(dbsname, _
1 S; H6 C8 m- ~% [dbLangGeneral)
& @ C. h* O8 b# V5 a; V) S/ M2 i5 UIf Err Then . M6 R7 _# w) R; t) [3 S
Kill (dbsname)
) A4 q7 {! g/ Q‘发现要写入的Access数据库文件已存在就将其删除
4 f, E* u3 n: r9 }; LSet dbs = work.CreateDatabase(dbsname, _ " L. B- y8 F$ B" s4 L, m5 ]
dbLangGeneral)
2 W# d8 O+ t% R; e: A WEnd If
9 L: f. p# t0 A/ ]4 e- Z+ aSet tdfNew = dbs.CreateTableDef
9 y0 c$ |: }& E% K" p3 {; }* F(“电气 _材料明细表”)
' I" k- Y3 F& u+ ]* v$ p0 r‘建立一个名为电气材料明细表的表
( ~ w! c( X0 b0 C3 N; X' o( ?6 ZRowNum = 0
1 _# \! ]/ C4 ?! n2 O0 _Dim Header As Boolean - n6 [6 S+ B7 e1 e; y; Z
Header = False 4 q! c* |5 s) h" Z: L$ n
For Each elem In ThisDrawing.ModelSpace
9 Z: s$ }' m7 |: K‘在CAD模型空间,查找所有图形对象
: s( |, x: H( w* t( k5 dWith elem 4 x7 h7 H! p2 n, i- U
If StrComp(.EntityName,_ , \6 U E! D8 }3 ~* ]
“AcDbBlockReference”, 1) = 0 Then + f& E1 p* Y0 O1 {
If .HasAttributes Then
, k7 x4 u }% h" ?$ K& \3 \array1 = .GetAttributes ' k. z3 [3 L+ d4 R
array2 = .GetConstantAttributes
4 Y E1 N+ A9 G9 I2 l& B0 W‘设置array1指向图形对象的属性
0 V' n6 V5 z3 O7 T‘设置array2指向图形对象的固定属性 + T3 B& E- A6 h+ r4 ?6 y
For Count = LBound(array2) To _ 1 S$ K& ~. o' r& `5 U
UBound(array2) 3 K- V0 Q* P4 ~3 t
If Header = False Then
7 j; p! \* T& X5 O. m, [ [If StrComp(array2(Count).EntityName, _
) B0 `) A' T/ H; G8 C+ y7 D“AcDbAttributeDefinition”, 1) = 0 Then
" ?, W! l) T5 |tdfNew.Fields.AppendtdfNew._
3 t9 p( k6 i& GCreateField(array2(Count).TagString, dbText) ' k" B! E. l% [; ^+ c& x4 f5 K Q
End If
- K" |9 M0 g& N% M‘读出属性值读出,作为Access数据库表的标题 7 l" P u+ ~- D8 f: {: C8 k; S) L
End If % C! U' x; k% Y4 S% p8 }) E& }7 {
Next Count - T- |8 s- x( F( l4 E
For Count = LBound(array1) To _ , N- ~: ?7 L& ^; G. X+ c% o2 L
UBound(array1)
# k9 ^0 C9 R3 f& v$ lIf Header = False Then / v0 }( K- ]) M/ ^
If StrComp(array1(Count).EntityName, _ . N0 L. ?2 | C* f& F" l$ E8 o% n
“AcDbAttribute”, 1) = 0 Then
* }+ h, k8 a) Q% e' W: h5 q% q2 DtdfNew.Fields.Append tdfNew. _ 8 _: B" S8 ^3 [2 b. O+ A
CreateField(array1(Count).TagString, dbText)
, Z1 r; ]2 X! \; h" C9 zEnd If
! p+ R# r! b2 K& Z( MEnd If # p2 b% _! ?- f% ]
Next Count 1 f0 g+ I% B K
If Header = False Then 8 z. }1 H; H4 T" b
dbs.TableDefs.Append tdfNew
& q4 y: M4 p1 z0 r; vSet rs = dbs.OpenRecordset
( X$ f% W0 O* f2 @7 }+ e% v(“电气材料 _明细表”, dbOpenTable) ‘打开记录
8 i' z+ k6 t& wEnd If
% w" i3 Y" e0 P: v6 W, E" Z( HRowNum = RowNum + 1 & W" p A# T7 P$ y, ^
rs.AddNew ‘增加一笔新记录 ! u2 ?1 k* ~" U" d* W" V
For Count = LBound(array2) _ * D2 |& @1 ^7 F5 {8 x9 i
To UBound(array2) - R8 d( o9 @- T) X3 ^
rs(Count).Value = array2(Count).TextString
1 ~4 v: ~, i0 c" h" }8 G( tNext Count ‘读固定属性值
* p- D( d7 h% M V& w2 a& G0 \For Count = LBound(array1) To _
$ o' @: u; M, F" F/ qUBound(array1)
+ @& n9 d1 p+ y$ prs(UBound(array2) + Count + 1).Value = _ 5 u3 Z, ]9 j4 ^5 O8 O
array1(Count).TextString
% k% y" W, M2 }- P" MNext Count ‘读输入属性值 2 `/ k8 r4 ^) c: ^6 }) w+ M0 K8 I. `
rs.Update ‘增加新记录修改结束
& L e* { C* \0 C: fHeader = True
. D, g; L% p$ _4 i- u9 o6 ~End If
2 [( _4 d4 [" REnd If ; U- B8 }* n' r# O+ ^4 N
End With
8 i6 j4 R, k' ?1 M4 {/ wNext elem
1 u1 b0 b P o; \rs. Close ‘关闭记录,释放资源
h3 ]+ i1 c+ U" q+ Fdbs.Close ‘关闭数据库,释放资源 : F' H [, v: l" {5 _+ r: o
End Sub |
|