检查表是否有字段如果没有创建一个,如果这样编辑它?

时间:2013-11-12 15:53:10

标签: vba ms-access access-vba

我正在尝试创建一个向表中添加数据的按钮。虽然我只想和一个领域合作。

我用这个atm:

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

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

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

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

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

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

-

这是按钮的完整代码,答案在additon下方

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

2 个答案:

答案 0 :(得分: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必须存在。

答案 1 :(得分: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。