Access快速开发平台一日通案例《费用报销管理软件》学习心得
时 间:2018-10-24 08:37:36
作 者:周韶璋 ID:69789 城市:南宁
摘 要:Access快速开发平台一日通案例《费用报销管理软件》学习心得
正 文:
(2) 登录的全局变量,相当于ini文件,存放在一个表里:调取的几个常用函数有:
i) GetParameter(“current User UserName”) ,获得登录的用户名
ii) SetParameter
iii) DLookup(“[value]”,”SysLocalParameters”,“[ParameterName]=’startdate’”)
(3) 权限设置:在后台设置完成后,需要记得目录名和权限名,先用HasPermission(“目录名”,” 权限名”):
If HasPermission(“目录名”,” 权限名”) = true then
(4) 对于限制权限的用户,如何控制数据输出,即自已录入的数据可以看到,但是看不到别人录入的数据:
在Form load事件中, GetParameter(“current User UserName”) ,获得登录的用户名,赋值给StrUser变量【我经常打错成GetParametor】
If HasPermisson(“报销明细”,“查看全部”) = true then
strSQL = “select * from qryExpense”
else
strSQL = “select * from qryExpense where Operator=’ ” & StrUser & “’”
EndIF
再用me.recordSource = strSQL
(5) 控件锁定和控制不可用略有不同:前者是locked=true, 后者是enable=false,并变灰。
(6)主窗体(me)中,子窗体(以sfrList例)内控件的取用格式:
me.sfrList.form.控件名
(7)一个页面打开后,通常tab=0的控制自动获得焦点,为消除这种情况,建一个文本框,设tab=0,并调到最小,放在一个小显眼的地方(细节是决定一个软件好坏的标准之一)
(8)在快速开发平台里,可以在启动后的界面窗体,即:SysFrmMain_HomePage 窗体上放置按钮图片,从而方便操作员通过按钮来打开对应的窗体。那么,在单击事件中可以采用如下代码:
=DoMenuCmd("节点名称")
‘把下面的函数复制到代码过程中任何一个地方
Function DoMenuCmd(MenuText As String)
Dim MenuID As String
RunMenuCommand Nz(DLookup("Command", "SysLocalNavigationMenus", "MenuText=" & SQLText(MenuText))), Nothing
MenuID = Nz(DLookup("ID", "SysLocalNavigationMenus", "MenuText=" & SQLText(MenuText)))
With Forms!SysFrmMain
RunDefaultRDPNavMenu MenuID
!lblNodePath.Caption = .mclsNavTree.GetNodeFullPath(MenuID, " > ")
!lblNodePath.Visible = True
If !sfrChild.Top <> !lblNodePath.Top + !lblNodePath.Height Then
!sfrChild.Height = !sfrChild.Height - !lblNodePath.Height
!sfrChild.Top = !lblNodePath.Top + !lblNodePath.Height
End If
End With
End Function
(9)提醒功能的制作
把下面的函数复制到代码过程中任何一个地方,注意修改label的名称,表的名称
Public Sub CalRemind()
Dim x As Long '待审核
Dim y As Long '待财务确认
x = DCount("[ID]", "tblExpense", "[Examine]=0")
y = DCount("[ID]", "tblExpense", "[Accounting]=0")
If x + y = 0 Then
Form_SysFrmMain_HomePage!lblRemind.Caption = "( 暂无提醒 )"
Else
If x > 0 And y = 0 Then
Form_SysFrmMain_HomePage!lblRemind.Caption = vbNewLine + "待主管审核的明细 (" & x & ") 笔"
End If
If x > 0 And y > 0 Then
Form_SysFrmMain_HomePage!lblRemind.Caption = vbNewLine + "1.待主管审核的明细 (" & x & ") 笔" + vbNewLine + "2.待财务确认的明细 (" & y & ") 笔"
End If
If x = 0 And y > 0 Then
Form_SysFrmMain_HomePage!lblRemind.Caption = vbNewLine + "待财务确认的明细 (" & y & ") 笔"
End If
End If
End Sub
(10) 关于组合框显示的理解:
这个表之所以有员工编码的字段,是把另一个表的主键当成外键进行联系,如果显示员工姓名,就不合理。
这个员工编码的组合框中,它的数据源来自SELECT tblEmployee.EID, tblEmployee.EName, tblDepartment.DName FROM tblEmployee INNER JOIN tblDepartment ON tblEmployee.DID = tblDepartment.DID;
采用0; 2; 2的方式进行显示,即显示的姓名,部门,但是记录的EID,即绑定的值。
另外,我们还可以对这个值,进行进一步的指定:即采用DLookup()查一个值,然后让它显示
Me.EID = DLookup("[EID]", "tblEmployee", "[Username]='" & strUser & "'"),显示的值,必须是在0; 2; 2的方式进行显示出来的值中之一,否则不显示。
(11)知道了null和””的区别:
"" 是已知的长度为0的字符串;
Null 是无效数据,不知道有没有数据。
(12)月平均、本月、年累计
本年第一天:DateSerial(Year(date( )),1,1)
上月末 :DateSerial(Year(Date()),month(date()),0)
本月第一天:DateSerial(Year(Date()),month(Date()),1)
本月末:DateSerial(Year(Date()),Month(Date())+1,0)
(13) SQL代码分行:
StrSQL=”aaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbb”
可以分为:
StrSQL=”aaaaaaaaaaaaaaaaaaaaaaaaa “ _
& “bbbbbbbbbbbbbbb”
(14) 采用VBA代码执行追加查询,在执行前,要取消系统警告
Docmd.setwarning false
Docmd.runsql “delect * from tblXXX” //在追加之前先清空
Docmd.runsql strsql
(15)在tblcount费用统计表中,字段分别为Item, moneyAve, thismonth, monthyear, 没有设主键,也没有设一个自动递增的ID。
没有设主键,可能是这个是终末表,不需要在别的表中设其为外键。
没有设自动递增的ID,可能会要按其它字段进行排序时,这样的ID顺序也会乱,所以在窗体中,自已加入了不受按字段排序影响的序号。加入序号见下。
(16)加入序号的代码:
先插入一个Label,在数据的控件来源处写上 =GetLineNumber([Form]) //注:表名不用改
(17)关闭按钮的代码
RDPCloseForm me
(18)为什么在员工信息的窗体中,数据源不直接采用tblEmployee,而是采用qryEmployee,是不是考虑到“DID”部门字段中,如果用tblEmployee作数据源,那么显示的DID将是组合框,不美观,而且也容易被更改。
(19)
对于这样的表格,通过设立两个主键,再设一列为SN进行排序。
如果别的表想用这个表,那么两个主键都要查询。
(21) Month(Date()),得到的月份,可以直接用来计算,不用转为数字。
(22)查询中,可以对字段进行取值、计算、表达式等等,然后再汇总。
(23)有一个组合框,值为姓名,如果选择某个姓名,就显示某人的数据,如果不选择,就显示所有人的数据,这怎么做?
采用联合查询:如
Select ‘E00’as EID, ‘所有人’as 姓名,’(全公司)’as 部门 from tblExpenseCount
Union select EID,Ename,DName
From qryEmpID
Private sub frame3_AfterUpdate()
Select case Frame3
Case 1
Me.graphmoth.object.charttype= x1LineMarkers
Case 2
Me.graphmonth.object.chartType=x1ColumnClustered
End select
http://www.accessoft.com/article-show.asp?id=1082
Access软件网QQ交流群 (群号:54525238) Access源码网店
常见问答:
技术分类:
源码示例
- 【源码QQ群号19834647...(12.17)
- Access对子窗体数据进行批...(10.30)
- 最精简的组合框行来源数据快速输...(10.25)
- Access仿平台的多值选择器...(10.24)
- 【Access日期区间段查询】...(10.22)
- 【Access源码示例】VBA...(10.12)
- Access累乘示例,Acce...(10.09)
- 数值8.88,把整数8去掉,转...(10.08)
- 【Access自定义函数】一个...(09.30)
- 【Access选项卡示例】Ac...(09.09)
学习心得
最新文章
- Access系统自带的日期选择器不...(11.08)
- 分享一下Access工程中的acw...(11.07)
- Access快速开发平台--让有权...(11.04)
- Access快速开发平台--审批选...(11.01)
- ACCESS两张表先各自排序,然后...(10.31)
- Access对子窗体数据进行批量+...(10.30)
- SqlServer中如何用SQL命...(10.29)
- Access报表中的分组功能用代码...(10.28)
- 用Access计算库存结余的一个方...(10.26)
- 最精简的组合框行来源数据快速输入(...(10.25)