Access开发培训
网站公告
·Access专家课堂QQ群号:151711184    ·Access快速开发平台下载地址及教程    ·欢迎加入Access专家课堂微信群!    ·如何快速搜索本站文章|示例|资料    
您的位置: 首页 > 技术文章 > 程序人生

报销教程的学习总结

时 间:2013-02-23 08:57:20
作 者:freedom   ID:29495  城市:台州
摘 要:报销教程的学习总结
正 文:

    我是一名发型设计师,文化程度低,后来在经营管理中,学会了办公软件,碰到问题都在网上请教找答案,通过自学,学会了很多知识,但在分店开得越来越多的时候,就碰到了很多事,要通过很多的报表来实现,市面上的软件功能又都不是我们自己在管理上所要用的,前些天偶尔在网上看到Aaccess 软件网这个平台,看了网站介绍,有种眼前一亮的感觉,豪不犹豫地就报了高级班,收到资料时,就赶紧学习,学到报销教程时,第一遍按教材一步一步来,基本上比较顺,碰到几个小问题,在老师们的帮助下都迎刃而解,再做第二遍的时候有点粗心,都很快去做,然后就出现很多的问题,这时候首先自己去处理,处理不好后请教老师,看到老师们的解决方法,自己也就学到了,出现问题的原因所在,从而把对代码有了一些理解,经过这一期的报销学习,学到了建表、建立基本窗体、新增窗体、修改窗体、查询和打印、权限的设定、权限组及员工的设定等相关操作方法。

备注:简单步骤如下:
1新建表:打开表设计,要写上字段名称、数据类型,在常规窗口下配置字段大小、标题名称、是否必填、设定一个是主键、保存后在属性上做备注。
2链接后台数据库:选择外部数据源,按后台数据库文件的路径去找到想要连接表。
3检查控件引用和引用的顺序,在选项里修改显示隐藏属性
4修改导航菜单为自己想要的菜单名称
5基础窗体的制作:
第一种方法:新建窗体设计视图,在窗体属性记录源、右边三小点的按钮点开想要创建表的所有字段*,使其生成代码:SELECT  tblCodeyg.*  FROM   tblCodeyg;
再将添加字段里的字段拖到窗体上,修改好文本框标签名字,在格式里默认视图里选择为数据表。另存为一个文件名。后面要加子窗体的名字child。这样可以在系统管理里的对象类型上的子窗体里显示。注:如想在窗体里打开的,文件名就不用加。
第二种方法:选中想要创建的表名,再创建其他窗体里的数据表,这样可直接创建。再修改相关属性,
6新增窗体的制作:先把原来的子窗体记录集类型改为快照,新建窗体设计视图,新建一个文本框,修改标签名字,属性栏修改名称为英文的,输入法开启,再另存为一个名称,要在原来的子窗体的文件名后面加add,文件名的属性里备注。设置窗体属性标题名称,记录选定器和浏览按钮改成无。窗体加上页眉和页脚,加上确定和关闭按钮的控件。设置窗体版面格式颜色等进行美化。边框样式选对话框,自动调整改为否,弹出方式和模式选为是,滚动条去掉,然后写上
确定的单击事件代码:
Private Sub cmdOK_Click()
cmd_Save
End Sub 
同理,对取消按钮编写代码如下:
Private Sub cmdCancel_Click()
DoCmd.Close acForm, Me.Name
End Sub
再写上保存的代码:
Private Sub cmd_Save()
Dim rst As DAO.Recordset
If IsNull(Me.ygxm) Then
        MsgBox "请输入员工姓名!", vbCritical, "提示:"
        Me.ygxm.SetFocus
        Exit Sub
End If
Me.Refresh
If Acchelp_StrDataIsExist("tblCodeyg", "ygxm", Me.ygxm) = True Then
        MsgBox "你输入的数据已经存在,请重新输入", vbCritical, "警告"
        Me.ygxm.SetFocus
        Exit Sub
End If
If MsgBox("您确认要保存吗?", vbOKCancel + vbInformation, "提示") = vbOK Then
Set rst = CurrentDb.OpenRecordset("tblCodeyg", dbOpenDynaset)
rst.AddNew
rst("ygId") = acchelp_autoid("Y", 2, "tblCodeyg", "ygId")
rst("ygxm") = Me.ygxm
rst.Update
rst.Close
Set rst = Nothing
'刷新数据
If IsLoaded("usysfrmMain") Then
            DoCmd.Echo False
            Forms!usysfrmMain!frmChild.SourceObject = "frmyg_child"
            DoCmd.Echo True
End If
        MsgBox "保存成功!", vbInformation, "提示"
        Me.ygxm = Null
End If
End Sub
解释:就是把联系人保存到表里去,员工姓名是指文本框里的员工姓名:isnull是指为空。If IsNull(Me.ygxm) Then(如果当前的姓名为空,则)
        MsgBox "请输入员工姓名!", vbCritical, "提示:"(提示框出来)
        Me.ygxm.SetFocus(如果输入,则把焦点放在ygxm这里)
        Exit Sub(退出子程序)
If Acchelp_StrDataIsExist("tblCodeyg", "ygxm", Me.ygxm) = True Then(如果在表tblcodeyt的ygxm列里有当前的ygxm字段,则)
        MsgBox "你输入的数据已经存在,请重新输入", vbCritical, "警告"(提示数据存在的)
        Me.ygxm.SetFocus(如果输入,则把焦点放在ygxm这里)
        Exit Sub(退出子程序)
End If(结束判断)
这一句是判断语句,功能: Acchelp_StrDataIsExist 函数可用于判断某表中某个文本型字段是否存在某个值。
语法: Acchelp_StrDataIsExist(" 表名称 "," 字段名称 "," 文本值 ") ,如果返回值为 True, 则表示该表该字段中存在这个文本值,如果返回值为 False, 则表示不存在。
如果以上输入的值都可以的话,则进到保存:
If MsgBox("您确认要保存吗?", vbOKCancel + vbInformation, "提示") = vbOK Then
Set rst = CurrentDb.OpenRecordset("tblCodeyg", dbOpenDynaset)(这一句是DAO的代码,打开一个记录器,打开tblcodeyg的表,
rst.AddNew(新增)
rst("ygId") = acchelp_autoid("Y", 2, "tblCodeyg", "ygId")(让ygid等于一个代码:用函数来表示,是自增序号函数,表示前缀是Y,取两位数,在表tblcodeyg 的ygid列)
rst("ygxm") = Me.ygxm  (让ygxm等于当前窗口的ygxm)
rst.Update  (更新它)
rst.Close   (关闭它)
Set rst = Nothing


'刷新数据
If IsLoaded("usysfrmMain") Then   (如果主窗体usysfrmmain已经加载,则)
            DoCmd.Echo False   (禁止屏晃动)
            Forms!usysfrmMain!frmChild.SourceObject = "frmyg_child"
(让主窗体usysfrmmain的子窗体frmchild.等于当前的frmyg_child)
            DoCmd.Echo True   (让它显示)
End If
        MsgBox "保存成功!", vbInformation, "提示"  提示保存成功)
        Me.ygxm = Null(清除当前的ygxm)

代码写好后同样在系统管理里设置属性显示和权限。
第二种方法:创建其他窗体的模式对话框,添加页眉页脚,添加文本框,修改标签,文本框属性名称,窗体属性修改标题,保存文件名,同样写代码。
7修改窗体的制作:窗体制作如新增窗体,命名规则是子窗体后加edit,窗体制作同新增,属性标题名,格式修改,
保存后再创建一个新模块:
’文本型变量
Public selectstr As String
(全局变量定义为文本型)
再在子窗体ygid属性里选获得焦点事件,写代码:
On Error GoTo Err_ygId_GotFocus:
selectstr = Me.ygId
Forms!usysfrmMain!labFind.Tag = 1
Forms!usysfrmMain!btnEdit.Tag = 999
Exit_ygId_GotFocus:
Exit Sub
Err_ygId_GotFocus:
Resume Exit_ygId_GotFocus
要知道在子窗体里选择的哪一个人,所以要在子窗体获得焦点里写上以上代码,当获得焦点的时候,全局变量=ygid, Forms!usysfrmMain!btnEdit.Tag = 999当点修改按钮的时候,打开子窗体,
子窗体成为当前选项:=selectrecord()
修改窗体加载事件:写上代码:
Me.RecordSource = "SELECT * FROM tblCodeyg WHERE ygId = '" & selectstr & "'"
‘意思是:当前的窗体记录源=选择的表中的ygid=当前的全局变量。
在员工姓名属性的控件来源里修改名称,不允许修改,
系统管理中再设置权限。
再设置确定,退出的代码,
保存代码:

Private Sub cmdOK_Click()
    If IsNull(Me.ygxm) Then
        MsgBox "请输入员工姓名!", vbCritical, "提示:"
        Me.ygxm.SetFocus
        Exit Sub
    End If
    Me.Refresh
    DoCmd.Echo False
    Forms!usysfrmMain!frmChild.SourceObject = "frmyg_child"
    DoCmd.Echo True
    '触发子窗体计时器事件
    Forms!usysfrmMain!frmChild.Form.TimerInterval = 300

    DoCmd.Close acForm, Me.Name
End Sub
 
Private Sub Form_Load()
Me.RecordSource = "SELECT * FROM tblCodeyg WHERE ygId = '" & selectstr & "'"
g_CurrentSelectStrID = selectstr ‘(修改完后光标停在当前)

End Sub
删除按钮的代码:
Public Sub btnDel()
If MsgBox("您确认要删除吗?", vbYesNo + vbInformation, Forms!usysfrmLogin.Caption) = vbYes Then
  DoCmd.Echo False
  Call AccHelp_DeleteFldstrRow ("tblCodeyg", "ygId", selectstr)
  Forms!usysfrmMain!frmChild.SourceObject = "frmyg_child"
  DoCmd.Echo True
End If
End Sub
8查询表的建立:新建查询表,添加进表名,选字段名。

再选中创建的数据表,新建数据表子窗体。在窗体代码中写:
Public Sub btnFind()
        DoCmd.OpenForm "usysfrmFind"
Forms!usysfrmFind!cobfldName.RowSourceType = "值列表"
            '文本型对应 3 ,日期型对应 1 ,数值型对于 2
        Forms!usysfrmFind!cobfldName.RowSource = "报销日期;1;类别名称;3;员工姓名;3;报销金额;2;报销摘要;3;"
            '指定查询数据来源
        Forms!usysfrmFind!labDataSource.Caption = "qryBxmx"
    End Sub
    Public Sub FindEnd()
        Forms!usysfrmMain!frmChild.Form.RecordSource = Acchelp_ChildFormRecordSource("qryBxmx", "报销编号", True)
    End Sub  
9报表的制作:新建报表向导,找到想要查询表的窗体,添加想要查询表的字段名,分组,操作提示完成。添加代码:
Public Sub btnprint()
DoCmd.OpenReport "rptBxmx", acViewPreview
End Sub
全局变量里再定义:
'在模块中声明报表数据源的全局变量
Public strRptReSource As String
修改以下代码
Public Sub FindEnd()
Forms!usysfrmMain!frmChild.Form.RecordSource = Acchelp_ChildFormRecordSource("qryBxmx"," 报销编号 ", True)
    '记录下来报表的数据来源
strRptReSource = Forms!usysfrmMain!frmChild.Form.RecordSource
End Sub
在报表窗体的打开事项中:
 '赋上查找后的报表数据源
    If strRptReSource = "" Then
        Me.RecordSource = Forms!usysfrmMain!frmChild.Form.RecordSource
    Else
        Me.RecordSource = strRptReSource
End If

 

    经过春节期间的突击学习,收获颇丰,今天开始学习下一部分教程了,特别期待,赶紧写完学习报告等老师发教程,开始继续奋斗,希望早日学会早点开发出自己满意的数据库软件!



Access软件网官方交流QQ群 (群号:483923997)       Access源码网店

常见问答:

技术分类:

相关资源:

专栏作家

关于我们 | 服务条款 | 在线投稿 | 友情链接 | 网站统计 | 网站帮助