报销系统课程学习心得-徐海军
Access软件网QQ交流学习群(群号码198465573),欢迎您的加入!
首页 >技术文章> 程序人生


报销系统课程学习心得

发表时间:2011/9/21 16:47:50 评论(0) 浏览(7910)  评论 | 加入收藏 | 复制
   
摘 要:1. =selectrecord() 是怎么工作的,代码在哪里,是系统代码吗?
2. 为什么edit的子窗体可以修改成空,也能保存,但不跳出错误提示。
3. 在实现编辑窗口关闭后,在子窗体中自动定位到所编辑的记录位置的功能时。可否不声明新的变量“g_CurrentSelectStrID”,而直接用“selectstr”。则代码写为
Acchelp_FindstrRecord (selectstr)
4. 报销明细,要先建立查询
5. 新增BXMX_child_add 时,组合控件一个属性是“绑定列”教程设置为1
正 文:

一. =selectrecord() 是怎么工作的,代码在哪里,是系统代码吗? 为了让子窗体打开时,实现两大效果:

1.整行变黑,方便操作员看是哪一条记录;

 2.让某行的第一个字段获得焦点,从而触发焦点事件,来决定操作员是选择的哪一条记录。 Function selectRecord() On Error GoTo Err_selectRecord: '鼠标单击时选定整行记录 DoCmd.RunCommand acCmdSelectRecord Exit_selectRecord: Exit Function Err_selectRecord: Resume Exit_selectRecord End Function 从以上代码可以知道,该函数主要调用DoCmd对象的RunCommand方法,并设置acCmdSelectRecord来达到想要的两大效果, 查询微软的帮助文档可知, DoCmd对象的RunCommand方法用于执行内置菜单命令或内置工具栏命令。它的使用说明中这样写到: Microsoft Access 中的每个菜单命令和工具栏命令都有一个相关的常量,在 Visual Basic 中,可以将常量与RunCommand 方法结合使用来执行该常量对应的命令。 不能使用 RunCommand 方法执行自定义菜单或工具栏上的命令,该方法只能用于内置菜单和工具栏。 RunCommand 方法可替换 DoCmd 对象的 DoMenuItem 方法。 那么在这里,我们要问我们怎么知道这些常量的信息在哪里,他们的作用又是什么?打开对象浏览器(F2),我们可以看到这个是属于AcCommand类下的成员,至于它作用,可以在Google上搜索到,这就不多说了.看到这里,之前那个文本框的获得焦点事件相信大家应该明白了吧,正是这个函数的作用才让第一个字段获得焦点并触发了文本框的获得焦点事件.

2. 为什么edit的子窗体可以修改成空,也能保存,但不跳出错误提示。 作 者:麥田 摘 要:Access开发平台点击"修改"按钮时候如何弹出修改记录不能为"空"的窗口? 正 文: (Q)点击"修改"按钮时候如何弹出修改记录不能为"空"的窗口? (A) 一、问题描述:学员用Access开发平台做数据库系统时候,点击修改按钮可以进行数据记录的修改, 也可以把所有记录都清除了,现想加个弹出提示窗口,让记录不能为空 该如何解决?

 二、解决方法: 方法①以变速箱教程的客户明细里面的"客户名称"修改为例 将下段代码红色部分复制 If IsNull(Me.khmc) or Len(Me.khmc) = 0 Then MsgBox "此信息不能为空,请输入客户名称!", vbCritical, "提示:" Me.khmc.SetFocus Exit Sub End If 至修改窗体代码区绿色部分下面即可 Private Sub ToolbarFrm_ButtonClick(ByVal Button As Object) 或者采用下面的方法也可 方法② 做完报销教程的朋友都知道报销教程里面的修改窗体有加了不能为"空"的代码, 但是实际操作过程中并没有弹出窗体进行提示, 请先退出AccDev.mdb数据库,进入AccDev_be.mdb数据库,到该表的设计状态 把需要改的字段必填项设为"否" 这时那边的代码就生效了 再清空里面的记录试试. 同样,做变速箱或者开发自己系统,要是有需要让修改窗体弹出不能为"空"窗口时,也可把后台表里面的该字段必填项设为"否". 经过我尝试,两种方法都可以成功,且两个方法一起用也没问题。方法一好理解增加一个或条件,用Len()判断字符串的字符个数为0.但我还是有两点疑问:

1. 方法一,为什么还保留IsNull的的条件,此处是字符串,没有公式,不会存在无效值得情况吧,所以用Len()就够了吧?

 2. 方法二,不太理解为什么将原来数据表里该字段的“必填”属性设为“否”,则在编辑子窗体里输空值就会提示错无。和常理有些反,不知其作用机理。

3. 在实现编辑窗口关闭后,在子窗体中自动定位到所编辑的记录位置的功能时。可否不声明新的变量“g_CurrentSelectStrID”,而直接用“selectstr”。则代码写为 Acchelp_FindstrRecord (selectstr) 经过自己试验,如此修改后,总是自动定位到第一条记录。按教程用新的公共变量来做就可以自动定位。不过观察到一个细节,就是定位还是首先定位到第一条,然后到计时器设定的时间间隔就会跳转到编辑的那条记录。到此我的猜测是,Access一定有一个默认设定,让子窗体成为当前窗口时,总是自动选定第一个记录。所以虽然在开始selectstr的值与g_CurrentSelectStrID是相等的,但随着子窗体成为当前,而又有一个自动定位首行的动作,随即触发了获得焦点引起的selectstr的重新赋值,所以此时的selectstr已经不记得之前的值了,不知我的猜测对否?

4. 报销明细,要先建立查询。不直接建窗体而是通过查询来抓取数据,应该会更好。但理解不具体。另一个疑问,在取字段时ygxm和bxlb是从tblcodeyg 和tblcodebxlb 里取的,为什么不直接从tblbxmx里取ygid 和lbid。当时建 tblbxmx时,我以为教程写错,ygid下写的是员工姓名,lbid下写的是报销名称。老师说是方便后面设计,现在我理解不深 经过与老师询问,发现问题4的答案正是问题5. 其原理就是用后面添加的“组合框”控件,并通过设置“列宽度”为,0,2来强制隐藏了第一列,即隐藏了ygid,然后系统自然就将正在显示的ygxm填进数据表tblbxmx的ygid字段下了。我给他取个外号就叫“移花接木”吧!

5. 新增BXMX_child_add 时,组合控件一个属性是“绑定列”教程设置为1,如果改为2好像没变化。此处好像是通过,改变列宽度来强制将员工姓名赋值给ygid的,我的理解对吗?我试验了一下,其他参数不变,将绑定列设置成0,1,2都可以得出员工姓名。但3不能显示任何结果。 另外,如果将列宽度改为“2cm,0cm”则返回的是ygid,在绑定列为0,1,2,时都这样,3无效。如果将列宽度改为“2cm,2cm”同时把列表宽度改为“4cm”则无论绑定列设置的0,1,2都是选中ygid而不是员工姓名。很奇怪,那绑定列这个参数不是没起作用? 根据老师提问,我基本搞清楚了。系统默认会选择第一列的数值填入原数据表中。但可以通过将第一列的宽度设为0来隐藏它,从而实现,强制将正在显示的第二列值填入原数据表内。这点我试验过,也很确定。老师说“绑定列”属性决定最终填入原数据表的是哪列数。不过我觉得此处好像不起作用,当我将列宽设为2,2,总宽设为4,绑定列设为1的时候,进行新增操作,发现新增的记录还是将人名显示出来。因为绑定列为1,所以应该将ygid显示在记录里才对呀。这点还是不懂。 经过两周的学习,我对平台有了形象的认识,其结构和功能是怎样的,现在基本也了解了一些。对于新人的建议是,绝对按照老师的安排来进行,这是很必要的。第一次制作按文字教程来做,不懂没关系,先照做。然后看视频,增加理解。F1是好老师,要经常用它查一些基本的概念,这样与老师沟通能很快将问题说清,理解透。第三遍尽量脱离教程,自己背下来做,出来部分代码拷贝一下。经过这样的联系,报销系统的课程任务基本就结束了。如果在一些细枝末节的问题上钻研太深,会耗费大量时间,后面都会一一解决的。相信老师!


Access软件网交流QQ群(群号:198465573)
 
 相关文章
《仓库收发货及库存作业管理系统》我的ACCESS+SQL serv...  【李振兴  2012/10/22】
《房地产合同管理系统》我在Accessoft的学习心得及开发的软件  【沙滩鱼  2013/1/19】
《协会项目收支系统》access实训学习心得  【吴婉  2013/2/6】
《金属制品销售管理系统》Access学习心得  【罗丽珍  2013/3/16】
《印刷公司生产\仓库\质检\财务综合数据库管理系统》Access开...  【李汉游  2013/5/2】
常见问答
技术分类
相关资源
文章搜索
关于作者

徐海军

文章分类

文章存档

友情链接