- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
作为我维护的一个大型(250mb 前端文件)Microsoft Access 应用程序的一部分,我有一个处理发票的部分。所有表都在应用程序启动时动态附加到 SQL Server 后端数据库。
发票是通过两个阶段的过程获得的。对数据库其他部分的查询将所需信息汇总在一起,并在 Access 前端创建一个临时表,其中包含需要放入发票中的信息。
流程的第二阶段然后在 Access 数据库引擎上打开一个事务,并通过链接表生成发票。以下是一些相关的代码片段。
我们首先使用单独的应用程序级锁将其他用户拒之门外。这些例程使用单独的数据库表并传递查询以防止其他用户通过此(或应用程序中可能相关的任何其他点)
getLock "Invoice"
getLock "Item"
我们还需要检查,就在我们到达这一点之前,其他人没有做同样的事情,如果他们做了,就中止。
stage = "Pre Transaction"
Set ws = DBEngine.Workspaces(0)
Set db = CurrentDb
in_trans = True
ws.BeginTrans
stage = "check no one else did this invoicing whilst we were thinking"
SQL = "SELECT i.ID FROM tmpUKRepeatInvoices i INNER JOIN dbo_RepeatInvoicing ri ..."
rs.Open SQL, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
If Not rs.EOF Then
rs.Close
ws.Rollback
releaseLock "Item"
releaseLock "Invoice"
DoCmd.Hourglass False
MsgBox "Some else has already completed this. ..."
GoTo Trans_Exit
End If
rs.Close
我们不能对 Invoice 和 Item number 字段使用自动递增,因为 Invoice 表上有一个审计触发器,如果我们这样做,Access 就会搞砸。所以我们以编程方式进行
stage = "Get Invoice and Item Nos"
SQL = "SELECT Max(InvoiceNumber) AS MaxInvNo FROM dbo_Invoice"
rs.Open SQL, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
CurrentInvoiceNumber = rs.Fields("MaxInvNo")
rs.Close
SQL = "SELECT Max(ItemID) As MaxItemNo FROM dbo_Item"
rs.Open SQL, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
CurrentItemNumber = rs.Fields("MaxItemNo")
rs.Close
这是发票的主要部分。名称前面带有 dbo_ 的表是附表
stage = "Create Invoice Table Entries"
SQL = "INSERT INTO dbo_Invoice ..."
db.Execute SQL, dbFailOnError
stage = "Create Item Table Entries"
SQL = "INSERT INTO dbo_Item ..."
db.Execute SQL, dbFailOnError
stage = "Update Repeat Invoicing Table"
SQL = "UPDATE dbo_repeatInvoicing c INNER JOIN tmpUKRepeatInvoices i ON ..."
db.Execute SQL, dbFailOnError
stage = "Remove Entries from Temp Table"
SQL = "DELETE FROM tmpUKRepeatInvoices WHERE HoldInvoice = 0"
db.Execute SQL, dbFailOnError
stage = "Complete Transaction"
ws.CommitTrans
我随后更改了上面的最后一个陈述,以试图减轻我将要描述的问题
ws.CommitTrans dbForceOSFlush
现在说这是否有帮助还为时过早。
最后我们释放锁
releaseLock "Item"
releaseLock "Invoice"
in_trans = False
此代码完成后,假定已提交的事务控制权返回给用户表单。有一个单独的按钮用于打印发票,单击该按钮会动态生成一个通过查询 Access 发票和项目选项卡并将其存储在特定名称的查询定义中。然后代码根据该查询调用报告(本质上是发票表格)以生成所有发票的打印预览。它们是从打印预览中打印出来的。
如上所述,发票表上有一个更新触发器,它在审计表中记录了 DELETED。发票的一部分。
偶尔(每天使用时每两个月一次)的错误是
出于显而易见的原因,我正在尝试设想什么情况可能会导致这种情况发生。我能想出的唯一场景(这似乎很遥远)是
不幸的是,我找不到关于 dbForceOSFlush 的信息,尤其是 Access 在不使用时在幕后可能做了什么。谁能确认我对正在发生的事情的设想是否可行?是否有任何其他情况可能会导致我所看到的症状。
最佳答案
我建议不要使用动态附加表
创建一个连接对象以实现作为到 SQL Server 数据库的直接 ODBC 链接。
这将消除一层抽象和潜在的混淆,因为当您打开一个事务时,您会知道它是直接在 SQL Server 表上创建的。它还应该有助于加速您的代码。
您没有说您运行的是哪个版本的 Access,但对于习惯使用 DAO 对象的开发人员来说,坏消息是微软说
“Microsoft Access 2013 不支持 ODBCDirect 工作区。如果您想在不使用 Microsoft Access 数据库引擎的情况下 Access 外部数据源,请使用 ADO。”
因此,即使您不使用 Access 2013,也可能更好地通过使用 ADO.Connection 来验证您的代码
http://msdn.microsoft.com/en-us/library/office/jj249940(v=office.15).aspx
关于sql-server - Access 在本地保留未刷新的事务多长时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24408250/
我正在尝试编写 Access Access 数据库的脚本,以便在命令行上使用。 Access 数据库使用工作组文件进行保护。 Dim oApp, sWGF,myWS Set sApp = Create
我有一个包含数据表的表格。我希望用户能够选择多行,单击按钮并运行一些 sql 查询并对这些行执行一些工作。 查看我的 VBA 代码,我发现如何使用 CurrentRecord 属性 Access 最后
如果我在某个网络位置有 Microsoft Access 2007 数据库,那么可以使用该数据库的客户端计算机的数量是否有限制?客户端不会安装 Access,而是使用 Access Runtime 2
我正在开发一个注册系统。但我收到此错误:You tried to execute a query that does not include the specified expression.. 我正
我有一个产品设计为使用 MS Access 文件作为数据库的桌面产品。 现在,一些用户需要将它安装在几台 PC(比如说 2 或 3 台)上并共享数据库。 我想将 MS Access 文件放在共享文件夹
我接手了一个旧的软件项目,该项目使用 MS Access 数据库来存储数据。但是数据库不会在 Access 中打开,如下所示: "You do not have the necessary permi
我有一个文件夹,里面装满了 100 多个 Access97 文件。我需要将它们全部更新到 Access2003。 我可以手动完成,但使用 VBA 可能会快很多。 有没有人会有一个片段可以做到这一点?或
我正在通过 SQL Server 迁移助手 (SSMA) 将数据从 Access 数据库迁移到 SQL Server。 Access 应用程序将继续与转换为链接表的本地表一起使用。 一个连续的表单在加
我正在通过 SQL Server 迁移助手 (SSMA) 将数据从 Access 数据库迁移到 SQL Server。 Access 应用程序将继续与转换为链接表的本地表一起使用。 一个连续的表单在加
我的公司用 Visual Basic 6 开发了一个应用程序。 该应用程序通过 ODBC 数据源使用 Access 数据库。 Access 数据库是一个扩展名为“.mdb”的文件。 在以下环境中运行应
我一直在尝试让 Microsoft Access 从主 Access 窗口中“退出”,以便我可以隐藏 Access 窗口并仅在桌面上显示表单,以便可以轻松地将其放置在其他应用程序旁边。 起初我发现了一
我想在 access 2010 中使用 access 2000 和 2003 数据库。由于我不想检查一切是否手动工作,我正在寻找一种工具来分析 VBA 代码以查找使用 access 2010 发生的错
所以我有一个 Excel 工作簿,其中有一个很好的 shaperange 对象的全局 map 。通过一些非常简单的代码,我可以更改颜色、将国家/地区集合分组和取消分组为数组等......并且效果非常好
我们希望有大约 35-40 人通过共享驱动器上的脚本写入 Access 数据库。这些指标分解为他们需要每小时写大约 3-7 次。 Access 会支持这一点而不会对我产生影响吗? 是的,我很乐意将其用
我正在寻找一种使用 VBA 代码从外部数据库文件中删除 VBA 模块的方法。名为“myfile.accdb”的外部文件有一个名为“mod1”的模块,我希望能够在单独的项目中使用 VBA 代码删除该模块
我在 Access 2003 数据库(在 Access 2007 中开发)中有三个表单,它们处于父级 -> 子级 -> 孙子级关系中。在子窗体的 'Form_Load' 子窗体中,我设置了孙子窗体的一
MS Access 2007 存在拒绝在设计模式下显示表单的问题。我可以看到表单的代码(如果我查看显示表单的按钮的事件属性),但我看不到作为 GUI 布局的表单。而且,当我尝试从应用程序的主窗口调用此
我编写了代码,使用 Excel 中的下拉列表提供的标准将两个表连接起来,然后将数据返回到电子表格上的特定位置(工作表上已经有标题)。 这在我的机器上和其他机器上使用 MS Access 的机器上都可以
我正在开始构建一个应用程序,该应用程序从给定的根路径开始遍历文件夹结构,并将所有找到的 Access 1997 .mdb 文件转换为较新的 Access 2007/2010 .accdb 格式。但是,
我有一个表单和一个按钮。我想通过单击按钮打开另一个表单,并将参数从父表单传递到子表单(子表单的 RecordSource 有参数)。我该怎么做? 最佳答案 您可以通过引用表单的对象来引用调用表单的任何
我是一名优秀的程序员,十分优秀!