Access交流中心

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

[请教]将窗体上的非绑定文本框批量保存到表中

jianju  发表于:2014-09-28 10:08:16  
复制

各位大神,我建立一个窗体form_1用于查看,修改数据表中的数据,我将窗体中文本框的名称对应表中的字段名称。一直没有解决:

1)如何表中的记录复制给t1,t2,t3,t4,...,tn(记录中的数据多于n个),

      文本框修改好后如何批量保存给记录。

我又建立一个新窗体form_2用于添加新记录

2)新记录和某条旧记录的很多信息都是一样的,所以此时我要从旧记录获取部分内容,因此只需要提取记录中的部分信息,新记录再加上其他内容他保存到数据表中的新记录中。这时候要如何做?

谢谢回复。

 

Top
煮江品茶 发表于:2014-09-28 20:17:27

http://www.accessoft.com/article-show.asp?id=8543

 

Public Sub SetParentFormctrls(ByVal frm As Form)
    '功能:将子窗体控件数据赋值给主窗体对应控件
    Dim ctrls As Controls
    Dim ctrl As Control

    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, ByVal subfrm 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

   
    On Error Resume Next

    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
   
    subfrm.Requery
    subfrm.SelTop = subfrm.RecordsetClone.RecordCount

End Sub

Public Sub UpdateTB(ByVal tbname As String, ByVal idfieldname As String, ByVal frm As Form, ByVal subfrm 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
    Dim m As Long
   
    On Error Resume Next
   
    m = subfrm.SelTop
    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
   
    subfrm.Requery
    subfrm.SelTop = m
   
End Sub

Public Sub DeleteTB(ByVal tbname As String, ByVal idfieldname As String, ByVal frm As Form, ByVal subfrm 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
   
    On Error Resume Next
   
    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
   
    subfrm.Requery
End Sub

 



jianju 发表于:2014-09-29 14:36:01
万分感谢,跪拜了....正在研究中

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