1

我有一个使用链接表到 MySQL 数据库的 MS Access (2016) 数据库。在访问数据库中,我有一个用于数据输入的表单。当我单击“重新计算”按钮时,我需要(手动)重新计算某些字段。

我遇到的问题是,当我运行 VBA 代码以更新表单上的字段时,如果我尝试导航到另一条记录,则会收到错误消息“自从您开始编辑此记录以来,该记录已被另一个用户更改...... 。”

我是唯一访问此数据库的用户。如果我不更新表单上的绑定字段,一切正常。一旦我这样做了,我就会在导航到下一条记录时收到该错误。

这是我的重新计算按钮的 vba 代码:

Private Sub Recalculate()
    vendorID = Me.product_supplier_id
    supplierID = "supplier_id=" & vendorID

    supplierHandling = Me.product_handling
    vendorFee = Me.product_vendor_fee
    supplierMarkupPercent = DLookup("supplier_markup_percent", "suppliers", supplierID)
    supplierMarkupFixed = DLookup("supplier_markup_fixed", "suppliers", supplierID)

    productCost = Me.product_cost
    productShipping = Me.product_shipping
    totalCost = productCost + productShipping + supplierHandling
    totalCost = totalCost + vendorFee
    markup = supplierMarkupFixed + (totalCost * supplierMarkupPercent)
    productPrice = (totalCost + markup) / 0.85
    amzFee = productPrice * 0.15
    totalCost = totalCost + amzFee
    profit = productPrice - totalCost

    Me.product_total_cost = totalCost
    Me.product_price = productPrice
    Me.product_profit = profit

    SetPriceColor
End Sub

接近结尾的 3 个语句(在 SetPriceColor 之前)是罪魁祸首。

我不知道如何解决这个问题。我已经梳理了许多谷歌搜索,但没有什么能解决这个特定案例的问题。

4

2 回答 2

1

是的,问题是由链接的 ODBC 表引起的。加上浮点数列,当 Access 检查绑定表单中的更改(无论是通过 VBA 还是手动)是否与保存的记录的先前版本冲突时,这可能会导致问题。

解决方案应该是在您的表格中添加一TIMESTAMP列。DEFAULT CURRENT_TIMESTAMPON UPDATE CURRENT_TIMESTAMP

这里

ALTER TABLE myTable
ADD COLUMN updated_at 
  TIMESTAMP DEFAULT CURRENT_TIMESTAMP 
  ON UPDATE CURRENT_TIMESTAMP;

请参阅以下问题:

写入冲突消息突然开始出现在 ODBC 链接表中

MySQL 是否具有与 SQL Server 行版本等效的功能?

对于从 SQL Server 链接的表,添加ROWVERSION列肯定可以解决问题。对于 MySql(及其 ODBC 驱动程序),它应该可以工作,而且它确实在这里工作。

于 2020-06-20T17:11:23.957 回答
0

当您将 SQL 数据库链接到 Access 数据库时,您需要确保一些事情已经到位。

在 SQL 方面,SQL 表必须有一个主键和一个时间戳字段,其中数据类型是时间戳。

在访问方面,当引用表和使用记录集时,包括 dbOpenDynaset 和 dbSeeChanges。这是一个例子:

Dim qry As String
Dim rs As Recordset

qry = "SELECT * FROM yourtable"
Set rs = CurrentDB.OpenRecordset(qry, dbOpenDynaset, dbSeeChanges)

这应该可以阻止您的错误弹出。此外,如果您对 SQL 表进行更改,Access 数据库不会始终捕获这些更改,因此您需要使用链接表管理器刷新您的连接。

于 2020-06-23T00:11:11.543 回答