|
本帖最后由 todaynew 于 2010-1-6 16:48 编辑
ishi2100 同志发了一个瓶颈很多的实例,让人联想起武汉的精武鸭脖子来。武汉号称九省通衢,兼容并蓄的能力很强,自我创新的能力极弱。因此武汉一直很难找到几个名牌。
不过这三五年来,武汉人终于有了能拿得出手的礼物了,但凡迎来送往之间,必少不了精武鸭脖子,呵呵。因此当看到ishi2100 同志的瓶颈,眼前便浮现出那一段段美味的鸭脖子了。
梦醒时分,精武鸭脖子还是精武鸭脖子,ishi2100 同志的瓶颈还是ishi2100 同志的瓶颈。于是乎便吞咽口水,擦干哈喇子,一咬牙一跺脚,便也就帮助ishi2100 同志解决瓶颈问题了。
----------------------------------------------------------------------------
1.用户注册:检验用户名;注册(并将信息导入表“用户密码表”);重写(已输入的东西删除);用户名限制为字母和数字(6-12)
答案:
(1)在用户注册窗体上的Text1控件后加一个名为“校验”的标签控件
(2)在用户注册窗体的加载事件中写如下代码:
Private Sub Form_Load()
Me.校验.Caption = ""
Me.Text1.InputMask = "aaaaaaaaaaaa"
End Sub
(3)在Text1控件的更新后事件中写如下代码:
Private Sub Text1_AfterUpdate()
If Nz(DLookup("用户名", "用户密码表", "用户名='" & Me.Text1.Value & "'"), "") = "" Then
Me.校验.Caption = "可用"
Else
Me.校验.Caption = "用户名已存在"
Me.Text1.Value = Null
End If
End Sub
2.一开始登录的那个界面,允许“用户注册”窗体显示(点击“新用户注册”按钮)
答案:在“用户注册”窗体设计视图中选窗体属性---其他---弹出方式,将“否”改为“是”。
3.查询:输入内容后在指定的表(者之书在人物表,术之书在忍术表)内查询,显示对应的窗体(人物、忍术),管理员查询显示(人物1、忍术1)
答案:
(1)将姓名和名次控件分别用组合框控件。将窗体中的组合框均按汉字命名。
(2)在查询窗体的加载事件中写如下代码:
Private Sub Form_Load()
Dim str As String
str = "SELECT 人物.姓名 FROM 人物;"
Me.姓名.RowSourceType = "Table/Query"
Me.姓名.RowSource = str
str = "SELECT 人物.级别 FROM 人物 GROUP BY 人物.级别;"
Me.级别1.RowSourceType = "Table/Query"
Me.级别1.RowSource = str
str = "SELECT 人物.现所属 FROM 人物 GROUP BY 人物.现所属;"
Me.所属.RowSourceType = "Table/Query"
Me.所属.RowSource = str
str = "SELECT 忍术.名称 FROM 忍术;"
Me.名称.RowSourceType = "Table/Query"
Me.名称.RowSource = str
str = "SELECT 忍术.类别 FROM 忍术 GROUP BY 忍术.类别;"
Me.类别.RowSourceType = "Table/Query"
Me.类别.RowSource = str
str = "SELECT 忍术.级别 FROM 忍术 GROUP BY 忍术.级别;"
Me.级别2.RowSourceType = "Table/Query"
Me.级别2.RowSource = str
End Sub
(3)在各组合框的更新后事件中分别写如下代码:
Private Sub 姓名_AfterUpdate()
Me.级别1.Value = DLookup("级别", "人物", "姓名='" & Me.姓名.Value & "'")
Me.所属.Value = DLookup("现所属", "人物", "姓名='" & Me.姓名.Value & "'")
DoCmd.OpenForm "人物"
Forms("人物").Form.Filter = "姓名='" & Me.姓名.Value & "'"
Forms("人物").Form.FilterOn = True
End Sub
Private Sub 级别1_AfterUpdate()
DoCmd.OpenForm "人物"
Forms("人物").Form.Filter = "级别='" & Me.级别1.Value & "'"
Forms("人物").Form.FilterOn = True
End Sub
Private Sub 所属_AfterUpdate()
DoCmd.OpenForm "人物"
Forms("人物").Form.Filter = "现所属='" & Me.所属.Value & "'"
Forms("人物").Form.FilterOn = True
End Sub
Private Sub 名称_AfterUpdate()
Me.类别.Value = DLookup("类别", "忍术", "名称='" & Me.名称.Value & "'")
Me.级别2.Value = DLookup("级别", "忍术", "名称='" & Me.名称.Value & "'")
DoCmd.OpenForm "忍术"
Forms("忍术").Form.Filter = "名称='" & Me.名称.Value & "'"
Forms("忍术").Form.FilterOn = True
End Sub
Private Sub 类别_AfterUpdate()
DoCmd.OpenForm "忍术"
Forms("忍术").Form.Filter = "类别='" & Me.类别.Value & "'"
Forms("忍术").Form.FilterOn = True
End Sub
Private Sub 级别2_AfterUpdate()
DoCmd.OpenForm "忍术"
Forms("忍术").Form.Filter = "级别='" & Me.级别2.Value & "'"
Forms("忍术").Form.FilterOn = True
End Sub
4.修改:管理员拥有修改的权利,用户没有。
答案:
(1)新建一个模块。在该模块中写如下代码:
Public 类别 As String
(2)在登录窗体的确定按钮中加一句代码:
类别 = DLookup("类别", "用户密码表", "用户名='" & Me.Combo用户名.Value & "'")
(3)在需要区别管理员与用户权限的窗体加载事件中加如下代码:
Private Sub Form_Load()
If 类别 = "管理员" Then
Me.Form.AllowAdditions = True
Me.Form.AllowDeletions = True
Me.Form.AllowEdits = True
Else
Me.Form.AllowAdditions = False
Me.Form.AllowDeletions = False
Me.Form.AllowEdits = False
End If
End Sub
5.报表:显示用户及其登录时间、离开时间
答案:
(1)在浏览登记中增加一个名为ID的字段,并将该字段设为主键。
(2)在登录窗体的确定按钮中增加如下代码:
Dim strsql As String
DoCmd.SetWarnings False
strsql = "INSERT INTO 浏览登记 ( 用户名, 类别, 登陆时间 ) "
strsql = strsql & "VALUES ('" & Me.Combo用户名.Value & "','"
strsql = strsql & DLookup("类别", "用户密码表", "用户名='" & Me.Combo用户名.Value & "'") & "',#" & Now() & "#)"
DoCmd.RunSQL strsql
(3)在退出系统的窗体(具体是哪个窗体自己确定)关闭事件中写如下代码:
Dim strsql As String
DoCmd.SetWarnings False
strsql = "UPDATE 浏览登记 SET 浏览登记.离开时间 = #" & Now() & "#"
strsql = strsql & " WHERE ID=" & DMax("ID", "浏览登记", "用户名='" & Me.Combo用户名.Value & "'")
DoCmd.RunSQL strsql
6.密码修改,确定后信息导入“用户密码表”
答案:没看见有修改密码的地方。修改密码的写入就是更新查询而已,可以参见离开时间的处理方法。
7.若可以,用户的注册时间也有
答案:可在用户密码表中增加注册时间字段
|
评分
-
查看全部评分
|