如何从表单号直接更新数据库中的记录(Access 2007)

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集成我是新手

在完成作业时勾选作业的表格,显示呼叫代码

sar*_*arh 2

据我了解您的情况,您的表单是数据绑定的(您可以获取记录索引),因此 - 您的表单已经位于该记录上。如果您需要更新基础数据集的某些字段,您可以编写类似的内容

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)