Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

选中子窗体数据记录如何能在主窗体中显示

高老头  发表于:2015-03-15 17:35:21  
复制

主子窗体的数据源是同步的,用主窗体输入数据;如发现子窗体中一条记录数据有误,用鼠标选中子窗体的一条记录时如何实现能在主窗体显示,并修改此记录数据。我用的是2013版。

谢谢!

 

Top
风行 发表于:2015-03-16 09:31:59
如何让子窗体中的序号自动等于主窗体中的序号|主子窗体编号关联|链接主字段,链接子字段[Access软件网]
http://www.accessoft.com/article-show.asp?id=8899


煮江品茶 发表于:2015-03-16 13:57:30

用以下函数即可:


Public Sub SetParentFormctrls(ByVal frm As Form)
    '功能:将子窗体控件数据赋值给主窗体对应控件
    Dim ctrls As Controls
    Dim ctrl As Control
    On Error Resume Next
    Set ctrls = frm.Parent.Controls
    For Each ctrl In frm.Controls
        If ctrl.ControlType <> acLabel Then
            ctrls(ctrl.name).Value = ctrl.Value
        End If
    Next
End Sub




Public Function ExCtrl(ByVal frm As Form, ByVal ctrlname As String) As Boolean
    '功能:判断控件是否存在
    Dim b As Boolean
    Dim ctrls As Controls
    Dim ctrl As Control
    Set ctrls = frm.Controls
    b = False
    For Each ctrl In ctrls
        If ctrl.name = ctrlname Then
            b = True
            Exit For
        End If
    Next
    ExCtrl = b
End Function


Public Sub InsertTB(ByVal tbname As String, ByVal idfieldname As String, ByVal frm As Form)
    '功能:从窗体中的同名控件向数据表追加一条记录
    '参数:tbname--表名,idfieldname--主键字段名,frm--窗体名
    Dim rs As New ADODB.Recordset
    Dim ssql As String
    Dim i As Long
    Dim ctrls As Controls
    Dim ctrlname As String
    
    Set ctrls = frm.Controls
    
    ssql = "select * from " & tbname
    rs.Open ssql, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
    rs.AddNew
    For i = 0 To rs.Fields.Count - 1
        ctrlname = rs.Fields(i).name
        If ctrlname <> idfieldname Then
            If ExCtrl(frm, ctrlname) Then
                rs.Fields(i).Value = ctrls(rs.Fields(i).name).Value
            End If
        End If
    Next
    rs.Update
    rs.Close: Set rs = Nothing
End Sub






Public Sub UpdateTB(ByVal tbname As String, ByVal idfieldname As String, ByVal frm As Form)
    '功能:从窗体中的同名控件向数据表更新一条记录
    '参数:tbname--表名,idfieldname--主键字段名,frm--窗体名
    Dim rs As New ADODB.Recordset
    Dim ssql As String
    Dim i As Long
    Dim ctrls As Controls
    Dim ctrlname As String


    Set ctrls = frm.Controls
    
    
    ssql = "select * from " & tbname & " where cstr(" & idfieldname & ")='" & ctrls(idfieldname).Value & "'"
    rs.Open ssql, CurrentProject.Connection, adOpenKeyset, adLockOptimistic


    For i = 0 To rs.Fields.Count - 1
        ctrlname = rs.Fields(i).name
        If ctrlname <> idfieldname Then
            If ExCtrl(frm, ctrlname) Then
                rs.Fields(i).Value = ctrls(rs.Fields(i).name).Value
            End If
        End If
    Next
    rs.Update
    rs.Close: Set rs = Nothing
End Sub


Public Sub DeleteTB(ByVal tbname As String, ByVal idfieldname As String, ByVal frm As Form)
    '功能:从窗体中的同名控件向数据表删除一条记录
    '参数:tbname--表名,idfieldname--主键字段名,frm--窗体名
    Dim rs As New ADODB.Recordset
    Dim ssql As String
    Dim i As Long
    Dim ctrls As Controls
    Dim ctrlname As String
    
    Set ctrls = frm.Controls
    
    ssql = "select * from " & tbname & " where cstr(" & idfieldname & ")='" & ctrls(idfieldname).Value & "'"
    rs.Open ssql, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
    rs.Delete
    rs.Update
    rs.Close: Set rs = Nothing


End Sub



高老头 发表于:2015-04-13 21:18:01
按2楼方法已解决,谢谢!

总记录:3篇  页次:1/1 9 1 :