|
|
Sub list()
( L6 s' B `: }$ k( |$ uDim work As Workspace 4 G" @, q+ P7 _7 e
Dim new As Database
- z7 J7 B l2 [Dim elem As Object
. ^$ U3 \& W! M" v* c. v; NDim rs As Recordset
8 p7 T: [9 }9 {Dim RowNum As Integer
* ]" e8 G( p: l" i6 `. r iSet work = DBEngine.Workspaces(0)
$ L9 B+ O: B$ o) ODim dbs As Database
; m) n8 M) J% T( Q8 ?& XDim tdfNew As TableDef 3 { m# r& M9 `: Y# g
Dim tdf As TableDef
2 z! l7 c3 t/ ?7 ^# O1 MDim dbsname As String - w0 \. [: X. d8 b. a. o
Dim array1 As Variant , r. f& `, S2 p3 g' p
Dim array2 As Variant ‘声明所需的变量及类型 ( h" Q$ F, F" {5 m$ m k6 C0 a% V
dbsname = “D:\材料表.mdb” 0 O& d0 @3 g% }5 k- x. Z
‘声明Access数据库写到哪一个文件 " U! Z" M2 l& a# l% W
On Error Resume Next
( P: n3 g* S, I8 l j3 B; RSet dbs = work.CreateDatabase(dbsname, _
6 s1 E! {2 k5 n/ K1 adbLangGeneral) , a- B+ ~9 {* A/ q# e, o+ e5 b; \- [
If Err Then 0 O9 ]) t( f n# _+ S+ D
Kill (dbsname)
$ I( r% m. x1 U, A, }‘发现要写入的Access数据库文件已存在就将其删除 $ V: ?" j- n. t. b
Set dbs = work.CreateDatabase(dbsname, _
* ~0 q4 P% ~( s9 \dbLangGeneral)
, A# y9 `# q4 ZEnd If * n' q& @5 |3 H- o
Set tdfNew = dbs.CreateTableDef ) ~8 G3 `8 M- Z" U
(“电气 _材料明细表”) 5 X c/ M' O" B( E) u$ Q
‘建立一个名为电气材料明细表的表
# T4 e* S; l& }6 r- KRowNum = 0
$ x* w6 C, d( y) _0 @Dim Header As Boolean
% t- O# \, E: F4 l0 g' B/ |Header = False
# E1 x8 s; `7 \For Each elem In ThisDrawing.ModelSpace # u% |1 H/ n# J8 K1 c" E
‘在CAD模型空间,查找所有图形对象 : Z, S- ~# W2 M( l- V# m+ S$ u+ x
With elem & ~4 P) B4 b. A
If StrComp(.EntityName,_
* O( r" W7 O! f4 v: Z, o" a“AcDbBlockReference”, 1) = 0 Then & {% a4 U8 Y/ R" H: Q' Z2 J4 [
If .HasAttributes Then ( ?" T4 f- x. b- y, O. Y# A) x
array1 = .GetAttributes
0 s* \, z! x* H' M7 n% h% darray2 = .GetConstantAttributes
7 V( @7 A( g( w2 E6 C‘设置array1指向图形对象的属性 @5 f* T" n4 c# g
‘设置array2指向图形对象的固定属性 ! P3 _6 W0 q7 z& |) z4 v) F* ~: D
For Count = LBound(array2) To _ 1 l& v2 P" ~# P$ z2 j1 i
UBound(array2) 8 J; i! A- x9 b3 c
If Header = False Then 7 a8 b6 Y7 `( p( K! g' N* J
If StrComp(array2(Count).EntityName, _
: [) {# O w/ h! Q r“AcDbAttributeDefinition”, 1) = 0 Then
/ l9 ]8 Y# p2 A$ w0 Z& i2 w" [tdfNew.Fields.AppendtdfNew._
* w9 Y6 r( c# t& V4 g9 zCreateField(array2(Count).TagString, dbText) 0 O5 ]) `3 J5 J' B8 ?0 J2 Z
End If # ]0 x3 ]/ ], s( z; g: ~
‘读出属性值读出,作为Access数据库表的标题
4 o/ D @$ B0 L% y- ]3 d) JEnd If % O- D& V7 c ?5 A
Next Count 1 ~7 l2 p8 `5 @0 o3 |- l
For Count = LBound(array1) To _
( b, J* a( w! x) A( v iUBound(array1)
5 m V" z( {# G/ r. \. wIf Header = False Then * A$ F) Y$ K3 z( Y
If StrComp(array1(Count).EntityName, _
+ } K" m9 ^7 F; f, h+ c“AcDbAttribute”, 1) = 0 Then
$ r/ n; \ Z. j0 s: l+ J$ N' ~8 f% DtdfNew.Fields.Append tdfNew. _ ! v: u/ _+ w( }* o3 |
CreateField(array1(Count).TagString, dbText) 4 @1 l: V- h( C7 i( s
End If
! {& F( a2 P- hEnd If
5 e Q# b6 p0 X& x6 j' RNext Count
) w0 t8 _. P8 A! Q4 x: _% l, LIf Header = False Then
+ `6 k, D0 T; G3 p; G* y kdbs.TableDefs.Append tdfNew
% p& S/ H5 q( |Set rs = dbs.OpenRecordset 3 ^. t1 `. Q2 d) c: L
(“电气材料 _明细表”, dbOpenTable) ‘打开记录
: ]$ C% k Y ^, S; HEnd If
/ g. Q4 K+ W: Z0 R C, c! r7 k6 \0 PRowNum = RowNum + 1
; s8 ]8 N+ U. Y9 Z$ L; l5 q4 D2 P9 F7 ~rs.AddNew ‘增加一笔新记录
" J$ ?$ G& H, n# z1 ]) hFor Count = LBound(array2) _ " ~1 M! m8 j8 g- g3 Y- F# z) f q
To UBound(array2) 9 F" k4 o& w2 u/ g. M) C9 G3 f$ A
rs(Count).Value = array2(Count).TextString ! I4 @& c+ h5 T7 H' D
Next Count ‘读固定属性值 ! N N6 i, S* B! N, v+ A, K
For Count = LBound(array1) To _ 7 x- k1 Y) |9 d* M4 {' U) {
UBound(array1) % V- J+ e& \3 g( E; f* c' R& Z" s1 ?: A
rs(UBound(array2) + Count + 1).Value = _
6 A- M/ K5 Y) [array1(Count).TextString
/ g7 c: F+ `0 l' q; U& I, y# bNext Count ‘读输入属性值 # L) ^! o$ u9 B( t3 W
rs.Update ‘增加新记录修改结束
$ A* h. f6 s% L7 Z3 ?" ]8 `Header = True ' X% P( K, w6 i' P2 w% p
End If 6 r" }! ~3 w5 K) r
End If
2 ]+ s: S) z8 jEnd With 1 y/ V6 u$ H! F# a% y
Next elem . E& {0 c8 V0 M: l! q; \
rs. Close ‘关闭记录,释放资源
8 T% k" A1 h- X: @1 |dbs.Close ‘关闭数据库,释放资源
( D- @7 P |$ S' J. c4 qEnd Sub |
|