1

我正在尝试制作一个将数据添加到表格的按钮。虽然我只想在一个领域工作。

我用这个自动取款机:

rec.AddNew
rec("WorkOrder") = Me.ProjectAddWorkOrderTxt
rec.Update

使用 3 个不同的按钮更改该字段中的 3 个其他列。每次我按下按钮将信息添加到表中时,它都会在正确的列下创建一个包含数据的新字段。为什么很明显,因为rec.AddNew。它创建了一个新字段。

有没有办法检查表中是否有一个字段,如果有,它只是编辑那个字段,如果没有,它会创建一个新字段?

有一个主窗体,上面有 5 个按钮;弹出5种不同的形式。这些表单有 1 个文本框和 1 个按钮。这些表格都没有绑定到任何记录源。

我想要的是让您能够在文本框中输入数据,并在您按下 1 按钮时将该数据添加到临时表单中。同时,它关闭了表格,再次显示了主要表格。

然后,当我按下主窗体上的另一个按钮时,它会获取当前在 temptable 上的所有信息,并将其放入 maintable。然后它会删除 temptable 上的所有数据。

--

这是按钮的完整代码,答案如下

Private Sub ProjectWorkOrderBackBtn_Click()

Dim db As Database
Dim rec As DAO.Recordset

Set db = CurrentDb
Set rec = db.OpenRecordset("Select * from ProjectsTempT")

rec.FindFirst "WorkOrder='" & Me.ProjectAddWorkOrderTxt.Value & "'"

If (rec.NoMatch) Then
  rec.AddNew
Else
  rec.Edit
End If

rec("WorkOrder").Value = Me.ProjectAddWorkOrderTxt.Value
rec.Update

Set rec = Nothing
Set db = Nothing
Me.ProjectAddWorkOrderTxt = Null
DoCmd.Close
End Sub
4

2 回答 2

1

请测试它是否有效?

Private Sub ProjectWorkOrderBackBtn_Click()

  Dim db As Database
  Dim rec As DAO.Recordset

  Set db = CurrentDb
  Set rec = db.OpenRecordset("ProjectsTempT", dbOpenDynaset, dbSeeChanges)

  'On Error Resume Next

  '
  'rec.FindFirst "WorkOrder='" & Me.ProjectAddWorkOrderTxt.Value & "'"
  '

  If (rec.EOF) Then
    rec.AddNew
  Else
    rec.Edit
  End If

  rec("WorkOrder").Value = Me.ProjectAddWorkOrderTxt.Value
  rec.Update

  Set rec = Nothing
  Set db = Nothing

  'On Error Goto 0

  '
  'Me.ProjectAddWorkOrderTxt = Null
  'DoCmd.Close
  '
End Sub

表 ProjectsTempT 必须存在。

于 2013-11-12T16:04:38.233 回答
1

您也可以稍微削减代码,这也会增加您的响应时间。

Private Sub ProjectWorkOrderBackBtn_Click()

Dim db As Database
Dim rec As DAO.Recordset

Set db = CurrentDb
Set rec = db.OpenRecordset("Select * from ProjectsTempT WHERE WorkOrder='" & Me.ProjectAddWorkOrderTxt.Value & "'")

If rec.EOF = "True" Then
  rec.AddNew
Else
  rec.Edit
End If

rec("WorkOrder").Value = Me.ProjectAddWorkOrderTxt.Value
rec.Update

Set rec = Nothing
Set db = Nothing
Me.ProjectAddWorkOrderTxt = Null
DoCmd.Close
End Sub

请记住,Access 是客户端,这意味着它会在执行功能之前将整个数据集拉到您的本地计算机上。减少该数据集的大小将加快该过程,因此只需引入您需要的记录,而不是拉出整个表并执行 FindFirst。

于 2013-11-12T17:03:29.693 回答