如何在 Access 2007 中使用 Visual Basic 代码更新单元格

Posted

技术标签:

【中文标题】如何在 Access 2007 中使用 Visual Basic 代码更新单元格【英文标题】:How do I update a cell with Visual Basic Code in Access 2007 【发布时间】:2014-01-27 04:19:56 【问题描述】:

所以我的项目是根据会议开始日期计算各种项目的截止日期列表。我一直试图弄清楚如何使用 Access 2007(雇主软件)根据会议开始日期的变化来生成截止日期。

我的失败包括: 写冲突消息

ConferenceStartDate 是包含表单上的用户输入的列,以及我想要作为所有其他日期的基础的变量。我让表单使用“更新前”子例程进行更改。

Private Sub ConferenceStartDate_BeforeUpdate(Cancel As Integer)

  ' Concept is to enter Volume and Conference Date Start/End and have it calculate the rest of the dates
  ' Then compare to current date and create a report on over due, next due, etc
  ' Then create emails based on templates for next data

  Dim rstNameList As DAO.Recordset
  Set rstNameList = Application.CurrentDb.OpenRecordset("Table1", dbOpenDynaset)
  Dim startDate As Date
  Dim endDate As Date
  Dim recordNumber As Integer
  Dim stringRecordNumber As String
  Dim stringSQL As String

  ' *** Second Attempt
  ' Gives Write Conflict message.  Weird, if you say Update, moving to the next record does not update, but saying No Update actually updates the record.
  recordNumber = [ID]
  stringRecordNumber = "ID=" & CStr(recordNumber)

  ' Gets the start date of the conference
  startDate = [ConferenceStartDate]

 ' Add seven "d"ays tp startDate
 endDate = DateAdd("d", 7, startDate)


 ' rstNameList.FindFirst stringRecordNumber
 ' rstNameList.Edit
    'rstNameList!VolumeName = "MC-130"
 '     rstNameList!ConferenceStartDate = startDate
 '     rstNameList!ConferenceEndDate = endDate
 ' rstNameList.Update
 ' rstNameList.Close

 ' Gets rid of the Write Conflict error message
 ' Command doesnt work
 ' If Forms("Table1").Dirty Then Forms("Table1").Dirty = False

 ' *** First Attempt
 'Works to add
 'Set db = CurrentDb
 'Set rs = db.OpenRecordset("Table1")
 'rs.AddNew
  'rs("ID") = 5
  'rs("VolumeName") = "KC-130"
  'rs("ConferenceStartDate") = "1/1/1111"
  'rs("ConferenceEndDate") = "1/2/1212"
 'rs.Update
 'rs.Close

 ' *** Third Attempt
 ' Doesn't actually update
 ' stringSQL = "UPDATE Table1 SET [ConferenceEndDate] = #" & CStr(endDate) & "# WHERE " & stringRecordNumber

 ' DoCmd.RunSQL stringSQL

 End Sub

任何人都知道如何根据来自单个日期的表单的输入没有写入冲突消息和日期更新?

谢谢!

【问题讨论】:

【参考方案1】:

如果您的表单绑定到一个表,那么您不应该尝试使用 SQL 语句来更新表单中的当前记录。如您所见,这可能会导致写入冲突,因为两个“进程”试图同时更新同一条记录。

相反,您应该为要更新的字段创建绑定控件(如有必要,将其隐藏),然后更新这些控件的值。

【讨论】:

对于在bound controls 上寻求解释的任何人。我通过在 ConferenceStartDate 文本块的 BeforeUpdate 中添加以下代码找到了我需要的内容:me.ConferenceEndDate.Value = DateAdd ("d", 7, [ConferenceStartDate])

以上是关于如何在 Access 2007 中使用 Visual Basic 代码更新单元格的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Access 2007 中使用 Access 2003 mde 并保留我的自定义菜单/工具栏?

如何在 Access 2007 中使用 Visual Basic 代码更新单元格

如何在 C# 中使用 Access 2007 链接表管理器

如何在 MS Access 2007 中使用 concatRelated

如何在 MS Access 2007 中使用值填充组合框

如何在 Ms Access 2007 中使用 MySQL 视图,而不会出现字符串列的垃圾?