我有一个VB.NET WinForms项目,该项目允许员工登录并注册其超时,超时和食物中断,并通过Visual Studio设计器制作的数据集将其连接到SQL Server数据库(这意味着所有数据库连接被自动处理,我没有“硬编码”,因此不需要。)数据库有两个表,_tblUser for Users和_tblTime,用于存储帮助的表,都有一个主键(Id)并通过一个链接。
在用户界面中,有3个按钮:超时,超时,进餐时间
单击每个按钮都应更新数据库。还有一个数据网格,仅显示当前登录员工的记录
第一个是Time-In,可以在查询生成器中使用此查询
INSERT INTO _tblTime ([ID EMPLOYEE], EMPLOYEE, DATE, TIMEIN)
VALUES (@ID_EMPLOYEE,@EMPLOYEE,@DATE,@TIMEIN)
然后在代码上我传递值
Private Sub _B3_TimeIn_Click(sender As Object, e As EventArgs) Handles _B3_TimeIn.Click
_tblTimeTableAdapter.InsertTimeIn(currentID, currentName, currentDate, currentTime)
End Sub
currentID和currentName是已存储员工当前登录信息的变量currentDate和currentTime存储系统的日期和时间
但是对于其他两个按钮,我需要它来更新当前登录的用户插入的最后一行,这就是Im停留的地方。首先,我尝试使用以下命令选择最后添加的行:
UPDATE _tblTime SET FOODBREAK = @FOODBREAK WHERE (Id = (SELECT MAX(Id) FROM _tblTime))
这可行,但显然对于多用户方案来说是个大问题,例如,假设User1登录,单击Time-In,它会添加一个具有Max Id的新行,然后注销并开始工作。然后,User2登录,单击Time-In,它会添加一个新行,该行现在具有当前的最大ID,然后注销并开始工作。当User1再次登录以注册其FOODBREAK时,使用上述查询显然会将时间注册到具有现在属于User2的Max Id的行。这就是我要尝试的操作,以专门更新当前登录用户的最后一行,而我不知道该怎么做。
我也试过
UPDATE _tblTime SET FOODBREAK = @FOODBREAK WHERE Id = @Param1
然后,我传递员工ID(这是我的链接密钥):
Private Sub _PB6_Comida_Click(sender As Object, e As EventArgs) Handles _PB6_Comida.Click
_tblTimeTableAdapter.UpdateComida1(currentTime, currentID)
这种工作,但它更新了员工的第一笔记录,而不是我需要的最新记录
您在这里有多个选择。
通过过滤以下内容来修正您使用的方法Employee
:
UPDATE _tblTime SET
FOODBREAK = @FOODBREAK
WHERE Id = (SELECT MAX(Id) FROM _tblTime WHERE [ID EMPLOYEE] = @EMPLOYEE);
或改进过滤条件,说出它唯一的记录没有Foodbreak
'TimeIn'或唯一的记录没有'TimeIn',对于该员工,您可以按此进行过滤。
UPDATE _tblTime SET
FOODBREAK = @FOODBREAK
WHERE [ID EMPLOYEE] = @EMPLOYEE AND FOODBREAK IS NULL;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句