小编ric*_*zsz的帖子

使用DAO和Sql Server链接表的事务

我正在将一个clasic Access应用程序迁移到Sql Server,即DAO + Linked表.

我发现了一个令人反感的行为:当我使用链接表上的记录集进行更改时,Access使用多个连接.多个连接在服务器端同时意味着多个事务.这些交易是独立的.没有嵌套.

使用链接表到.mdb文件的标准MS-Access行为是不同的.一次只有一笔交易.执行提交之前,在同一DAO.Workspace中运行的任何代码都可以看到每个数据库更改.

规则已更改,使用客户端事务的现有DAO代码将失败.

如果我使用打开为dbOpenDynaset的记录集添加或更新记录,则任何尝试读取它们的代码都将失败:找不到新记录并查看原始状态的现有记录.为什么?因为操作是在多个独立的交易中进行的

执行示例提供的代码,sql profiler将向您显示使用不同的事务ID进行的不同操作.

我已经使用ADO对此进行了测试,一切运行良好.但是有成千上万的代码行.

除了使用ADO重写代码之外,还有其他解决方案吗?

我可以修改标准的Access行为吗?(使用读取未提交的隔离级别,指示不打开新连接,...)

下面的代码重现了这个问题.这很简单:

1.-在现有记录上打开记录集
2.-添加新记录
3.-尝试阅读最近添加的记录

如果我在(1)中使用dbOpenDynaset,我将看不到(3)中的新记录.

我正在使用Acc-2010,.accdb格式文件和Sql Server 2008 R2

谢谢.

    Private Sub test0()
     Dim bResult As Boolean

    Dim bUseTrans As Boolean 'New record added in transaction

    Dim rsExist As DAO.Recordset2 'Dummy recordset
     Dim tRecordsetExist As DAO.RecordsetTypeEnum 'Dummy recordset type:
                                                  '  with dbOpenDynaset fail.
                                                  '  Any other works fine

    Dim rs2Add As DAO.Recordset

    Dim rs2Read As DAO.Recordset 'Used to read recently added record
     Dim tRecordset2Read As DAO.RecordsetTypeEnum …
Run Code Online (Sandbox Code Playgroud)

sql-server ms-access dao transactions linked-tables

6
推荐指数
1
解决办法
4116
查看次数

标签 统计

dao ×1

linked-tables ×1

ms-access ×1

sql-server ×1

transactions ×1