ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 4376|回复: 11

子窗体如何重新自定义编号

[复制链接]

TA的精华主题

TA的得分主题

发表于 2013-1-6 18:21 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 lzgbc 于 2013-1-6 18:22 编辑

请教大家一个问题:
在子窗体里的表进行排序显示后,原来的"ID"就会乱了,现在,我想增加一个字段列,就是无论怎么排序,这个字段列都是以"1,2,3,4...."的顺序显示.这如何做到呀.请知道的前辈指教一下.急着要用到.在线等,谢谢

TA的精华主题

TA的得分主题

发表于 2013-1-7 13:01 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
在查询中增加一列:
ID:SerializeADO("表名称","字段名",[字段名])

在模块中放上下面的函数
Function SerializeAdo(qryname As String, KeyName As String, KeyValue) As Long
On Error GoTo Err_Serialize
    Dim rs As ADODB.Recordset
    Set rs = New ADODB.Recordset
     rs.ActiveConnection = CurrentProject.Connection
     rs.Open qryname, , adOpenStatic, adLockReadOnly, adCmdTableDirect
     'Find the current record with key value
         Select Case rs.Fields(KeyName).Type
            ' Find data type key value
            Case DB_INTEGER, DB_LONG, DB_CURRENCY, DB_SINGLE, DB_DOUBLE, DB_BYTE
               rs.Find "[" & KeyName & "] = " & KeyValue
            ' Find date type key value
            Case DB_DATE
               rs.Find "[" & KeyName & "] = #" & KeyValue & "#"
            ' Find text type key value
            Case DB_TEXT
               rs.Find "[" & KeyName & "] = '" & KeyValue & "'"
            Case Else
               MsgBox "Errer ;   Invalid KeyName or KeyValue  "
         End Select

        SerializeAdo = Nz(rs.AbsolutePosition, 0)
        rs.Close
        Set rs = Nothing
       Exit Function
Err_Serialize:
         MsgBox "QueryName ", 64, " is wrong "
        Exit Function
End Function

TA的精华主题

TA的得分主题

发表于 2013-1-7 13:39 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
附件中,
方案1,是把作为真实字段存在,主要依靠前端操作界面上的VBA控制形成,
        代码请参看子【方案1_子表窗】
方案2,是在子窗体上设有控件,然后改动子窗控件上的来源于为一个函数计算,但在删除时,
        需要进行requery的刷新,请参看【方案2_子表窗】的代码
方案3,相当于把方案2中的函数放在来来源的查询或SQL语句里,成为一个表达式的字段,然后窗体引用

以上方法整体而言各有千秋,
方案2解决了操作界面的显示问题,方案3可解决报表查询类的输出,但在数据大或类以应用多时,会造成
一定的系统资源的耗用及速度,(注:包括自定义函数方式),还有一点,须要有一定的排序规则,因为你不想看
到的是,新增加的一条记录,结果序号靠前,下次打开时结果跳到前面去了吧。这是这种方式的一个问题

方案1能避免前面的问题,但它也有一定的问题所在,就是须要有一定量的代码来实现,并且要考虑代码运行出错等问题
如能保证存入后台数据时,能是序顺排号,方案1相对于是最优的,不过先要与你的程序编辑方案有关系

取舍须自已拿捏

子窗自动顺序号.rar

19.49 KB, 下载次数: 68

TA的精华主题

TA的得分主题

发表于 2013-1-7 16:46 | 显示全部楼层
本帖最后由 shepdog 于 2013-1-7 16:49 编辑
Renco 发表于 2013-1-7 13:39
附件中,
方案1,是把作为真实字段存在,主要依靠前端操作界面上的VBA控制形成,
        代码请参看子【 ...

看了你的资料。如果用按钮排序,可以Requery;如果用Access自带的菜单排序,没作用。
请教一下,Access自带的排序操作,能引发什么事件?

TA的精华主题

TA的得分主题

发表于 2013-1-8 10:19 | 显示全部楼层
shepdog 发表于 2013-1-7 16:46
看了你的资料。如果用按钮排序,可以Requery;如果用Access自带的菜单排序,没作用。
请教一下,Access自 ...

窗体当前事件,即form_current,当然其他的控件获得焦点,或进入等都有可能,因为要看当前的光标所在的位置及状态有关,因为不确定性,所以一般会发生的是form_current

TA的精华主题

TA的得分主题

发表于 2013-1-8 16:25 | 显示全部楼层
Renco 发表于 2013-1-8 10:19
窗体当前事件,即form_current,当然其他的控件获得焦点,或进入等都有可能,因为要看当前的光标所在的位 ...

on current事件当然可以执行VBA代码,而且这确实是很有用的事件。问题是,无法捕捉到用户是按哪个字段去排序。我建议,通过窗体设置,强制用户通过按钮进行排序。

TA的精华主题

TA的得分主题

发表于 2013-1-8 17:55 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
shepdog 发表于 2013-1-8 16:25
on current事件当然可以执行VBA代码,而且这确实是很有用的事件。问题是,无法捕捉到用户是按哪个字段去排 ...

你可以得到 activatecontrol 来获得当前列表中的控件名,再来进行排序啊,
现在不太明了,你想达到什么目的,也不知道,这个排序和LZ的贴有什么必要的联系?!

TA的精华主题

TA的得分主题

发表于 2013-1-8 19:56 | 显示全部楼层
Renco 发表于 2013-1-8 17:55
你可以得到 activatecontrol 来获得当前列表中的控件名,再来进行排序啊,
现在不太明了,你想达到什么目 ...

比如销售订单窗体,有这些列:ID,销售单号,物料号,数量,建立日期
用户会用access自带的排序,对其中任何一列排序。ID的值,如我们写公式是用销售单号列,而用户用物料号排序,怎么能让程序知道,用户是按物料号排序呢?

TA的精华主题

TA的得分主题

发表于 2013-1-11 09:42 | 显示全部楼层
Renco 发表于 2013-1-10 21:57
你这样的说法,更象是你的行排序是随时变动的,你想要个随着排序变动对应记录的行号
在对于ACCESS来说, ...

是的。其实这个ID字段,没有实质的作用。
access窗体下面,也可以看得到当前记录位置,效果是一样的,只是用户需要习惯而已。

所以,如果我设计access数据库,通常隐藏ID号,然后告诉老板,我们是低成本的,外观方面,不能跟那些高费用的数据库比。

TA的精华主题

TA的得分主题

发表于 2013-1-10 21:57 | 显示全部楼层
shepdog 发表于 2013-1-8 19:56
比如销售订单窗体,有这些列:ID,销售单号,物料号,数量,建立日期
用户会用access自带的排序,对其中 ...

你这样的说法,更象是你的行排序是随时变动的,你想要个随着排序变动对应记录的行号
在对于ACCESS来说,他的子表无直接功能,所以要借助VBA来排序,不象SQL,ORcale一样有类似rownum或row_number函数可以直接调用,所以须要自已根据不同的来源目的,去自定义这个函数或更新值
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-18 00:13 , Processed in 0.046872 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表