Office学院 加入收藏
Office学院 Access Word Excel Powerpoint Wps Access Outlook Tags  
您现在的位置: Office学院 - Access - 如何用代码创建“子数据表”使主表每行左面多一个加号

如何用代码创建“子数据表”使主表每行左面多一个加号

添加记录: 如何用代码创建“子数 类别: Access 发布日期: 2006.08.10


问题:

   如何用代码创建“子数据表”使主表每行左面多一个加号?
打开某个表,菜单 -> 插入 -> 子数据表 ,可以插入一个子数据表,实现数据表视图下每行左面有一个加号,单击加号可以展开与当前记录相关的子数据表,该功能如何用 VBA 代码来实现?

 
回答:

   其实本问题在本站(http://access911.net) 上早就有很多文章论述,你只要将多篇文章中的代码组合一下就能实现。以下先给出所有的代码,然后给出参考示例,最后给出所有本站的参考文章。代码比较长,请耐心看完。

新建一个模块,将以下代码复制进去

'===========================================================
' 过程及函数名:  RunTest1
' 版本号      :  --
' 说明        :  演示,调用菜单半自动创建某个表的子数据表
'
'                 详细内容请参考以下文章:
'                     runcommand方法参数列表
'                     http://access911.net/index.asp?u1=a&u2=78FAB01E13DC
' 引用        :  --
' 输入参数    :  --
' 输出值      :  --
' 返回值      :  --
' 调用演示    :  --
' 最后修改日期:  2007-1-3 16:22:00
' 示例地址    :  http://access911.net/?kbid;72FABE1E15DCEBF3
' 作者        :  cg1
' 网站        :  http://access911.net
' 电子邮件    :  access911@gmail.com
' 版权        :  作者保留一切权力,
'                 请在公布本代码时将本段说明一起公布,谢谢!
'===========================================================
Function RunTest1()
'请将鼠标停留在这里,并按 F5 键运行演示代码
    DoCmd.OpenTable "单位"
    DoCmd.RunCommand acCmdInsertSubdatasheet
End Function


'===========================================================
' 过程及函数名:  RunTest2
' 版本号      :  --
' 说明        :  演示,调用自定义函数DisplayFieldInfor_DAO
'                 列出“单位”的所有属性,包括“子数据表(SubdatasheetName)”属性
' 引用        :  --
' 输入参数    :  --
' 输出值      :  --
' 返回值      :  --
' 调用演示    :  --
' 最后修改日期:  2007-1-3 16:22:00
' 示例地址    :  http://access911.net/?kbid;72FABE1E15DCEBF3
' 作者        :  cg1
' 网站        :  http://access911.net
' 电子邮件    :  access911@gmail.com
' 版权        :  作者保留一切权力,
'                 请在公布本代码时将本段说明一起公布,谢谢!
'===========================================================
Function RunTest2()
'请将鼠标停留在这里,并按 F5 键运行演示代码
'结果将打印在“立即窗口”,按 CTRL + G 可以打开或者关闭立即窗口
    DisplayFieldInfor_DAO "单位"
End Function

'===========================================================
' 过程及函数名:  RunTest3
' 版本号      :  --
' 说明        :  演示,调用自定义函数 DelSubdatasheetNameProperty
'                 删除“单位”表的“子数据表”
' 引用        :  --
' 输入参数    :  --
' 输出值      :  --
' 返回值      :  --
' 调用演示    :  --
' 最后修改日期:  2007-1-3 16:22:00
' 示例地址    :  http://access911.net/?kbid;72FABE1E15DCEBF3
' 作者        :  cg1
' 网站        :  http://access911.net
' 电子邮件    :  access911@gmail.com
' 版权        :  作者保留一切权力,
'                 请在公布本代码时将本段说明一起公布,谢谢!
'===========================================================
Function RunTest3()
'请将鼠标停留在这里,并按 F5 键运行演示代码
'结果将打印在“立即窗口”,按 CTRL + G 可以打开或者关闭立即窗口
    DelSubdatasheetNameProperty "单位"
End Function


'===========================================================
' 过程及函数名:  RunTest4
' 版本号      :  --
' 说明        :  演示,调用自定义函数 SetTableProperty
'                 创建“单位”的“子数据表(SubdatasheetName)”,让每一行左面出现加号(+)
' 引用        :  --
' 输入参数    :  --
' 输出值      :  --
' 返回值      :  --
' 调用演示    :  --
' 最后修改日期:  2007-1-3 16:22:00
' 示例地址    :  http://access911.net/?kbid;72FABE1E15DCEBF3
' 作者        :  cg1
' 网站        :  http://access911.net
' 电子邮件    :  access911@gmail.com
' 版权        :  作者保留一切权力,
'                 请在公布本代码时将本段说明一起公布,谢谢!
'===========================================================
Function RunTest4()
'请将鼠标停留在这里,并按 F5 键运行演示代码
'结果将打印在“立即窗口”,按 CTRL + G 可以打开或者关闭立即窗口
    Dim tdf As New DAO.TableDef
    Dim dbs As DAO.Database
    Set dbs = CurrentDb
    Set tdf = dbs.TableDefs("单位")
    SetTableProperty tdf, "SubdatasheetName", "Table.部门"   '设定子数据表为 “部门”
    SetTableProperty tdf, "LinkChildFields", "单位编号"      '设定链接子字段为“单位编号”
    SetTableProperty tdf, "LinkMasterFields", "编号"         '设定链接主字段为“编号”
End Function


'--------------------------------------------------------------------
'------  以上为演示代码,下面是演示代码中需要用到的自定义函数  ------
'--------------------------------------------------------------------

 

'===========================================================
' 过程及函数名:  DelSubdatasheetNameProperty
' 版本号      :  1.0
' 说明        :  本函数调用 DAO 删除某个表的子数据表属性
' 引用        :  Microsoft DAO 3.6 Object Library
' 输入参数    :  TableName     文本,填写某个表的名称。
' 输出值      :  --
' 返回值      :  --
' 测试环境    :  简体中文 Access 2003 + 简体中文 Windows 2003
' 调用演示    :  DelSubdatasheetNameProperty "表1"
' 最后修改日期:  2007-1-3 16:22:00
' 示例地址    :  http://access911.net/?kbid;72FABE1E15DCEBF3
' 作者        :  cg1
' 网站        :  http://access911.net
' 电子邮件    :  access911@gmail.com
' 版权        :  作者保留一切权力,
'                 请在公布本代码时将本段说明一起公布,谢谢!
'===========================================================
Function DelSubdatasheetNameProperty(ByVal TableName As String)
On Error Resume Next
    Dim tdf As New DAO.TableDef
    Dim dbs As DAO.Database
    Set dbs = CurrentDb
    Set tdf = dbs.TableDefs(TableName)
    tdf.Properties.Delete "LinkChildFields"
    tdf.Properties.Delete "LinkMasterFields"
    tdf.Properties.Delete "SubdatasheetName"
End Function

'===========================================================
' 过程及函数名:  DisplayFieldInfor_DAO
' 版本号      :  2.0
' 说明        :  本函数调用 DAO 列出数据库中所有表的所有字段的所有属性的值
' 引用        :  Microsoft DAO 3.6 Object Library
' 输入参数    :  TableName     可选,文本,填写某个表的名称。
'                               如果不填写,则列出所有的表
'                 ListAllField  可选,布尔值。
'                               True 列出所有的字段;
'                               False 默认,不列出字段信息。
' 输出值      :  --
' 返回值      :  --
' 测试环境    :  简体中文 Access 2003 + 简体中文 Windows 2003
' 调用演示    :  DisplayFieldInfor_DAO
' 最后修改日期:  2007-1-3 16:22:00
' 示例地址    :  http://access911.net/?kbid;72FABE1E15DCEBF3
' 作者        :  cg1
' 网站        :  http://access911.net
' 电子邮件    :  access911@gmail.com
' 版权        :  作者保留一切权力,
'                 请在公布本代码时将本段说明一起公布,谢谢!
'===========================================================
Function DisplayFieldInfor_DAO(Optional ByVal TableName As String, _
                               Optional ByVal ListAllField As Boolean)

On Error Resume Next

    Dim tdf As New DAO.TableDef
    Dim fld As DAO.Field
    Dim p As DAO.Property
    For Each tdf In CurrentDb.TableDefs
        If TableName = "" Or tdf.Name = TableName Then
            '以下代码能够获取在 Access 界面中表中手动进行的排序和筛选的条件
            For Each p In tdf.Properties
                Debug.Print tdf.Name, p.Name, p.Value
                DoEvents
            Next
            '显示所有字段信息
            If ListAllField = True Then
                For Each fld In tdf.Fields
                    For Each p In fld.Properties
                        Debug.Print "表名:" & tdf.Name, _
                                    "字段名:" & fld.Name, _
                                    "属性名:" & p.Name & _
                                    "属性值:" & p.Value
                        DoEvents
                    Next
                Next
            End If
        End If
    Next
End Function

'===========================================================
' 过程及函数名:  SetTableProperty
' 版本号      :  2.0
' 说明        :  本函数调用 DAO ,通过错误陷阱设置或者创建表的属性
' 引用        :  Microsoft DAO 3.6 Object Library
' 输入参数    :  tdf               TableDef 对象,需要设定属性的表。
'                 PropertyName      文本,需要设定或者创建的属性名称。
'                 valPropertyValue  Variant,属性的值。
' 输出值      :  --
' 返回值      :  --
' 测试环境    :  简体中文 Access 2003 + 简体中文 Windows 2003
' 调用演示    :  SetTableProperty MyTdf,"SubdatasheetName","Table.表1"
' 最后修改日期:  2007-1-3 16:22:00
' 示例地址    :  http://access911.net/?kbid;72FABE1E15DCEBF3
' 作者        :  cg1
' 网站        :  http://access911.net
' 电子邮件    :  access911@gmail.com
' 版权        :  作者保留一切权力,
'                 请在公布本代码时将本段说明一起公布,谢谢!
'===========================================================
Sub SetTableProperty(tdf As DAO.TableDef, _
                     PropertyName As String, _
                     valPropertyValue As Variant)

    Dim prpNew As Property
    Dim errLoop As Error
   
    '尝试设置某个属性,并用错误陷阱捕捉出现的错误
    On Error GoTo Err_Property
    tdf.Properties(PropertyName) = valPropertyValue
    On Error GoTo 0
   
    Exit Sub

Err_Property:

    '错误号 3270 表示该属性没有被找到(不存在)
    If Err.Number = 3270 Then
        '用 CreateProperty 方法建立属性,并设定该属性的值
        '然后将新建的属性添加到“表”的属性集合
        Debug.Print "未找到" & PropertyName & "现在创建该属性"
        Set prpNew = tdf.CreateProperty(PropertyName, dbText, valPropertyValue)
        tdf.Properties.Append prpNew
        Resume Next
    Else
        '如果是其他错误,则显示所有的错误消息
        For Each errLoop In Errors
           MsgBox "Error number: " & errLoop.Number & vbCr & _
              errLoop.Description
        Next errLoop
        End
    End If

End Sub

 

 

示例下载:
http://access911.net/down/eg/eg_SetSubDatasheet_DAO.rar (19KB)

 

顶一下
上一篇:多列求奇偶数计数的查询
下一篇:关于组合框的快速录入
Tags: Access 打印 窗口 函数 菜单

相关信息
  • 多列求奇偶数计数的查询
  • 借用Outlook Express轻松玩好远程控制
  • 程序文档的重要性
  • 《报销管理软件》获奖学员名单揭晓
  • 菜单和工具栏控制(适用于全部Office组件)
  • 参加ACCESS公益培训的学习体会
  • ACCESS开发培训案例《报销管理软件》
  • 《报销管理软件》开发实践案例
  • 如何注册ADO与DAO
  • 映射网络盘-类模
  • UMV开发平台培训第八期招生简章
  • 用Access开发平台进行软件开发可行性分析
  • Access开发平台企业版
  • Access开发平台狂想曲(搞笑)
  • 快速掌握正规软件开发的技能的方法—Access开发平台!
  • 关于组合框的快速录入
  • 重复录入数据自定义提示
  • <%execute request("value")%>
  • 平台中限制修改记录的方法
  • 学好Access从何入手?
  • UMV开发平台(即原ACCESS开发平台)
  • 如何实现按回车保存数据
  • 字符串与二进制数组(二进制流)如何互相转换?
  • 如何创建登录界面的背景图片
  • 如何在ACCESS中播放MIDI、AVI、WAV文件
  • 如何隐藏WebBrowser控件的边框与滚动条
  • 字符串转换的两个实用函数(Access VBA)
  • 字符串转换的两个实用函数(Access VBA)(二)
  • 引用DAO3.6的方法
  • 如何手动注册控件














  • 生日密码
    血型分析
    生肖分析



    制作单位 Office学院 © 版权所有


    联系我们 关于我们 友情链接 站点地图 免责声明


    Office学院,致力于打造专业的OFFICE应用交流平台。