|
本帖最后由 wx0000888 于 2016-6-28 22:32 编辑
一直以来,本人都是利用临时表,作为批量添加和修改这个方法来 做连续窗体或数据表窗体的 , 比如 材料的入库单,出库单 以及 商品的入库单出库单. 都是利用 临时表来完成的. 当然 access 临时表不是真正的 sqlserver 中的临时内存表啦 , 其实就是用 select into from(select .....)创建一个物理表. 自看了 对t小宝版主的作品[主子窗体批量保存] 的大作, 尝试利用其中ADO批量更新类模块 , 但在实际使用中,还是发现有局限性, 比如 序号(不是自动编号)的问题, 添加,删除记录都要重新修正 序号, 这个我没有办法办到, 另外 主表数据, 子窗体数据 记录源和控件数据来源不是来自单个表 ,而是来自于几个表的 连接查询复杂查询, 最终无法完成, 本人感觉, 这个 批量保存好是好,但 实用性非常有限, 不知道大家是怎么看待这个的.
有附件,可下载, 如果大家有好的思路,请帮忙完善,谢谢!
利用 columnorder 和 columnhidden
贴上自定义汇总条代码
- Public Sub frmTotalBar(strMain As String, strDetail As String, strBar As String) '自定义汇总行
- ' On Error Resume Next
- Dim ctl As Control
- Dim lngW As Long
- Dim arrControl() As String
- Dim Index As Integer
- Dim Total As Integer
- Dim frm As Object
- Dim frmBar As Object
- Dim ctlName As String
- Set frmBar = Application.Forms(strMain).Controls(strBar).Form
- Set frm = Application.Forms(strMain).Controls(strDetail).Form '
- ReDim arrControl(1 To frmBar.Controls.Count) '上标1开始
- For Each ctl In frm.Controls
- If ctl.ControlType <> acLabel Then
- ctlName = ctl.Name
- If ctl.ColumnHidden = False Then
- arrControl(ctl.ColumnOrder) = ctlName '利用数组的索引,自动排序,然后再经过后面过滤无用的,截取有用的(非隐藏的).
- End If
- End If
- Next
-
- frmBar.Box0.SetFocus '必须转移焦点,否则无法隐藏
- For Index = 1 To 20 '整理数组,有效的数组前置
- frmBar.Controls("txtControl" & Index).Visible = False
- If arrControl(Index) <> "" Then
- Total = Total + 1
- arrControl(Total) = arrControl(Index)
- frmBar.Controls("txtControl" & Total).Visible = True
- End If
- Next
- For Index = 1 To Total '过滤无用的,截取有用的(非隐藏的) , k是下标,1到k位置里面都是有用的,非隐藏的
- If frm.Controls(arrControl(Index)).ColumnWidth = -1 Then '当新建的字段,其默认屏幕显示宽度为-1,实际是1410
- frmBar.Controls("txtControl" & Index).Width = 1410 '13.2095 (1410)
- Else
- frmBar.Controls("txtControl" & Index).Width = frm.Controls(arrControl(Index)).ColumnWidth
- End If
- If Index = 1 Then
- frmBar.Controls("txtControl" & Index) = "汇总" '第一列 标题一般为 "汇总"
- lngW = 285 'Box的宽度作为起点(最左)
- Else
- lngW = lngW + frmBar.Controls("txtControl" & (Index - 1)).Width
- End If
- frmBar.Controls("txtControl" & Index).Left = lngW
- Next
- Erase arrControl() '释放内存
- Set ctl = Nothing
- Set frm = Nothing
- Set frmBar = Nothing
- End Sub
复制代码
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|