Sta*_*Off 5 ms-access access-vba
我有一个工作跟踪系统,并且有一个查询返回所有过期作业的结果.我有一个表单,逐个显示这些作业,并有两个按钮(作业已完成,作业未完成).未完成只显示下一条记录.如果按下"已完成"按钮,我找不到访问当前记录以更新其内容的方法,我能得到的最接近的是表示表单中记录位置的长数字.
获取表单中记录索引的VBA如下所示.
Sub Jobcompleted(frm As Form)
Dim curr_rec_num As Long
curr_rec_num = frm.CurrentRecord
End Sub
Run Code Online (Sandbox Code Playgroud)
这是我在VBA的第一次拍摄,经过一个小时的搜索后,我找不到任何解决问题的方法.我是以完全错误的方式来做这件事的吗?在Microsoft Access 2007中工作
更多信息所有表都已标准化
车辆表:包含vehicle_id(pk),以及rego和model等
作业表:包含job_id(pk),vehicle_id(fk)以及有关需要发生的事情的其他信息,以及下一个出现日期,每次出现作业之间的天数(所有作业重复)和其他信息
作业历史记录表:包含job_history_id(pk),job_id(fk),完成日期和注释
当按下作业完成按钮时,它应该在作业历史记录表中创建一个新条目,其中包含当前日期,任何注释和作业ID
这是我试图开始工作的脚本
Private Sub Command29_Click()
Dim strSQL1 As String
Dim strSQL2 As String
Set Rs = CurrentRs
Set db = CurrentDb
strSQL1 = "INSERT INTO completed_jobs(JOB_ID, DATE_COMPLETED, COMMENTS) VALUES " & Rs!job.ID & ", " & Date
db.Execute strSQL1, dbFailOnError
strSQL2 = "UPDATE job SET JOB_NEXT_OCCURANCE = JOB_NEXT_OCCURANCE+JOB_RECURRANCE_RATE WHERE job.ID = Rs!job.ID"
db.Execute strSQL2, dbFailOnError
End Sub
Run Code Online (Sandbox Code Playgroud)
注意:行Set Rs = CurrentRs完全不正确,我相信这是我需要弄清楚的吗?这是按下按钮调用的
我发布的图像显示了表格(非连续).
@HansUp,我得到了你的意思,但我认为它不适用(我没有提供足够的信息,第一次让你理解我认为)
@sarh我相信你所说的Recordset是我需要的,但我无法弄清楚如何使用它,任何提示?
@Matt我90%肯定我正在使用绑定表单(就像我说的,对Access的新手,一直在看人们建议和学习的所有内容).当然有一个工作ID(只是没有显示,不需要显示),但我如何访问它来执行它的操作?我能做的SQL,与Access/VBA集成我是新手

据我了解您的情况,您的表单是数据绑定的(您可以获取记录索引),因此 - 您的表单已经位于该记录上。如果您需要更新基础数据集的某些字段,您可以编写类似的内容
Me!SomeField = ...
DoCmd.RunCommand acCmdSaveRecord
Run Code Online (Sandbox Code Playgroud)
如果您的表单将控件绑定到“SomeField”,则表单将自动更新。
如果这没有帮助,您可以考虑其他几个方向:
1)使用SQL代码更新记录。例如,您有应在表单数据集中更新的记录 ID,因此您可以编写如下内容:
Call CurrentDB.Execute( _
"UPDATE SomeTable SET SomeField = SomeValue WHERE SomeTableID = " & Me!SomeTableID, dbSeeChanges)
Run Code Online (Sandbox Code Playgroud)
2)你可以看看Bookmark属性——Recordset和Form都有这个属性,它描述了记录的位置。所以你可以写这样的东西(不是最好的例子,但可以帮助你得到一个想法):
Dim Rs as Recordset
Set Rs = Me.RecordsetClone 'make a reference copy of the form recordset
Rs.Bookmark = Me.Bookmark 'locate this recordset to the form current record
Run Code Online (Sandbox Code Playgroud)