通过DAO对象访问ACCESS库属性(Properties)遇到问题:

Gujianda 2009-08-31 07:27:29
直接用 ACCESS2000 创建的库,列出的表名如下:
1,MSysAccessObjects
2,MSysAccessXML
3,MSysACEs
4,MSysObjects
5,MSysQueries
6,MSysRelationships
7,库表索引

而在程序中通过 ADOX 对象创建的库,列出的表如下:
1,MSysAccessObjects (甚至连这个表也没有)
2,MSysACEs
3,MSysObjects
4,MSysQueries
5,MSysRelationships
6,测试表

问题时我现在如果想对后者的[SummaryInfo]属性项读写时,发现它也没有!

进一步发现:
后者只有如下两个[Documents]项:
1,AccessLayout
2,MSysDb

前者却有如下四个[Documents]项:
1,AccessLayout
2,MSysDb
3,SummaryInfo
4,UserDefined

请高手指点。



...全文
161 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
布衣散人 2009-09-03
  • 打赏
  • 举报
回复
关注
cqq_chen 2009-09-01
  • 打赏
  • 举报
回复
如果有msdn,建议看看visdata,对dao操作说的很全面........
Gujianda 2009-08-31
  • 打赏
  • 举报
回复
这会功夫主要在研究如下一段示例代码,确实帮助我了解了一些 ACCESS库属性之“全貌”:

Dim db As DAO.Database
Set db = OpenDatabase(dbPathName)

Dim p As Container
Dim pp As DAO.Property
Dim d As DAO.Document
Dim dp As DAO.Property
Dim pc As DAO.Property

txtTip = ""
For Each p In db.Containers
txtTip = txtTip & p.Name & vbCrLf
'=======================================================================================================
For Each d In p.Documents
' '以下列出所有数据库属性
'-----------------------------------------------------------------------------
For Each dp In d.Properties
On Error Resume Next
txtTip = txtTip & p.Name & vbTab & d.Name & vbTab & dp.Name & "=" & dp.Value & vbCrLf '

'如果你只要列出 菜单->文件->数据库属性 中的资料,请用以下代码
If p.Name = "Databases" And d.Name = "SummaryInfo" Then
txtTip = txtTip & p.Name & vbTab & d.Name & vbTab & dp.Name & "=" & dp.Value & vbCrLf
'以下代码测试如何写入该属性
If dp.Name = "Author" Then
dp.Value = "原文出处: http://www.access911.net" & Now
End If
End If
DoEvents
Next
'-----------------------------------------------------------------------------

' '为每一个 DAO.Document 对象添加一个用户定义属性。包括表、窗体、查询、报表等
' Set pc = d.CreateProperty("我添加的属性", dbText, Now)
' d.Properties.Append pc'

' '为某一个 DAO.Document 对象添加一个用户定义属性
' If p.Name = "Databases" And d.Name = "SummaryInfo" Then
' Set pc = d.CreateProperty("单位", dbText, "公司")
' d.Properties.Append pc '
' Set pc = d.CreateProperty("部门", dbText, "销售")
' d.Properties.Append pc '
' Set pc = d.CreateProperty("科室", dbText, "本地")
' d.Properties.Append pc '
' Set pc = d.CreateProperty("小组", dbText, "五金")
' d.Properties.Append pc '
' End If

' If err.Number = 3367 Then
' 'Debug.Print "[" & p.Name & "][" & d.Name & "]中该属性已经添加过了"
' err.Clear
' End If
Next
'=======================================================================================================

'以下列出 MDB 容器中所有容器的名称以及属性
'=======================================================================================================
'For Each pp In p.Properties
' On Error Resume Next
' txtTip = txtTip & p.Name & vbTab & pp.Name & "=" & pp.Value & vbCrLf
'Next
'=======================================================================================================
Next
db.Close
Set db = Nothing
jhone99 2009-08-31
  • 打赏
  • 举报
回复
猜想access自动建立了一些东西,可能ADOX 用某些语句也可能做到,也可能某些做不到
jhone99 2009-08-31
  • 打赏
  • 举报
回复
看来lz已经解决
Gujianda 2009-08-31
  • 打赏
  • 举报
回复
1,之所以关心 Document集合之[SummaryInfo]项,是希望我在程序中添加的附加信息能直接在ACCESS界面下浏览甚至修改。
2,现在看来这不行也不必。我想给库加的附加信息应该是对普通用户“不可见”的。
3,所以这些附加信息完全可以加在Document集合之[MSysDb]项。
4,谢谢参与者。
chinaboyzyq 2009-08-31
  • 打赏
  • 举报
回复
有些信息不添加是没有的,比如ADO创建库时就不会创建UserDefined(用户定义属性),并且这些属性与数据进出库没有绝的关系,也就是说没有他们,也不影响数据库正常工作。
用数据库我们关心的是:如何最快速的把数据装入数据库和把数据从数据库中取出,其它是次要的。



贝隆 2009-08-31
  • 打赏
  • 举报
回复
关注
Gujianda 2009-08-31
  • 打赏
  • 举报
回复
现在似乎有些头绪了:
对于ACCESS数据库的:[dbm.Containers("databases").Documents]属性,
1,在程序中用 ADOX 创建的“新”库,只有如下项:
MSysDb
2,用 ACCESS2000 打开过后,就有如下项:
AccessLayout
MSysDb
3,用 ACCESS2000 打开,写过“数据库属性”后,就有如下项:
AccessLayout
MSysDb
SummaryInfo
4,如果库是在 ACCESS2000 里直接新建的,就有如下项:
MSysDb
SummaryInfo
UserDefined

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧