重构开始师傅要求先实现登录的一条主线,然后在根据这个逐渐的去填充。这一阶段遇到很多问题,这里做一下小的总结。
1、API函数获取用户名
获取用户名,是它在我们用户登录期间都可以调用,像我们VB版的一样还是用API函数来实现,在U层使用如下代码:
Public DeclareFunction GetUserName Lib "advapi32.dll" Alias"GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
'API函数获得用户名
2、视图避免用户异地登录
用户登录的时候我们要验证它是否在其他地方登录,这时候就是看我们自己建的表了,我的登录记录表和用户信息表是分开的,由于我们要是分着查看很麻烦,可以使用视图将两个表需要的信息连接起来很方便,视图代码如下:
create viewV_queryuser
as
selectUserNO,Level,Password,status from User1 join Worklog on user1.UserNO =Worklog.TeacherNO
这样我们就能用一个实体来返回两个表的信息了。
3、数据库表自动添加时间
我们用户登录的时候要在工作记录表中添加一条工作记录,虽然代码也能实现,但是我们可以使用一种更简单方便快速的方法,就是让数据库表自动添加时间,方法就是将表中记录时间的字段类型设置为date(或time)型,然后在“默认值或绑定”一栏添加函数getdate()即可。如下图所示:
注意:数据库默认time(7),获取时间日期,我们将其改为0就可以得到时间点了。


4、触发器修改下机时间
当用户退出时我们要在工作记录中添加下机记录,同样时间也可以让数据库自动填写,就是写一个触发器,触发条件是用户的状态变为false(在工作表中有布尔值类型的字段来表示用户的状态,正在工作为true),触发器如下:
create triggertri_worklog
on
worklog
after insert,update
as
declare @worklogidint
select @worklogid=(select id from inserted )
begin
if update(status)
update Worklog
set
OffTime=GETDATE(),OffDate =GETDATE ()
where ID =@worklogid
END
其中worklogid用来登录记录号,修改的时候触发器能知道要具体修改哪一条记录。
(缺点:登录的时候下机时间和日期也自动添加了,现在还没有解决,如果同志们有高见还请赐教~)
5、标识符重置
工作表我是用自动增长的id号来做标识符的,但是当删除掉记录再插入新的记录会发现自动增长值是延续之前的值,而不是从1开始的,这时候我们可以执行如下来解决,新建查询如下并执行:

一些小的问题就就这些,不当之处还要多多交流啊,其他方面还会陆续出版,大家敬请期待~~